【ROS2】高级:使用 Fast DDS 发现服务器作为发现协议 [社区贡献]

目标:本教程将展示如何使用 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 发现服务器提供了一种客户端-服务器架构,允许节点使用中间服务器相互连接。每个节点都充当发现客户端,与一个或多个发现服务器共享其信息,并从中接收发现信息。这减少了与发现相关的网络流量,并且不需要多播功能。

1573d92953cd912f4a47ba63069d22d1.png

这些发现服务器可以是独立的、重复的或相互连接的,以便在网络上创建冗余并避免单点故障。

快速 DDS 发现服务器 v2

最新的 ROS 2 Foxy Fitzroy 版本(2020 年 12 月)包含了一个新版本,即 Fast DDS 发现服务器的第 2 版。该版本包括一个新的过滤功能,可以进一步减少发送的发现消息数量。该版本使用不同节点的主题来决定两个节点是否希望通信,或者它们是否可以不匹配(即不相互发现)。下图显示了发现消息的减少情况:

2350a2289f9e367dff9021621241e42e.png

这种架构大大减少了服务器和客户端之间发送的消息数量。在下图中,显示了在 RMF 诊所演示 https://github.com/open-rmf/rmf_demos#Clinic-World 的发现阶段网络流量的减少情况:

46339b0b10585cdc371c189b7524f3a9.png

要使用此功能,可以使用参与者的 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_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值