改进动态发现

目标 本教程将介绍如何使用改进的动态发现配置。

辅导水平: 高级

时间 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 会相互发现并进行通信。

在同一主机上运行的节点 A 和 B

同一主机

节点 B 设置

无静态同行

使用静态对等

关闭

本地主机

子网

关闭

本地主机

子网

节点 A 设置

无静态同行

关闭

X

X

X

X

X

X

本地主机

X

O

O

X

O

O

子网

X

O

O

X

O

O

使用静态对等

关闭

X

X

X

X

X

X

本地主机

X

O

O

X

O

O

子网

X

O

O

X

O

O

在不同主机中运行的节点 A 和 B

不同的主机

节点 B 设置

无静态同行

使用静态对等

关闭

本地主机

子网

关闭

本地主机

子网

节点 A 设置

无静态同行

关闭

X

X

X

X

X

X

本地主机

X

X

X

X

O

O

子网

X

X

O

X

O

O

使用静态对等

关闭

X

X

X

X

X

X

本地主机

X

O

O

X

O

O

子网

X

O

O

X

O

O

实例

例如,以下命令将限制 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