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/)。