ROS2校园网环境下跨计算机通信


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

文章作者: Andy
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Andy !
  目录