不同的ROS 2中间件供应商 [17313]
ROS 2构建在DDS/RTPS之上作为其中间件,它提供了发现、序列化和传输功能。本文 <https://design.ros2.org/articles/ros_on_dds.html>`__详细解释了使用DDS实现或DDS的RTPS传输协议的动机。简而言之,DDS是一种端到端中间件,提供了与ROS系统相关的功能,例如分布式发现(不像ROS 1那样集中化)以及对传输的不同“服务质量”选项的控制。 `[17314]
DDS <https://www.omg.org/omg-dds-portal>`__是一个行业标准,由许多供应商实现,例如RTI的`Connext DDS,eProsima的`Fast DDS <https://fast-dds.docs.eprosima.com/>`__,Eclipse的`Cyclone DDS <https://projects.eclipse.org/projects/iot.cyclonedds>`__或GurumNetworks的`GurumDDS <https://gurum.cc/index_eng>`__。RTPS(也称为`DDSI-RTPS <https://www.omg.org/spec/DDSI-RTPS/About-DDSI-RTPS/>`__)是DDS在网络上通信的传输协议。 [17315]
ROS 2支持多个DDS/RTPS实现,因为在选择供应商/实现时,并不一定是“一刀切”。在选择中间件实现时,可能会考虑多个因素:例如许可证等物流考虑因素,平台可用性或计算资源占用等技术考虑因素。供应商可能会提供多个针对满足不同需求的DDS或RTPS实现。例如,RTI有几个Connext实现的变体,用途不同,比如专门针对微控制器的一种,以及针对需要特殊安全认证的应用程序的另一种(目前我们仅支持其标准桌面版本)。 [17316]
为了在ROS 2中使用DDS/RTPS实现,需要创建一个“ROS中间件接口”(也称为``rmw``接口或仅称为``rmw``)包,该包使用DDS或RTPS实现的API和工具来实现抽象的ROS中间件接口。为了支持DDS实现而实现和维护RMW包是一项繁重的工作,但至少支持几个实现对于确保ROS 2代码库不与任何特定实现绑定是重要的,因为用户可能希望根据项目需求切换实现。 [17317]
支持的RMW实现 [17318]
产品名称 [17319] |
许可证 [17320] |
RMW实现 [17321] |
状态 [17322] |
---|---|---|---|
eProsima Fast DDS [17323] |
Apache 2 [17324] |
|
完全支持。默认RMW。与二进制发行版一起打包。 [17326] |
Eclipse Cyclone DDS [17327] |
Eclipse公共许可证v2.0 [17328] |
|
完全支持。与二进制发行版一起打包。 [17330] |
commercial(商业)、research(研究) [17332] |
|
完全支持。支持已包含在二进制文件中,但Connext需单独安装。 [17334] |
|
商业 [17336] |
|
社区支持。支持包含在二进制文件中,但GurumDDS需要单独安装。 [17338] |
有关使用多个RMW实现的实际信息,请参阅 "使用多个RMW实现" 教程。 [17339]
多个RMW实现 [17340]
当前活跃的ROS 2二进制发布版本已经内置了对多个RMW实现的支持(Fast DDS、RTI Connext Pro、Eclipse Cyclone DDS、GurumNetworks GurumDDS)。默认使用的是Fast DDS,因为我们将其与二进制包一起分发,所以无需进行任何额外的安装步骤。 [17341]
其他像Cyclone DDS、Connext或GurumDDS等RMW可以通过 安装附加软件包 启用,但无需重新构建或替换任何现有软件包。 [17342]
从源代码构建的ROS 2工作空间可以同时构建和安装多个RMW实现。在编译核心ROS 2代码时,如果发现了任何RMW实现,并且相关的DDS/RTPS实现已经正确安装并配置了相关的环境变量,那么这些RMW实现将会被构建。例如,如果工作空间中存在`RMW package for RTI Connext DDS <https://github.com/ros2/rmw_connextdds>`__的代码,那么如果还可以找到RTI的Connext Pro的安装,它也将被构建。 [17343]
在许多情况下,使用不同RMW实现的节点可以进行通信,但并非在所有情况下都成立。以下是不支持的跨厂商通信配置列表: [17344]