Network Bridge est un nœud ROS2 léger conçu pour une communication robuste entre les systèmes robotiques via des protocoles réseau arbitraires. Prenant en charge les protocoles UDP et TCP dès le départ, ce package relie de manière transparente les sujets ROS2 à travers les réseaux, facilitant ainsi des communications à distance efficaces entre une station de base et des systèmes robotiques, ou entre plusieurs systèmes robotiques.
Clonez simplement le référentiel dans votre espace de travail ROS2 et construisez avec 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
Configurez simplement les paramètres de l'interface réseau et répertoriez les sujets souhaités pour commencer. Si vous utilisez UDP sur des données cellulaires, il est recommandé de configurer un VPN pour faciliter la connexion. Veuillez également noter qu’aucun cryptage n’a lieu dans ce package. Actuellement, si vous souhaitez le cryptage, vous devez utiliser un VPN.
Voir config/Udp1.yaml
pour une description de tous les paramètres, ainsi que les exemples de fichiers de configuration TCP.
Les exemples de configuration suivants montrent un robot envoyant un message sur /gps/fix
via UDP à une station de base qui republiera ensuite le message. Cela fonctionne de manière transparente sur tous les types de messages, à condition qu'ils soient créés et proviennent des deux extrémités de la transmission.
/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
Les protocoles réseau sont implémentés sous forme de plugins pluginlib, permettant la création d'interfaces arbitraires à l'aide de la classe abstraite include/network_interfaces/network_interface_base.hpp
. Toute interface capable d'envoyer et de recevoir des octets pourrait théoriquement être implémentée, y compris des protocoles allant au-delà de la communication point à point, tels que ZMQ. Veuillez envisager d'ouvrir une pull request si vous implémentez une nouvelle interface réseau.
Ce nœud peut être lancé avec DEBUG au niveau de l'enregistreur, qui fournit des informations utiles pour régler les paramètres de compression, de débit et de messages périmés. Pour chaque message envoyé, le côté récepteur affichera le nombre d'octets reçus, la taille décompressée en octets et le délai de transmission.
Ce package a été développé pour être utilisé dans l'Indy Autonomous Challenge par l'équipe Purdue AI Racing. L'inspiration est tirée de mqtt_client (https://github.com/ika-rwth-aachen/mqtt_client/).