0%

ROS的基础——DDS

DDS(数据分发服务)是一套通信协议和API标准,以数据为中心是他的特点,它基于发布-订阅模型进行设计。而FastRTPS是eProsima公司对DDS的一个开源实现。DDS是一套中间件,提供介于操作系统和应用程序之间的功能,提供了低延迟、高可靠的通信以及可扩展的架构。DDS其实分为两部分,一部分是DDS规范,一部份则是DDSI-RTPS协议,是一个互操作性协议,也就是真正实现通讯机制的部分,在ROS2中,也正是这部分,取代了ROS1的TCPROS和UDPROS。

所谓互操作性协议,就是为了满足互操作性而产生的一个协议,互操作性就是指两个实体的通信能力,如果两个实体之间能够在任何情况下都无误解的进行通信,那么我们就说这两个实体可以正确的互操作。

DDS的架构是这个样子的:

../../_images/library_overview.svg

概述

DDS实现的数据共享可以理解成一个抽象的全局数据空间,任何应用程序,不论开发语言,或者运行的操作系统类型,都可以通过相同的方式访问这个全局数据空间,就好像访问本地的存储空间一样。当然全局数据空间仅仅是一个抽象的概念,在实现时仍然是分别存储在每个应用程序的本地空间当中。在系统运行时,数据是按需传输或存储的,数据的发布者仅仅发送对方需要的数据,而订阅者仅接收并存储本地应用程序当前需要的数据。

DDS还提供了非常灵活的QoS策略,以满足用户对数据共享方式的不同需求,比如可靠性,故障处理等等。针对数据安全性要求比较高的系统,DDS还提供了细颗粒度的数据安全控制,包括应用程序身份认证,权限控制,数据加密等等。

DDS提供了对数据发布者和订阅者的动态发现机制,这意味着用户不必去配置通信节点的地址或其他属性信息,因为他们在运行的过程中会自动发现对方,并自动完成相关配置,即实现了即插即用。

专业名词

  • Domain:代表一个通信平面,由Domain ID唯一标识,只有在同一个域内的通信实体才可以通信;如果考虑车内通信,可以只划分1个Domain,也可以按照交互规则或其他规则,定义多个Domain;
  • Domain Participant:代表域内通信的应用程序的本地成员身份,简单来说,就是说明同一数据域内的通信成员;
  • Topic:是数据的抽象概念,由TopicName标识,关联相应数据的数据类型(DataType),如果把车内所涉及的所有Topic集合在一起,这样就形成一个虚拟的全局数据空间“Global Data Space”,进一步弱化了节点的概念,所以域参与者已经不是节点的概念了;
  • DataWriter:数据写入者,类似缓存,把需要发布的主题数据从应用层写入到DataWriter中;
  • DataReader:数据读取者,同样可以理解为一种缓存,从订阅者得到主题数据,随之传给应用层;
  • Publisher:发布者,发布主题数据,至少与1个DataWriter关联,通过调用DataWriter的相关函数将数据发出去;
  • Subscriber:订阅者,订阅主题数据,至少与1个DataReader关联。当数据到达时,应用程序可能忙于执行其他操作或应用程序只是等待该消息时,这样就会存在两种情况,同步访问和异步通知。

DPSC模型

DCPS(Data-Centric Publish-Subscribe)是DDS标准中定义的以数据为中心的订阅-发布模型。在这个模型中,向全局数据空间写入数据的一方称为Publishers和DataWriter,同样地,在全局数据空间中读取数据的一方称为Subscriber和DataReader。下图中展示了它们之间的逻辑关系。除了DCPS模型,DDS标准中还定义了一套完整的应用程序接口(API),该接口标准是与平台无关的,这意味着不论应用程序使用什么开发语言,或运行在什么平台之上,只要DDS中间件的实现符合DDS标准,那么相关的应用程序即可实现不同平台间的移植。

../../_images/rtps_domain.svg

数据的发送过程,简单来说就是应用程序调用DataWriter对象提供的write方法,把数据传递给Publisher对象,而Publisher负责将数据在网络上发送出去。

一个DataWriter只能从属一个Publisher,而Publisher可以拥有多个DataWriter,每一个DataWriter都绑定一个Topic。

数据的接收过程,简单来说就是Subscriber负责从网络上接收数据,并把它存储在对应的DataReader中。

一个DataReader只能从属一个Subscriber,而Subscriber可以拥有多个DataReader,每一个DataReader都绑定一个Topic。

Qos策略

用户可以通过设置QoS策略来控制数据在应用程序之间共享的方式,每个DCPS实体,包括Topic,DataWriter,Publisher,DataReader,Subscriber等,都能够独立配置相应的QoS策略。

下面是几种常用的QoS策略(略):

  • DEADLINE(Topic周期更新)
  • LIFESPAN(DataWriter写入的数据样本具有到期时间)
  • HISTORY(DataWriter保存并发送旧的采样数据)
  • RELIABILITY(”可靠传输”)

img

RTSP协议

DDS的标准中并不包含传输层协议,RTPS(Real-Time Publish Subscribe)能够很好的契合DDS协议特点。RTPS基于多播、无连接的传输模型,这个模型可以映射到不同的传输协议上,如UDP/IP(这也是目前RTPS标准中唯一被标准化的传输协议)。

../../_images/transport_comparison.svg

组播的原理:组播IP地址到底是谁的IP?? - 车小胖的回答 - 知乎 https://www.zhihu.com/question/27233903/answer/108374395

../_images/DDS_concept.svg