ROS2放弃指南2:ros2之DDS

参考链接: ROS2官方教程:ROS2中不同的DDS/RTPS vendors link.

ROS2中不同的DDS/RTPS vendors

ROS2是建立在以DDS/RTPS为中间件的基础之上的,DDS/RTPS提供了发现(discovery)、序列化(serialization)以及数据传递(transportation)的功能。DDS是一种端对端的中间件,它可以提供ROS系统中的一些相关特性,比如说分布式发现(distributed discovery),非ROS1中的集中式发现方法,以及在不同的质量服务选项(“Quality of Service” options)中控制数据传输。

DDS(Data Distribution Service) 是一种工业标准,它由各种不同的vendors实现,比如RTI公司实现的Connext或者是ADLink公司的OpenSplice。
RTPS(Real Time Publish Subscribe protocol) 是一种使用DDS作为网络通信的协议,没有完全实现全部的DDS API,但已经可以为ROS2提供充足的功能性,比如eProsima实现的Fast RTPS。
ROS2支持多种不同的DDS/RTPS实现, 这是由于当它选择一个vendor(供应商)来使用时,并不是完全一致的(one size fits all)。当选择一个中间件实现时,有多种因素需要考虑,比如说后备考虑如license,或者技术考虑如平台兼容性或计算规模。vendors可能专注于不同的需求而提供多于一种的DDS或RTPS实现,比如说,RTI就有多种不同的Connext实现,它们的目的各不相同,比如有些是针对特定处理器平台的,有些是满足不同应用的安全性验证的(当前阶段,ROS2仅支持标准桌面版本)。

为了在ROS2中使用一个DDS/RTPS实现,我们设计了ROS Middleware interface(或简称RMW) 的软件包,它可以实现在使用DDS/RTPS API或工具时对ROS中间件接口的抽象。使用RMW来支持DDS的过程需要做很多实现和维护性工作,但是首先实现对一部分DDS的支持可以保证ROS2的框架代码不再需要尝试其他特殊的实现方法,同时用户也希望能将DDS与他们的应用工程分离开来。

支持的RMW实现

产品名称 协议 RMW实现 当前状态
eProsima Fast RTPS Apache 2 rmw_fastrtps_cpp 完全支持,默认RMW
Eclipse Cyclone DDS Eclipse公共许可证v2.0 rmw_cyclonedds_cpp 完全支持,包括二进制包,与Eloquent的二进制发行版打包在一起。
RTI Connext 商业授权、研究授权 rmw_connext_cpp 完全支持,包括二进制包,但Connext需要单独安装
RTI Connext(dynamic implementation) 商业授权、研究授权 rmw_connext_dynamic_cpp 支持暂停,alpha 8版之前完全支持
PrismTech Opensplice LGPL(only v6.4)、商业授权 rmw_opensplice_cpp 部分支持,包括二进制包,但是OpenSplice需要单独安装
OSRF FreeRTPS Apache 2 - 部分支持,开发暂停

QoS策略

  • 历史记录(History)
    • 保留近期记录:仅仅保存最大N个样本数据,通过配置队列深度选项来指定最大数据限制。
    • 保留所有记录:存储所有的样本数据,但受限于底层中间件的配置资源限制。
  • 深度(Depth)
    • 队列深度:仅仅当历史记录选择为"保留最近记录"时,配合指定最大数据限制。
  • 可靠性(Reliability)
    • 尽力的(Best effort):尝试传输样本,但如果网络不稳定可能会丢失数据。
    • 可靠的(Reliable):保证样本的可靠传输,可能会尝试多次重传。
  • 持续性(Durability)
    • 局部瞬态(Transient local):发布者负责对晚到连接(late-joining)的订阅者保留样本数据。
    • 易变态(Volatile):不尝试保留样本数据。

你可能感兴趣的:(ROS2放弃指南,cpp,linux)