Crear un puente de comunicación entre ROS 1 y ROS 2

Un puente de comunicación de ROS 1 y ROS 2 permite que los nodos de ROS 1 y ROS 2 sean capaces de comunicarse entre ellos. Es posible que algunos paquetes no estén disponibles en ROS 2, un puente de comunicación puede ser util.

Para este tutorial asumimos que tienes ROS 1 (indigo) y ROS 2 instalado un tu plataforma de desarrollo. En el caso de que no tengas ROS 1 instalado en tu sistema acude a la pagina de ROS

En este tutorial necesitaras tener un total de 4 terminales abiertas y ejecutadas.

¿Necesitas más capacidad de cómputo? Estate atento

El puente esta actualmente implementado en C++ simplemente por que de momento no existe una API de Python para ROS 2. Los tipos de mensajes que se pueden transmitir esta limitado por los tipos disponibles en el momento de la compilación del puente.

Un nuevo paquete sera creado con la siguiente estructura:

ros2_ws/
    src/
        bridge/
            cmake/
                find_ros1_package.cmake
            src/
                bridge_1_to_2.cpp
                bridge_2_to_1.cpp
            CMakeLists.txt
            package.xml

Primero es necesario iniciar roscore de ROS 1:

# Shell #1:
# load setup.bash
. /opt/ros/indigo/setup.bash
# launch the ROS 1 core
roscore

# Shell #2:
. /opt/ros/indigo/setup.bash
rosrun rospy_tutorials talker

El publicador de ROS 1 empezara a publicar y a imprimir mensajes.

Ahora es necesario iniciar el subcriptor en ROS 2

# Shell #3:
cd ~/ros2_ws/
. ./install/setup.bash
listener

# Shell #4:
. /opt/ros/indigo/setup.bash
# Load the ROS 2 workspace
cd ~/ros2_ws/
. ./install/setup.bash
# launch the bridge
bridge_1_to_2

Como puedes comprobar el publicador de ROS 1 publica mensajes. Estos mensajes son pasados de ROS 1 a ROS 2 por el bridge. Finalmente el subscritor es capaz de escuchar los mensajes transcritos por el puente de comunicación.

ROS 1 AND ROS 2 BRIDGE

Primero es necesario iniciar roscore de ROS 1:

# Shell #1:
# load setup.bash
. /opt/ros/indigo/setup.bash
# launch the ROS 1 core
roscore

# Shell #2:
cd ~/ros2_ws/
. ./install/setup.bash
talker

El publicador empezara a publicar e imprimir mensajes.

Es necesario iniciar el suscriptor

# Shell #3:
. /opt/ros/indigo/setup.bash
rosrun rospy_tutorials listener

# Shell #4:
. /opt/ros/indigo/setup.bash
# Load the ROS 2 workspace
cd ~/ros2_ws/
. ./install/setup.bash
# launch the bridge
bridge_1_to_2

Como puedes comprobar el publicador de ROS 2 publica mensajes. Estos mensajes son pasados de ROS 2 a ROS 1 por el bridge. Finalmente el subscritor es capaz de escuchar los mensajes transcritos por el puente de comunicación.

ROS 2 AND ROS 1 BRIDGE