Network Bridge是一個輕量級 ROS2 節點,旨在透過任意網路協定在機器人系統之間進行穩健通訊。該軟體包支援開箱即用的 UDP 和 TCP 協議,可跨網路無縫橋接 ROS2 主題,促進基地台和機器人系統之間或多個機器人系統之間的有效遠端通訊。
只需將儲存庫克隆到 ROS2 工作區並使用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
只需設定網路介面參數並列出您想要的主題即可開始。如果您透過蜂窩資料使用 UDP,建議設定 VPN 以方便連線。另請注意,此包內沒有進行加密。目前,如果您想要加密,則必須使用 VPN。
有關所有參數的說明以及 TCP 範例設定文件,請參閱config/Udp1.yaml
。
以下配置範例示範了機器人透過 UDP 在/gps/fix
上向基地台發送訊息,然後基地台將重新發布該訊息。只要訊息類型是在傳輸的兩端建置和取得的,它就可以無縫地應用於所有訊息類型。
/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
網路協定以pluginlib插件實現,允許使用抽象類別include/network_interfaces/network_interface_base.hpp
建立任意介面。理論上,任何可以發送和接收位元組的介面都可以實現,包括超越點對點通訊的協議,例如 ZMQ。如果您實現新的網路接口,請考慮開啟拉取請求。
該節點可以使用記錄器等級 DEBUG 啟動,它為調整壓縮、速率和過時訊息參數提供有用的信息。對於發送的每個訊息,接收方將輸出接收到的位元組數、解壓縮後的位元組大小以及傳輸延遲。
該軟體包是由 Purdue AI Racing 團隊開發用於 Indy Autonomous Challenge 挑戰賽。靈感來自 mqtt_client (https://github.com/ika-rwth-aachen/mqtt_client/)。