Skip to content

multiple_machines

Matías Pavez edited this page May 8, 2017 · 1 revision

Bender across multiple machines


Table of Contents:

[TOC]


At this moment, we assume you have completed the previous tutorial.

Overview

Se explicará como configurar el sistema para lanzar nodos remotamente, lo que es útil para correr todo desde un mismo PC.


Requisitos

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 

Tag <machine>

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


Atributo machine

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

Comando benderlaunch

Overview

$ 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.

Uso: Configuración de machines

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.

Uso: Ejecución

Uso

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.

Restauración del workspace

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.

Help

Por último, se puede ejecutar $ benderlaunch -h para ver el uso del comando.