ROS2校园网环境下跨计算机通信
简单发现协议是DDS标准中定义的标准协议。然而,在某些场景中,它具有已知的缺点。
- 随着新增节点数量的增加,它不能有效地扩展,因为交换的数据包数量显著增加。
- 在某些情况下,例如 WiFi,它需要具备可靠的组播功能。
Fast DDS Discovery Server 提供了一种客户端-服务器架构,允许节点使用中间服务器互相连接。每个节点都作为一个发现客户端,与一个或多个发现服务器共享信息,并从中接收发现信息。这减少了与发现相关的网络流量,并且不需要组播功能。

这些发现服务器可以是独立的、复制的,或者彼此连接,以在网络上创建冗余并避免单点故障。
1. 问题背景
1.1 校园网环境特点
- 组播(Multicast)被禁用:大部分校园网出于安全和管理考虑,禁用了IP组播功能
- UDP端口限制:某些UDP端口可能被防火墙阻止
- 网络隔离:不同楼宇或区域可能处于不同子网
- 动态IP分配:DHCP分配的IP地址可能变化
1.2 ROS 2默认通信机制的限制
ROS 2默认使用DDS的简单发现协议(SIMPLE Discovery Protocol),该协议:
- 依赖IP组播(239.255.0.1)进行节点发现
- 在组播被禁用的网络中完全失效
- 导致跨计算机节点无法相互发现
2. 解决方案概述
采用 Fast DDS Discovery Server 作为集中式发现服务,替代默认的分布式组播发现机制。
2.1 核心思想
- 使用单播(Unicast)替代组播
- 引入集中式发现服务器管理节点发现
- 通过环境变量控制节点的发现行为
3.服务器端配置(计算机1)
3.1 启动Discovery Server
1 2
| # 指定特定IP和端口(记得开放11811端口) fast-discovery-server -i 0 -l 10.250.146.125 -p 11811
|
3.2 启动ROS节点
1 2 3
| export ROS_DISCOVERY_SERVER="10.250.146.125:11811" export RMW_IMPLEMENTATION=rmw_fastrtps_cpp ros2 run demo_nodes_cpp talker --ros-args --remap __node:=talker_discovery_server
|
4.客户端配置(计算机2)
4.1 普通节点连接
1 2 3
| export ROS_DISCOVERY_SERVER="10.250.146.125:11811" export RMW_IMPLEMENTATION=rmw_fastrtps_cpp ros2 run demo_nodes_cpp listener --ros-args --remap __node:=listener_discovery_server
|
4.4.2 CLI工具配置(关键步骤)
由于ROS 2命令行工具默认使用组播发现,需要特殊配置:
创建超级客户端配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <!-- ~/super_client_config.xml --> <?xml version="1.0" encoding="UTF-8" ?> <dds> <profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles"> <participant profile_name="super_client_profile" is_default_profile="true"> <rtps> <builtin> <discovery_config> <discoveryProtocol>SUPER_CLIENT</discoveryProtocol> <discoveryServersList> <RemoteServer prefix="44.53.00.5f.45.50.52.4f.53.49.4d.41"> <metatrafficUnicastLocatorList> <locator> <udpv4> <address>10.250.146.125</address> <port>11811</port> </udpv4> </locator> </metatrafficUnicastLocatorList> </RemoteServer> </discoveryServersList> </discovery_config> </builtin> </rtps> </participant> </profiles> </dds>
|
配置CLI工具:
1 2 3 4 5 6 7 8 9 10 11 12
| # 设置环境变量 export FASTRTPS_DEFAULT_PROFILES_FILE=~/super_client_config.xml
# 重启ROS 2守护进程 ros2 daemon stop sleep 2 ros2 daemon start
# 现在可以使用CLI工具 ros2 topic list ros2 node list ros2 topic echo /chatter
|