警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

关于不同的 ROS 2 DDS/RTPS 供应商

ROS 2 以 DDS/RTPS 作为中间件,提供发现、序列化和传输功能。 本文 详细解释了使用 DDS 实现和/或 DDS 的 RTPS 线协议的动机。总之,DDS 是一种端到端中间件,可提供与 ROS 系统相关的功能,如分布式发现(而非 ROS 1 中的集中式发现)和对不同运输 "服务质量 "选项的控制。

DDS 是一个行业标准,由一系列供应商实施,如 RTI 实施的 Connext凌华科技的实施 OpenSpliceEclipse 的旋风 DDS.RTPS (又名 DDSI-RTPS)是 DDS 用于网络通信的有线协议。有一些实现并不完全符合 DDS API,但为 ROS 2 提供了足够的功能,例如 eProsima 的实现 快速 RTPS.

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 快速 RTPS

阿帕奇 2

rmw_fastrtps_cpp

完全支持。默认 RMW。与二进制版本一起打包。

日蚀 旋风 DDS

日蚀公共许可证 v2.0

rmw_cyclonedds_cpp

全面支持。与 Eloquent 的二进制版本一起打包。

RTI Connext

商业、研究

rmw_connext_cpp

完全支持。支持包含在二进制文件中,但 Connext 需单独安装。

RTI Connext (动态实施)

商业、研究

rmw_connext_dynamic_cpp

支持暂停。全面支持至阿尔法 8.*

ADLINK 开放式拼接

Apache 2,商用

rmw_opensplice_cpp

部分支持。支持包含在 Foxy 之前的二进制文件中,但 OpenSplice 需单独安装。

"部分支持 "是指 rmw 接口所要求的一个或多个功能没有实现。

有关使用多个 RMW 实施的实用信息,请参阅 与多个 RMW 实施项目合作"; 教程。

多个 RMW 实施方案

目前使用的发行版的 ROS 2 二进制版本已经内置了对几种 RMW 实现的支持(Fast DDS、RTI Connext Pro、凌华 Eclipse Cyclone DDS)。自 Galactic 发布以来,默认支持 Cyclone DDS,无需任何额外安装步骤即可运行,因为我们随二进制软件包一起发布。在 Galactic 之前,默认使用 Fast DDS,无需任何额外安装步骤即可运行。

其他 RMW(如 Fast-DDS 或 Connext)可通过以下方式启用 安装其他软件包但无需重建任何东西或替换任何现有软件包。

从源代码构建的 ROS 2 工作区可以同时构建和安装多个 RMW 实现。在编译 ROS 2 核心代码的过程中,如果相关的 DDS/RTPS 实现已正确安装并配置了相关的环境变量,找到的任何 RMW 实现都将被构建。例如,如果 用于 RTI Connext 的 RMW 软件包 在工作区中,如果还能找到 RTI 的 Connext Pro 安装,则将构建该程序。

在许多情况下,您会发现使用不同 RMW 实现的节点都能进行通信,但并非在所有情况下都是如此。下面列出了不支持的供应商间通信配置:

  • Fast-DDS <-> Connext
    • 不支持通过发布/分站通信

    • WString MacOS 上的 Connext 无法正确接收 Fast-DDS 发布的内容

  • OpenSplice <-> OpenSplice
    • 不支持 WString

    • WString 映射到 字符串 它有不同的导线表示

  • Connext <-> 旋风 DDS
    • 不支持 WString

  • Connext Dynamic <-> Connext Dynamic
    • 不支持 C 服务

默认 RMW 实施

如果 ROS 2 工作区有多个 RMW 实现,则会选择银河系以来的默认 RMW 实现(如果 Cyclone DDS 可用)。如果没有安装 Cyclone DDS RMW 实现,则将使用按字母顺序排列的 RMW 实现标识符排在第一位的 RMW 实现。实施标识符是提供 RMW 实施的 ROS 软件包名称,例如 rmw_cyclonedds_cpp.例如,如果两个 rmw_fastrtps_cpprmw_connext_cpp 已安装 ROS 软件包、 rmw_connext_cpp 将是默认值。如果 rmw_cyclonedds_cpp 的默认设置。

参见 向导 以了解在运行 ROS 2 示例时如何指定使用哪种 RMW 实现。