Network Bridge ist ein leichter ROS2-Knoten, der für die robuste Kommunikation zwischen Robotersystemen über beliebige Netzwerkprotokolle entwickelt wurde. Durch die standardmäßige Unterstützung der UDP- und TCP-Protokolle überbrückt dieses Paket nahtlos ROS2-Themen über Netzwerke hinweg und erleichtert so eine effektive Fernkommunikation zwischen einer Basisstation und Robotersystemen oder zwischen mehreren Robotersystemen.
Klonen Sie einfach das Repository in Ihren ROS2-Arbeitsbereich und erstellen Sie es mit 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
Richten Sie einfach die Netzwerkschnittstellenparameter ein und listen Sie die gewünschten Themen auf, um loszulegen. Wenn Sie UDP über Mobilfunkdaten verwenden, wird empfohlen, ein VPN einzurichten, um die Verbindung zu erleichtern. Bitte beachten Sie außerdem, dass in diesem Paket keine Verschlüsselung erfolgt. Wenn Sie derzeit eine Verschlüsselung wünschen, müssen Sie ein VPN verwenden.
Eine Beschreibung aller Parameter sowie die TCP-Beispielkonfigurationsdateien finden Sie unter config/Udp1.yaml
.
Die folgenden Konfigurationsbeispiele zeigen einen Roboter, der eine Nachricht auf /gps/fix
über UDP an eine Basisstation sendet, die die Nachricht dann erneut veröffentlicht. Dies funktioniert nahtlos bei allen Nachrichtentypen, sofern sie an beiden Enden der Übertragung erstellt und bereitgestellt werden.
/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
Netzwerkprotokolle werden als Pluginlib-Plugins implementiert, was die Erstellung beliebiger Schnittstellen mithilfe der abstrakten Klasse include/network_interfaces/network_interface_base.hpp
ermöglicht. Theoretisch könnte jede Schnittstelle implementiert werden, die Bytes senden und empfangen kann, einschließlich Protokollen, die über die Punkt-zu-Punkt-Kommunikation hinausgehen, wie z. B. ZMQ. Bitte erwägen Sie das Öffnen einer Pull-Anfrage, wenn Sie eine neue Netzwerkschnittstelle implementieren.
Dieser Knoten kann mit DEBUG auf Logger-Ebene gestartet werden, was nützliche Informationen zum Optimieren der Komprimierungs-, Rate- und veralteten Nachrichtenparameter bereitstellt. Für jede gesendete Nachricht gibt die Empfangsseite die Anzahl der empfangenen Bytes, die dekomprimierte Größe in Bytes und die Übertragungsverzögerung aus.
Dieses Paket wurde vom Purdue AI Racing Team für den Einsatz in der Indy Autonomous Challenge entwickelt. Die Inspiration stammt von mqtt_client (https://github.com/ika-rwth-aachen/mqtt_client/).