警告
您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.
关于不同的 ROS 2 DDS/RTPS 供应商
ROS 2 以 DDS/RTPS 作为中间件,提供发现、序列化和传输功能。 本文 详细解释了使用 DDS 实现和/或 DDS 的 RTPS 线协议的动机。总之,DDS 是一种端到端中间件,可提供与 ROS 系统相关的功能,如分布式发现(而非 ROS 1 中的集中式发现)和对不同运输 "服务质量 "选项的控制。
DDS 是一个行业标准,由一系列供应商实施,如 RTI 的 Connext DDS,eProsima 的 快速 DDS,Eclipse 的 旋风 DDS或 GurumNetworks 的 GurumDDS.RTPS (又名 DDSI-RTPS)是 DDS 用于网络通信的有线协议。
ROS 2 支持多种 DDS/RTPS 实现,因为在选择供应商/实现时,并不一定要 "一刀切"。在选择中间件实现时,您可能会考虑许多因素:如许可证等后勤因素,或平台可用性或计算足迹等技术因素。供应商可能会针对不同需求提供多种 DDS 或 RTPS 实现。例如,RTI 的 Connext 实现就有多种不同的用途,如一种专门针对微控制器,另一种针对需要特殊安全认证的应用(目前我们只支持其标准桌面版本)。
为了在 ROS 2 中使用 DDS/RTPS 实现,需要一个"R操作系统 M中级w是界面"(又名 rmw
接口,或只是 rmw
需要使用 DDS 或 RTPS 实现的应用程序接口和工具创建 RMW(ROS 中间件)包来实现抽象的 ROS 中间件接口。为支持 DDS 实现而实现和维护 RMW 包是一项繁重的工作,但至少支持几种实现对于确保 ROS 2 代码库不与任何特定实现绑定非常重要,因为用户可能希望根据自己项目的需要更换实现。
支持的 RMW 实现
产品名称 |
许可证 |
RMW 的实施 |
现状 |
---|---|---|---|
eProsima 快速 DDS |
阿帕奇 2 |
|
全面支持。Foxy 及之前版本中的默认 RMW。与二进制版本一起打包。 |
日蚀 旋风 DDS |
日蚀公共许可证 v2.0 |
|
全面支持。自银河系以来的默认 RMW。与二进制版本一起打包。 |
RTI Connext DDS |
商业、研究 |
|
完全支持。支持包含在二进制文件中,但 Connext 需单独安装。 |
GurumNetworks GurumDDS |
商务 |
|
社区支持。支持包含在二进制文件中,但 GurumDDS 需单独安装。 |
有关使用多个 RMW 实施的实用信息,请参阅 "与多个 RMW 实施项目合作" 教程。
多个 RMW 实施方案
目前使用的发行版的 ROS 2 二进制版本已经内置了对几种 RMW 实现的开箱支持(Fast DDS、RTI Connext Pro、Eclipse Cyclone DDS、GurumNetworks GurumDDS)。从 Galactic 开始,默认使用 Cyclone DDS,无需任何额外的安装步骤即可运行,因为我们随二进制包一起分发。在 Galactic 之前,默认使用 Fast DDS,无需任何额外安装步骤即可运行。
其他 RMW(如 Fast DDS、Connext 或 GurumDDS)可通过以下方式启用 安装其他软件包但无需重建任何东西或替换任何现有软件包。
从源代码构建的 ROS 2 工作区可以同时构建和安装多个 RMW 实现。在编译 ROS 2 核心代码的过程中,如果相关的 DDS/RTPS 实现已正确安装并配置了相关的环境变量,找到的任何 RMW 实现都将被构建。例如,如果 用于 RTI Connext DDS 的 RMW 软件包 在工作区中,如果还能找到 RTI 的 Connext Pro 安装,则将构建该程序。
在许多情况下,您会发现使用不同 RMW 实现的节点都能进行通信,但并非在所有情况下都是如此。下面列出了不支持的供应商间通信配置:
- 快速 DDS <-> Connext
WString
MacOS 上的 Connext 无法正确接收 Fast DDS 发布的内容
- Connext <-> 旋风 DDS
不支持
WString
默认 RMW 实施
如果 ROS 2 工作区有多个 RMW 实现,则会选择银河系以来的默认 RMW 实现(如果 Cyclone DDS 可用)。如果没有安装 Cyclone DDS RMW 实现,则将使用按字母顺序排列的 RMW 实现标识符排在第一位的 RMW 实现。实施标识符是提供 RMW 实施的 ROS 软件包名称,例如 rmw_cyclonedds_cpp
.例如,如果两个 rmw_fastrtps_cpp
和 rmw_connextdds
已安装 ROS 软件包、 rmw_connextdds
将是默认值。如果 rmw_cyclonedds_cpp
的默认设置。
参见 向导 以了解在运行 ROS 2 示例时如何指定使用哪种 RMW 实现。