ROS2 + DDS:una guía de campo para la interoperabilidad
Aunque ROS 2 está diseñado para usar DDS como su marco de conectividad (consulte mi publicación de blog anterior - ROS 2 + DDS:When Ecosystems Merge para obtener más información), el proceso de integración tiene algunas peculiaridades que deben adaptarse para un sistema DDS puro para interoperar sin problemas con un sistema ROS 2. Este blog sirve como una guía práctica de campo para la interoperabilidad y cubre algunos de los problemas conocidos a partir de la versión "Bouncy Bolson" (julio de 2018) de ROS 2 y cómo mitigarlos.
Actualizaciones con ROS 2
ROS 2 es un proyecto en evolución. Es posible que haya cambios en las versiones futuras de ROS 2 que afecten aún más la interoperabilidad. Dicho esto, recuerde siempre que cuando utilice rmw_connext_cpp
capa debajo de ROS 2:sigue siendo Connext DDS. El poder y la flexibilidad inherentes a las bibliotecas de Connext todavía están disponibles, utilizando los mismos métodos que una implementación sin ROS. Tienes control sobre tu sistema.
A continuación, se muestra un resumen de las configuraciones que pueden afectar la interoperabilidad entre sistemas DDS puros y ROS 2 (ROS 2 "Bouncy Bolson" a menos que se especifique lo contrario):
Nombres de temas y particiones
ROS 2 identifica el espacio de nombres de los datos del tema codificándolo en el nombre o la partición DDS del tema. Los temas de datos de usuario estarán en el espacio de nombres "rt" (tema ROS), codificados en DDS como:
Tipos de datos de temas
Al usar la capa Connext RMW debajo de ROS2, es posible que haya notado que todos los temas "rt / *" de ROS2 se informan durante el descubrimiento para tener el mismo tipo de datos:
Este tipo de definición es insertada por la capa ROS2 rmw_connext_cpp para representar una serialización de los datos del tema, aunque los datos del tema no se modifiquen. Cuando se intenta una conexión con un tema DDS utilizando el tipo de datos original, se producirá una falta de coincidencia de QoS, lo que impedirá la conexión.
La solución más sencilla es suprimir este anuncio de código tipográfico de los participantes de ROS2. Esto se puede hacer agregando un archivo USER_QOS_PROFILES.xml al directorio usado para lanzar los participantes ROS2. Este archivo contiene la configuración de QoS para suprimir el código de tipo y el uso compartido de objetos de tipo, como:
Tenga en cuenta que este archivo también establece la confiabilidad en "Mejor esfuerzo"; este es solo un ejemplo de punto de partida.
Tenga en cuenta también que este archivo de QoS solo afecta a los participantes de ROS2 que se iniciaron para el mismo directorio que el archivo de QoS. Si es necesario, cada participante de ROS2 podría tener su propio archivo QoS personalizado en un directorio separado.
Selección de transporte
La conexión de un sistema DDS a un sistema ROS2 puede generar advertencias sobre localizadores / transportes no direccionables no instalados. Este es el resultado de que los participantes tengan diferentes listas de transportes disponibles, como el participante A (udpv4) que descubre al participante B (udpv4, udpv6); Se emitirá una advertencia de que el participante A no podrá conectarse usando udpv6.
La selección de transporte con Connext RMW bajo ROS2 utiliza los mismos métodos que en un sistema solo de Connext:
- Configure los transportes permitidos en el archivo USER_QOS_PROFILES.xml agregando a la sección
, como en:
UDPV4 | SHMEM
- Configure los pares iniciales (y habilite / deshabilite la multidifusión) agregando un archivo "NDDS_DISCOVERY_PEERS" al directorio utilizado para iniciar la aplicación. El archivo de texto sin formato debe contener una lista separada por comas de los pares deseados para el descubrimiento, como:
localhost, 192.168.1.12, shmem://
(este ejemplo deshabilita el descubrimiento de multidifusión)
Selección de RMW en ROS2
Asegúrese de configurar la variable de entorno para seleccionar Connext como la capa RMW en ROS2:
RMW_IMPLEMENTATION =rmw_connext_cpp
Esto también se puede pasar en la línea de comando al iniciar aplicaciones ROS2, como en:
RMW_IMPLEMENTATION =rmw_connext_cpp ros2 ejecutar demo_nodes_cpp talker
Soporte ilimitado
Algunos temas de ROS2 utilizan secuencias y cadenas ilimitadas. Las aplicaciones DDS que buscan interoperar utilizando estos temas deberán habilitar "Soporte ilimitado" en el generador de código DDS.
Mirando hacia el futuro con RTI
Estén atentos al próximo artículo de esta serie, que cubre una brecha crucial (aunque temporal) en la alineación de ROS2:registro y reproducción de datos del tema.
Si está listo para comenzar con el equipo de RTI y mejorar sus sistemas de comunicación, contáctenos hoy. Nuestros expertos están listos para ayudarlo.
Tecnología de Internet de las cosas
- Guía de marcado láser
- Software Open DDS vs.RTI DDS
- ROS2 + DDS:Tócalo de nuevo
- Integración ROS2 + DDS:cuando los ecosistemas se fusionan | RTI
- Cómo integrar Qt y DDS en una aplicación de IoT
- Robot ROS
- Guía de fabricación rápida
- En la carretera con IoT
- Guía para compradores de plataformas de IoT industrial
- Guía de refuerzos para PCB
- Su guía para el servicio y reparación de maquinaria pesada en el campo