关于不同的ROS 2 DDS/RTPS供应商
ROS 2建立在DDS/RTPS之上,DDS/RTPS 作为ROS2中间件,提供了发现、序列化和传输功能。 这篇文章 详细解释使用DDS或RTPS总线协议的动机。总之,DDS是一种端到端中间件,它提供与ROS系统类似的功能,例如分布式发现 (不像ROS 1那样集中) 以及对不同的 "Quality of Service(服务质量)"传输选择的控制。 [小鱼@9730]
DDS 是一系列供应商实施的行业标准,如RTI的 Connext DDS, eProsima的 Fast DDS, Eclipse的 Cyclone DDS ,或GurumNetworks的 GurumDDS. RTPS (a.k.a. DDSI-RTPS ) 是DDS通过网络进行通信的有线协议。 [小鱼@9731]
ROS 2支持多个DDS/RTPS实现,因为在选择供应商/实现时,它不一定是一刀切的 ("one size fits all") 。在选择中间件实现时,您可能会考虑许多因素: 诸如许可证之类的后续考虑,或诸如平台可用性或计算占用的技术考虑。供应商可以提供针对满足不同需求的多个DDS或RTPS实现。例如,RTI的Connext实现有一些不同的目的,就像一个专门调用目标微控制器,另一个目标应用需要特殊的安全认证 (我们目前只支持他们的标准桌面版本)。 [小鱼@9732]
为了将DDS/RTPS实现与ROS 2一起使用,需要创建一个 "ROS Middlew 是接口” (亦称作 rmw
接口或只是 rmw
) 包,使用DDS或RTPS实现的API和工具实现抽象的ROS中间件接口。这是很多工作去实施和维护支持DDS实现的RMW包,但支持至少几种(DDS)实现是很重要的,以确保ROS 2代码库不依赖于任何一个特定实现,因为用户可能希望根据项目的需要切换(不同的DDS)实现。 [Alyssa@9733]
支持的RMW实现 [待校准@9734]
产品名称 |
许可证 |
RMW实现 |
状态 |
---|---|---|---|
eProsima Fast DDS |
Apache 2 |
|
全力支持。默认RMW。打包成二进制发行版本。 |
Eclipse Cyclone DDS |
Eclipse Public License v2.0 |
|
全力支持。打包成二进制发行版本。 |
RTI Connext |
商业,研究 |
|
全力支持。支持包含在二进制文件中,但Connext可以单独安装。 [小鱼@9750] |
GurumNetworks GurumDDS |
商业 |
|
社区支持。支持包含在二进制文件中,但GurumDDS可以单独安装。 [小鱼@9754] |
有关使用多个RMW实现的实用信息,请参见 "使用多个RMW实现" 教程。 [小鱼@9755]
多个RMW实现
ROS 2二进制发行版本目前有源发行版有内置支持几个RMW实现开箱即用 (Fast DDSRTI Connext Pro,EclipseCycloneDDS,GurumNetworks GurumDDS)。自从Galactic以来,默认值为CycloneDDS,无需任何额外的安装步骤即可工作,因为我们将其与二进制包一起分发。在Galactic之前,默认值为Fast DDS,无需任何额外安装步骤即可工作。 [小鱼@9757]
文档 安装额外的包 可以启用其他RMWs,如Fast DDS、Connext或GurumDDS,但无需重建任何东西或替换任何现有的包。 [小鱼@9758]
从源文件构建的ROS 2工作区可以同时构建和安装多个RMW实现。在编译核心ROS 2代码时,如果正确安装了相关的DDS/RTPS实施并且配置了相关的环境变量,则将构建找到的任何RMW实施。例如,如果 RMW 包 RTI Connext 的代码在工作区中,如果也可以找到RTI的Connext Pro的安装,它将被构建。 [小鱼@9759]
在许多情况下,您会发现使用不同RMW实现的节点也能够互相通信,但是并非在所有情况下都是如此。以下是不支持的供应商间通讯配置列表: [小鱼@9760]
- Fast DDS <-> Connext
在macOS上使用Fast DDS发布的
WString
不能被Connext正确接收 。 [Alyssa@9762]
- Connext <-> Cyclone DDS
不支持
WString
的 pub/sub通讯 [小鱼@9764]
- Connext Dynamic <-> Connext Dynamic
不支持C服务