改进动态发现
目标 本教程将介绍如何使用改进的动态发现配置。
辅导水平: 高级
时间 15 分钟
概述
默认情况下,ROS 2 会尝试自动查找同一子网内所有主机上的所有节点。不过,以下选项可用于控制 ROS 2 的发现范围。
配置参数
ros_automatic_discovery_range
:控制 ROS 节点尝试相互发现的距离。有效选项包括
子网
是默认设置,对于基于 DDS 的中间件来说,这意味着它会发现任何可通过组播到达的节点。本地主机
意味着节点只会尝试发现同一台机器上的其他节点。关闭
意味着节点不会发现任何其他节点,即使是在同一台机器上。系统默认值
表示 "不更改任何发现设置"。
ros_static_peers(静态同伴
是一个分号 (;
)分隔的地址列表,ROS 应尝试在这些地址上发现节点。这样就可以连接到特定机器上的节点(只要它们的发现范围没有设置为关闭
).
本地节点和远程节点的这两个环境变量的组合将启用并控制 ROS 2 的通信发现范围。下表重点介绍了可能的组合下的发现范围行为。
A X
表示节点 A 和 B 不会发现对方并进行通信。A O
表示节点 A 和 B 会相互发现并进行通信。
同一主机 |
节点 B 设置 |
|||||||
---|---|---|---|---|---|---|---|---|
无静态同行 |
使用静态对等 |
|||||||
关闭 |
本地主机 |
子网 |
关闭 |
本地主机 |
子网 |
|||
节点 A 设置 |
无静态同行 |
关闭 |
|
|
|
|
|
|
本地主机 |
|
|
|
|
|
|
||
子网 |
|
|
|
|
|
|
||
使用静态对等 |
关闭 |
|
|
|
|
|
|
|
本地主机 |
|
|
|
|
|
|
||
子网 |
|
|
|
|
|
|
不同的主机 |
节点 B 设置 |
|||||||
---|---|---|---|---|---|---|---|---|
无静态同行 |
使用静态对等 |
|||||||
关闭 |
本地主机 |
子网 |
关闭 |
本地主机 |
子网 |
|||
节点 A 设置 |
无静态同行 |
关闭 |
|
|
|
|
|
|
本地主机 |
|
|
|
|
|
|
||
子网 |
|
|
|
|
|
|
||
使用静态对等 |
关闭 |
|
|
|
|
|
|
|
本地主机 |
|
|
|
|
|
|
||
子网 |
|
|
|
|
|
|
实例
例如,以下命令将限制 ROS 2 只与本地主机和特定对等设备通信:
export ROS_AUTOMATIC_DISCOVERY_RANGE=LOCALHOST
export ROS_STATIC_PEERS=192.168.0.1;remote.com
要在 shell 会话之间保持这一设置,可以在 shell 启动脚本中添加该命令:
echo "export ROS_AUTOMATIC_DISCOVERY_RANGE=LOCALHOST" >> ~/.bashrc
echo "export ROS_STATIC_PEERS=192.168.0.1;remote.com" >> ~/.bashrc
export ROS_AUTOMATIC_DISCOVERY_RANGE=LOCALHOST
export ROS_STATIC_PEERS=192.168.0.1;remote.com
要在 shell 会话之间保持这一设置,可以在 shell 启动脚本中添加该命令:
echo "export ROS_AUTOMATIC_DISCOVERY_RANGE=LOCALHOST" >> ~/.bash_profile
echo "export ROS_STATIC_PEERS=192.168.0.1;remote.com" >> ~/.bash_profile
设置 ROS_AUTOMATIC_DISCOVERY_RANGE=LOCALHOST
set ROS_STATIC_PEERS=192.168.0.1;remote.com
如果您想在 shell 会话之间将其永久保存,也可以运行
setx ROS_AUTOMATIC_DISCOVERY_RANGE LOCALHOST
setx ROS_STATIC_PEERS 192.168.0.1;remote.com