# Bender across multiple machines --- Table of Contents: [TOC] --- At this moment, we assume you have completed the [previous tutorial](network_setup.md). ## 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 `` 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`: ``` ... ... ``` 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](http://wiki.ros.org/roslaunch/XML/machine) --- ## Atributo `machine` Es utilizado para especificar que equipo será el host de la aplicación. Puede ser puesto dentro de los tags `` y ``. Su uso es como sigue: ``` ... ``` 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 (``). 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.