7.1.7-Componentes y funciones comunes de ROS

Comunicación distribuida en ROS

ROS (Robot Operating System) está diseñado como un entorno de cómputo distribuido. Esto significa que un sistema ROS en ejecución puede consistir en múltiples nodos repartidos por varias máquinas. Dependiendo de la configuración, cualquier nodo puede necesitar comunicarse con cualquier otro nodo en cualquier momento.

Para facilitar esto, ROS tiene requisitos de red específicos:

  1. Debe haber conectividad bidireccional total entre todas las máquinas en todos los puertos.
  2. Cada máquina debe anunciarse usando un nombre que pueda ser resuelto por todas las demás máquinas.

Pasos de implementación

1. Preparación

Antes de configurar ROS para la comunicación distribuida, asegúrese de que las distintas computadoras estén en la misma red. Idealmente, cada computadora debería tener asignada una dirección IP estática. Si está utilizando máquinas virtuales, debe cambiar la configuración del adaptador de red a "Modo puente" para permitir que interactúen en la misma red.

2. Modificar los archivos de configuración

En cada computadora, debe modificar el archivo /etc/hosts para incluir las direcciones IP y los nombres de host de las demás máquinas.

  • En la máquina anfitrión:

    Añada la dirección IP y el nombre de host de la máquina esclava.

    plaintext
    <Slave_IP_Address>    <Slave_Hostname>
  • En la máquina esclava:

    Añada la dirección IP y el nombre de host de la máquina anfitrión.

    plaintext
    <Host_IP_Address>    <Host_Hostname>

Después de actualizar los archivos /etc/hosts, use el comando ping para comprobar si las máquinas pueden comunicarse entre sí:

  • Comprobar la dirección IP: Use ifconfig o ip addr show.
  • Comprobar el nombre de host: Use hostname.

3. Configurar la dirección IP de la máquina anfitrión

En la máquina anfitrión, debe configurar la dirección IP añadiendo las siguientes líneas al archivo ~/.bashrc:

bash
export ROS_MASTER_URI=http://<Host_IP_Address>:11311
export ROS_HOSTNAME=<Host_IP_Address>

Estas líneas establecen ROS_MASTER_URI con la dirección IP de la máquina anfitrión, lo que indica a ROS dónde se está ejecutando el nodo master (roscore). ROS_HOSTNAME establece el nombre de host de la máquina que ROS utilizará.

4. Configurar la dirección IP de la máquina esclava

En cada máquina esclava (puede tener varias) también debe modificar el archivo ~/.bashrc añadiendo:

bash
export ROS_MASTER_URI=http://<Host_IP_Address>:11311
export ROS_HOSTNAME=<Slave_IP_Address>

Esta configuración hace que cada máquina esclava apunte al ROS master de la anfitrión, permitiéndoles unirse a la red ROS.

Probar la configuración

1. Inicie roscore en la máquina anfitrión

En la máquina anfitrión, inicie el nodo master de ROS ejecutando:

bash
roscore

Este paso es crucial porque el nodo master de ROS gestiona la comunicación entre los distintos nodos de la red ROS.

2. Probar la comunicación de la anfitrión a la esclava

  • En la máquina anfitrión: Inicie un nodo suscriptor.
  • En la máquina esclava: Inicie un nodo publicador.

Compruebe si los nodos pueden comunicarse como se espera.

3. Probar la comunicación de la esclava a la anfitrión

  • En la máquina esclava: Inicie un nodo suscriptor.
  • En la máquina anfitrión: Inicie un nodo publicador.

De nuevo, verifique que la comunicación entre los nodos funciona correctamente.