-
Notifications
You must be signed in to change notification settings - Fork 2
multiple_machines
Table of Contents:
[TOC]
At this moment, we assume you have completed the previous tutorial.
Se explicará como configurar el sistema para lanzar nodos remotamente, lo que es útil para correr todo desde un mismo PC.
Debido a que el manejo de aplicaciones remotas se realiza mediante ssh, se deben instalar los programas necesarios:
$ sudo apt-get install openssh-server openssh-client
Sirve para crear un alias para un equipo, el que será utilizado para especificar en donde se ejecutará cada nodo de ROS.
Todos los machines deben ser definidos en el archivo $BENDER_CONFIG/bender.machine
:
<launch>
...
<machine name="my-machine" address="192.168.0.10" user="benderchest"
password="my-password" env-loader="$(env BENDER_ENV_LOADER)" timeout="15"/>
...
</launch>
La configuración mínima para cada equipo, debe especificar:
-
name
: alias que se le dará al equipo, para poder referirse a él desde otro launchfile -
address
: dirección IP del equipo remoto -
user
: nombre del usuario remoto -
password
: contraseña del usuario remoto -
env-loader
: script que correrá en el equipo remoto y configurará el sistema
Más info sobre el tag en la documentación oficial
Es utilizado para especificar que equipo será el host de la aplicación. Puede ser puesto dentro de los tags <node>
y <group>
.
Su uso es como sigue:
<launch>
<node name="foo" pkg="foo_pkg" type="foo.py" machine="my-machine"/>
...
</launch>
lo que intentará lanzar el nodo foo
en el pc identificado por my-machine
, definido anteriormente.
Importante: No se pueden lanzar interfaces gráficas de ningún tipo mediante los machines!, procurar correr todos los visualizadores en un mismo pc (desde donde se lanza el launch principal) o ejecutarlos manualmente en el pc deseado.
Hasta el momento se ha notado que:
- rviz: Se cae el nodo y lanza error
- stage: Se cae el nodo y lanza error
- camera_display: No se lanza error, pero no se muestra la interfaz
$ benderlaunch
es un comando que permite setear el tag machine
de varios launch-files simultaneamente, según una configuración deseada.
Se recomienda su uso, para mantener el repositorio libre de multiples copias del mismo launch-file configurado para distintos machines, lo que reduce enormemente las oportunidades de errores al desarrollar y simplifica la vida:
- mantiene limpio el workspace, lo que facilita el desarrollo
- evita equivocarse de archivo que se debe modificar
- correcciones hechas en un archivo deben ser hechas en todos, lo que siempre se olvida.
Está escrito en Bash (versión 4) y se encuentra en el directorio $BENDER_WORKSPACE/config/benderlaunch
.
En primer lugar, se debe especificar la configuración deseada:
# abrir el archivo de configuración
$ benderlaunch -e
Se debe especificar que launchfiles se lanzaran en que equipo, para ello, se utiliza el comando launchfiles['machine-name']
, con la siguiente sintaxis:
launchfiles['my-machine']="
bender_speech speech.launch
bender_navigation complete_nav.launch
foo_pkg foo.launch
"
lo que significa: modifique el launchfile foo.launch
del package foo_pkg
, para que todos sus nodos tengan el par atributo-valor machine="my-machine"
. Notar que el sistema modificará ese launchfile y todos los que están incluidos (<include file="..." >
).
Además, se agregará el include de $BENDER_CONFIG/bender.machine
en cada uno de los launchfiles modificados.
Si en algún punto de la recursión, se llega a un include de un archivo que se escuentra especificado en la configuración, entonces no se modificará. Lo que permite tener configuraciones como:
launchfiles['my-machine']="
bender_speech speech.launch
"
launchfiles['my-other-machine']="
bender_speech recognizer.launch
"
donde speech.launch tiene un include de recognizer.launch.
Obs: Es importante que todas estas directivas de configuración queden entre las instrucciones declare -A launchfiles
y readonly launchfiles
.
Una vez preparada la configuración, se ejecuta:
$ benderlaunch
lo que procederá a modificar todos los archivos involucrados.
Por cada archivo modificado, se generan dos archivos:
-
my-file.launch.orig.xml
: backup del archivo original (1ra ejecución del comando) -
my-file.launch.xml
: backup del archivo previo. Sirve de respaldo para ver cual era el estado del archivo, previa aplicación reiterada del comando.
Debido a que no se pueden dejar todos esos archivos nuevos por ahí, ni se pueden subir al repositorio, se debe utilizar el comando:
$ benderlaunch -r
Lo que devolverá el workspace a su estado original.
importante: Se renombrarán TODOS los archivos que terminados en .launch.orig.xml
y les cambiará la extensión a .launch
borrando los archivos existentes con el mismo nombre. Además, se eliminarán todos los archivos terminados en .launch.xml
.
Por último, se puede ejecutar $ benderlaunch -h
para ver el uso del comando.