目标:本教程将展示如何使用 Fast DDS Discovery Server 发现协议启动 ROS 2 节点。
教程级别:高级
时间:20 分钟
目录
背景
快速 DDS 发现服务器 v2
先决条件
运行此教程
设置发现服务器
启动监听节点
启动对话节点
展示发现服务器执行
可视化工具
rqt_graph
高级用例
服务器冗余
备份服务器
发现分区
ROS 2 内省
守护进程的相关工具
没有虚拟光驱工具
比较 Fast DDS 发现服务器与简单发现协议
背景
从 ROS 2 Eloquent Elusor 开始,Fast DDS Discovery Server 协议是一项提供集中动态发现机制的功能,而不是 DDS 默认使用的分布式机制。本教程解释了如何使用 Fast DDS Discovery Server 功能作为发现通信来运行一些 ROS 2 示例。
为了获取有关可用发现配置的更多信息,请查看以下文档 https://fast-dds.docs.eprosima.com/en/v2.1.0/fastdds/discovery/discovery.html 或阅读 Fast DDS 发现服务器特定文档。https://fast-dds.docs.eprosima.com/en/v2.1.0/fastdds/discovery/discovery_server.html#discovery-server
简单发现协议 https://fast-dds.docs.eprosima.com/en/v2.1.0/fastdds/discovery/simple.html 是 DDS 标准 https://www.omg.org/omg-dds-portal/ 中定义的标准协议。然而,它在某些场景中存在已知的缺点。
它不能有效扩展,因为随着新节点的添加,交换的数据包数量显著增加。
它需要多播功能,但在某些情况下可能无法可靠地工作,例如 WiFi。
Fast DDS 发现服务器提供了一种客户端-服务器架构,允许节点使用中间服务器相互连接。每个节点都充当发现客户端,与一个或多个发现服务器共享其信息,并从中接收发现信息。这减少了与发现相关的网络流量,并且不需要多播功能。
这些发现服务器可以是独立的、重复的或相互连接的,以便在网络上创建冗余并避免单点故障。
快速 DDS 发现服务器 v2
最新的 ROS 2 Foxy Fitzroy 版本(2020 年 12 月)包含了一个新版本,即 Fast DDS 发现服务器的第 2 版。该版本包括一个新的过滤功能,可以进一步减少发送的发现消息数量。该版本使用不同节点的主题来决定两个节点是否希望通信,或者它们是否可以不匹配(即不相互发现)。下图显示了发现消息的减少情况:
这种架构大大减少了服务器和客户端之间发送的消息数量。在下图中,显示了在 RMF 诊所演示 https://github.com/open-rmf/rmf_demos#Clinic-World 的发现阶段网络流量的减少情况:
要使用此功能,可以使用参与者的 XML 配置 https://fast-dds.docs.eprosima.com/en/v2.1.0/fastdds/discovery/discovery_server.html#discovery-server 来配置发现服务器。也可以使用 fastdds
工具 https://fast-dds.docs.eprosima.com/en/v2.1.0/fastddscli/cli/cli.html#discovery 和环境变量 https://fast-dds.docs.eprosima.com/en/v2.1.0/fastdds/env_vars/env_vars.html 来配置发现服务器,这是本教程中使用的方法。有关发现服务器配置的更详细说明,请访问 Fast DDS 发现服务器文档。
先决条件
本教程假设您安装 https://docs.ros.org/en/jazzy/Installation.html 了 ROS 2 Foxy(或更新版本)。如果您的安装使用的是低于 Foxy 的 ROS 2 版本,则无法使用 fastdds
工具。因此,为了使用发现服务器,您可以更新您的存储库以使用不同的 Fast DDS 版本,或者使用 Fast DDS XML QoS 配置 https://fast-dds.docs.eprosima.com/en/v2.1.0/fastdds/discovery/discovery_server.html#discovery-server 来配置发现服务器。
运行本教程
talker-listener
ROS 2 演示创建一个 talker
节点,该节点每秒发布一次“hello world”消息,并创建一个 listener
节点,该节点监听这些消息。
通过获取 ROS 2 https://docs.ros.org/en/jazzy/Tutorials/Beginner-CLI-Tools/Configuring-ROS2-Environment.html ,您将可以访问 CLI 工具 fastdds
。该工具可以访问发现工具 https://fast-dds.docs.eprosima.com/en/v2.14.3/fastddscli/cli/cli.html ,可用于启动发现服务器。此服务器将管理连接到它的节点的发现过程。
重要
请勿忘记在每个新打开的终端中源 ROS 2。
设置发现服务器
首先启动一个 ID 为 0 的发现服务器,端口为 11811(默认端口),并监听所有可用接口。
打开一个新的终端并运行:
cxy@ubuntu2404-cxy:~$ fastdds discovery --server-id 0
### Server is running ###
Participant Type: SERVER
Security: NO
Server ID: 0
Server GUID prefix: 44.53.00.5f.45.50.52.4f.53.49.4d.41
Server Addresses: UDPv4:[0.0.0.0]:11811
启动监听器节点
执行监听器演示,以监听 /chatter
主题。
在一个新的终端中,将环境变量 ROS_