Network Bridge es un nodo ROS2 liviano diseñado para una comunicación sólida entre sistemas robóticos a través de protocolos de red arbitrarios. Este paquete, que admite los protocolos UDP y TCP desde el primer momento, une perfectamente los temas de ROS2 entre redes, facilitando comunicaciones remotas efectivas entre una estación base y sistemas robóticos, o entre múltiples sistemas robóticos.
Simplemente clone el repositorio en su espacio de trabajo ROS2 y compílelo con colcon build
.
ros2 launch network_bridge tcp.launch.py
ros2 topic pub /tcp1/MyDefaultTopic std_msgs/msg/String "data: 'Hello World'"
ros2 topic echo /tcp2/MyDefaultTopic
ros2 launch network_bridge udp.launch.py
ros2 topic pub /udp1/MyDefaultTopic std_msgs/msg/String "data: 'Hello World'"
ros2 topic echo /udp2/MyDefaultTopic
Simplemente configure los parámetros de la interfaz de red y enumere los temas que desee para comenzar. Si utiliza UDP a través de datos móviles, se recomienda configurar una VPN para facilitar la conexión. Además, tenga en cuenta que no se produce ningún cifrado dentro de este paquete. Actualmente, si desea cifrar, debe utilizar una VPN.
Consulte config/Udp1.yaml
para obtener una descripción de todos los parámetros, así como los archivos de configuración de ejemplo de TCP.
Los siguientes ejemplos de configuración muestran un robot que envía un mensaje en /gps/fix
a través de UDP a una estación base que luego volverá a publicar el mensaje. Esto funciona perfectamente en todos los tipos de mensajes, siempre y cuando se creen y obtengan en ambos extremos de la transmisión.
/udp_sender:
ros__parameters:
UdpInterface:
local_address: "192.168.1.2"
receive_port: 5001
remote_address: "192.168.1.3"
send_port: 5000
topics:
- "/gps/fix"
/udp_receiver:
ros__parameters:
UdpInterface:
local_address: "192.168.1.3"
receive_port: 5000
remote_address: "192.168.1.2"
send_port: 5001
Los protocolos de red se implementan como complementos pluginlib, lo que permite la creación de interfaces arbitrarias utilizando la clase abstracta include/network_interfaces/network_interface_base.hpp
. En teoría, se podría implementar cualquier interfaz que pueda enviar y recibir bytes, incluidos protocolos que vayan más allá de la comunicación punto a punto, como ZMQ. Considere abrir una solicitud de extracción si implementa una nueva interfaz de red.
Este nodo se puede iniciar con DEBUG a nivel de registrador, que proporciona información útil para ajustar los parámetros de compresión, velocidad y mensajes obsoletos. Para cada mensaje que se envía, el lado receptor generará la cantidad de bytes recibidos, el tamaño descomprimido en bytes y el retraso de transmisión.
Este paquete fue desarrollado para su uso en el Indy Andalusian Challenge por el equipo Purdue AI Racing. La inspiración se tomó de mqtt_client (https://github.com/ika-rwth-aachen/mqtt_client/).