【ROS2概念】系列(三)——ROS2采用DDS中间件的初步介绍

一、常见中间件模型介绍

中间件是一类提供系统软件和应用软件之间连接、便于软件各部件之间的沟通的软件,应用软件可以借助中间件在不同的技术架构之间共享信息与资源。中间件位于客户机服务器的操作系统之上,管理着计算资源和网络通信。

中间件根据拓扑结构可分为四种模型,分别是点对点CS(Client-Server)模型Broker(协商者)模型广播(Broadcast)模型DDS(Data Distribution Service)模型,如下图所示。

四种拓扑结构的中间件模型

1.1 (第一代)点对点CS(Client-Server)模型

许多客户端连接到一个服务端,每次通信时,通信双方必须建立一条连接。当通信节点增多时,通信的连接数也会增多。每个客户端都需要知道服务器的具体地址和所提供的服务。一旦服务器地址发生变化,所有客户端都会受到影响。

最典型的就是TCP通信,当对方的IP地址和端口号发生改变,所有与该程序通信的节点都将受到影响。

1.2 (第二代)Broker(协商者)模型

这是一种消息中间件,特点是具有中心服务器。

面向消息的系统(消息中间件)是在分布式系统中完成消息的发送和接收的基础软件。消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。

当前业界比较流行的开源消息中间件包括:ActiveMQ、RabbitMQ、RocketMQ、Kafka、ZeroMQ等,其中应用最为广泛的要数RabbitMQ、RocketMQ、Kafka 这三款。

中心服务器Broker统一负责初步处理所有人的请求,并进一步找到真正能响应服务的角色。这使得客户端可以不用关心服务器的具体地址。服务端地址如果发生变化,只需要告诉Broker就可以了。这个模型的特征也很明显,Broker作为核心,它的处理速度会影响所有节点的效率,当系统规模增长到一定程度,Broker将成为整个系统的性能瓶颈。对于资源相对吃紧的嵌入式系统,这个问题会更为突出。更糟糕的是,如果Broker发生异常,可能导致整个系统都无法正常运转。

最典型的就是ROS中存在的Master节点,如果该节点挂掉,所有ROS节点都将无法正常工作。

1.3 (第三代)广播(Broadcast)模型

所有人都可以在通道上广播消息,并且所有人都可以收到消息。这个模型解决了服务器地址的问题,且通信双方不用单独建立连接,但它存在的问题是:广播通道上的消息太多了,所有人都必须关心每条消息,无论是否与自己有关。

最典型的就是CANbus,CAN节点发送的消息帧会在CANbus上不停的广播,与其它CAN节点是否存在都没有关系,这样严重影响总线上的带宽。

1.4 (第四代)以数据为中心的DDS(Data Distribution Service)模型

这种模型与广播模型有些类似,所有人都可以在DataBus上发布和订阅消息。但它的先进之处在于,通信中包含了很多并行的通路,可以只关心自己感兴趣的消息,忽略不感兴趣的消息。

下图展示了DDS在网络栈中的位置,它位于传输层的上面,并且以TCP,UDP为基础。

这个图之所以是沙漏形状是因为:两头的技术变化都发展很快,但是中间的却鲜有变化。

二、ROS2对中间件的需求

在探索下一代ROS通信系统的选项时,最初的选项是改进ROS 1的传输系统或者使用诸如ZeroMQ、谷歌的Protocol Buffers和zeroconf(Bonjour/Avahi)等组件库来构建新的中间件。但是,除了那些需要从头开始或部分从头开始构建中间件的选项之外,还考虑了其他已有的端到端中间件。在研究过程中,一个脱颖而出的中间件就是DDS。

2.1 DDS是什么

DDS是OMG组织在2004年发布的中间件协议和应用程序接口(API)标准,它为分布式系统提供了低延迟、高可靠性、可扩展的通信架构标准。它将系统的组件集成在一起,提供业务和任务关键型物联网 (IoT) 应用程序所需的低延迟数据连接,具有极高的可靠性和可扩展架构。

OMG(Object Management Group)成立于1989年,是一个开放性的非营利性的计算机行业标准联盟。OMG多年来致力于为工业分布式系统提供可互操作的,可移植的,可复用的软件标准。很多我们熟知的标准都来自OMG,比如UML(Unified Modeling Language),CORBA(Common Object Request Broker Architecture)等。

OMG组织发布的只是DDS标准,而标准的实现是由各个DDS提供商完成,其中有商用的如RTI,也有开源的如Object Computing的OpenDDS、eProsima的FastDDS。

2.2 DDS的应用场景

DDS最早应用于美国海军,用于解决舰船复杂网络环境中大量软件升级的兼容性问题,后来扩展至航空、航天、船舶、国防、金融、通信、汽车等领域,包括作战系统、船舶导航和控制系统、船舶防御系统、无人机驾驶系统和地面控制系统、装甲车辆控制系统、仿真和培训系统、雷达处理和空中交通管理系统、金融系统等。

DDS的应用场景

2018年,DDS首次被引进AUTOSAR AP,作为可选择的通信方式之一。2018年3月,DDS的主要提供者RTI公司宣布,AUTOSAR AP的最新版本(版本18-03)已经具有DDS标准的完整网络绑定。

百度Apollo的自动驾驶框架Cyber RT的底层使用了开源的DDS,将DDS作为最重要的通信机制。与此相对应的是,Xaver、Orin等面向自动驾驶的SOC芯片上也都预留了DDS接口,英伟达的Xavier自带的Driver.OS中便采用了FastDDS或OpenDDS这样的开源DDS。

2.3 ROS2使用DDS的原因

使用像DDS这样的端到端中间件的好处是,需要维护的代码要少得多,可以让ROS2开发人员腾出手专注机器人开发。

DDS中间件的行为和确切规范已经提炼到文档中。除了系统级文档,DDS还具有推荐用例和软件API。有了这个具体的规范,第三方可以审查、审计和实施具有不同程度互操作性的中间件。这是ROS从未有过的特性,除了wiki中的一些基本描述和参考实现外。此外,如果要从现有软件库构建新的中间件,则无论如何都需要创建这种类型的规范。

三、DDS初步介绍

3.1 DDS的核心标准

DDS的核心标准分为两种,分别是API标准和协议(Protocol)标准,即DCPS规范和DDSI-RTPS规范。

  • DCPS规范:API标准保证了不同DDS实现的应用程序的可移植性

  • DDSI-RTPS规范:协议标准保证了不同厂家的DDS可实现互操作性

DDS 规范的开发始于 2001 年。它由软件框架公司 Real-Time Innovations (RTI) 和法国国防公司Thales Group开发。2004 年,对象管理组(OMG) 发布了 DDS 1.0 版。1.1 版于 2005 年 12 月发布,1.2 版于 2007 年 1 月发布,1.4 版于 2015 年 4 月发布。

RTPS协议 2.0 版于 2008 年 4 月发布,2.1 版于 2010 年 11 月发布,2.2 版于 2014 年 9 月发布,2.3 版于 2019 年 5 月发布。

下图从下往上可分为三层,分别是网络通信协议层DDS层应用程序层,其中红白线框内是DDS的核心标准.

DDS的核心标准

DDS的核心标准包括:

  • DDS v1.4 - 描述了用于分布式应用程序通信和集成的以数据为中心的发布-订阅(DCPS)模型;

  • DDSI-RTPS v2.3 - 定义了实时发布-订阅交互通信协议(RTPS);(v2.3是2019年发布,Fast-DDS目前2022.11采用的仍然是v2.2

  • IDL v4.2 - 定义了IDL,一种用于以独立于编程语言的方式定义数据类型和接口的语言。这不属于DDS标准,但DDS依赖于它。

DDS规范总共有四个正式版本,如下表所示:

其中1.4版本相较于1.2版本最大的变化是将1.2版本中的可选部分(第八章 数据本地重建层)去除。

RTPS规范总共有四个正式版本,如下表所示:

其中2.3版本相较于2.2版本主要修改了以下部分:

8.2.1中Participant类与Endpoint类关系由2.2版本中的无关系变为组合关系;Participant类增加guidPrefix成员变量,Endpoint类增加endpoint成员变量;
8.2.3 RTPS CacheChange类增加inlineQoS成员变量;
8.2.4 RTPS Entity类增加了同一参与者内部端点组的GUID信息,主要是指Publisher和Subscriber的GUID;同时Endpoint类也继承Entity类;
8.2.5 RTPS Participant类与Endpoint类之间增加了一个Group类;
8.3.2关于数据类型定义添加了GroupDigest_t类型;
8.3.3 RTPS消息组成结构部分去除NoKeyData以及NoKeyDataFrag类型;
8.3.4 RTPS消息接收器(RTPS Message Receiver)增加对HeaderExtension的依赖;
8.3.5 RTPS子消息元素(RTPS SubmessageElements)增加了KeyHashPrefix、KeyHashSuffix以及GroupDigest数据类型的支持;将2.2版本的Flags数据类型改为StatusInfo类型;将SerializedPayload以及SerializedPayloadFragment类型合并为SerializedData类型;
8.3.7.2 Data报文类型添加NonStandardPayloadFlag字段;
8.3.7.3 DataFrag报文类型添加NonStandardPayloadFlag及KeyFlag字段;
8.3.7.4 Gap报文类型添加GroupInfoFlag、gapStartGSN以及gapEndGSN字段;
8.3.7.5 Heartbeat报文类型添加GroupInfoFlag、currentGSN、firstGSN、lastGSN、writerSet以及secureWriterSet字段;
8.4.7.1 RTPS Writer类增加dataMaxSizeSerialized成员变量;RTPS Writer类的new_change方法增加inlineQos参数。
8.4.7.2 RTPS StatelessWriter类去除resendDataPeriod数据成员;
8.4.7.5 RTPS ReaderProxy类增加remoteGroupEntityId成员;
8.4.10.4 RTPS WriterProxy类增加dataMaxSizeSerialized和remoteGroupEntityId成员;
8.4.12.1 Best-Effort StatefulReader 行为变换图改变;
8.4.13.4 Participant Message Data数据组成添加kind字段;
8.4.15.7 在HeartbeatFrag和NackFrag报文中增加count;
8.5.3.2 SPDPdiscoveredParticipantData数据类型增加domainId、domainTag 和builtinEndpointQos字段;
8.7.5 添加Group Ordered Access实现;
9.3.1.2 EntityId_t添加Writer Group和Reader Group实体ID类型;
9.6.3 In-line QoS增加PID_GROUP_COHERENT_SET、PID_GROUP_SEQ_NUM、PID_WRITER_GROUP_INFO以及PID_SECURE_WRITER_GROUP_INFO等字段支持;
10 数据串化封装增加CDR2_BE、CDR2_LE、PL_CDR2_BE、PL_CDR2_LE、D_CDR_BE、D_CDR_LE和XML 等版本字段。

图片参考:https://www.bilibili.com/video/BV12z4y167w2
核心规范参考:https://www.platforu.com/DetailsPage?id=17
fast-dds的RTSP规范:https://www.eprosima.com/index.php/products-all/eprosima-fast-dds

3.2 ROS2采用DDS的优点和缺点

3.2.1 优点

发布/订阅模型:简单解耦,可以轻松实现系统解耦
性能:在发布/订阅模式中,与请求/回复模式相比,延迟更低,吞吐量更高。
远程参与者的自动发现:此机制是 DDS 的主要功能之一。通信是匿名的、解耦的,开发者不必担心远程参与者的本地化。
丰富的 Qos 参数集,允许调整通信的各个方面:可靠性、持久性、冗余、寿命、传输设置、资源......
实时发布订阅协议 ( RTPS ):该协议几乎可以通过任何传输实现,允许在 UDP、TCP、共享内存和用户传输中使用 DDS,并实现不同 DDS 实现之间的真正互操作性。

实时性:DDS通过优化的内核机制,实现微秒级的数据传输;纯分布式的系统结构,保证系统内不存在影响实时性的瓶颈节点。DDS 实体被建模为类或类型化接口,允许提前分配内存而不是动态分配内存,可以更有效的对资源处理。
可靠性:DDS提供点到点的信息交互服务,从而保证整个系统服务不存在单点故障的风险;同时提供可靠传输策略,通过重发机制确保数据可靠地传输。
持续性:DDS可以通过相应的QoS为ROS提供数据历史的服务,新加入的节点也可以获取发布的所有历史数据。
灵活性:应用系统可以根据应用场景需求,灵活选择多种DDS提供的应用级QoS策略(例如可靠性传输、数据过滤、优先级排序等等),以满足系统的灵活性需求。
扩展性:DDS使用“订阅/发布”机制进行数据交互,建立全局的虚拟数据空间,在通信层面将应用逻辑与节点的物理信息解耦合,使系统能够方便的实现节点增减或系统本身的分割/合并,满足系统的扩展性需求;运行时由DDS自动发现并连接设备和应用程序,即插即用,无需系统管理或目录服务。
异构网络支持:DDS通过适配底层多种异构架构网络,对上层提供无差别的通信服务,使通信软硬件层对应用层完全透明。

3.2.2 缺点

使用端到端中间件的缺点是 ROS 必须在已有的设计中工作。如果设计没有针对相关用例或不灵活,则可能需要围绕设计工作。在某种程度上,采用端到端中间件包括采用该中间件的理念和文化,没那么简单。

API复杂,DDS 的灵活性是以复杂性为代价的。

系统开销相对较大

社区支持问题,但ROS2近两年来使用DDS后社区表现还是不错的。

3.3 DDS的供应商

OMG发布的只是DDS标准,而标准的实现是由各个DDS提供商完成,其中有商用的如RTI,也有开源的如Object Computing的OpenDDS、eProsima的FastDDS。

目前(2022.10)OMG 维护 DDS 供应商的活动 列表见下图。

OMG 维护 DDS 供应商

全球范围内,DDS市场份额最大的供应商(80%左右)的是成立于1991年的美国RTI公司(全称为Real-Time Innovations)。RTI作为OMG组织董事会的成员,主导了DDS标准的制定,从2004年开始负责主持DDS工作组的工作,目前已经成为这个行业的领导者,对DDS标准有足够的权威。

RTI开发的DDS品牌名为Connext,,因此又被称为Connext DDS。

FastDDS是由eProsima公司推出,由RTI原核心团队成员在欧洲创办,是在自动驾驶领域比较有影响力的开源DDS。eProsima供应商提供也直接访问 DDS 有线协议 RTPS 的实现。

OpenDDS 由Object Computing开发,它和FastDDS具有一定的相似性——两者都是基于RTPS实现的,面向数据的通信框架,遵循的是同一标准。这类框架的典型特征是去中心化,支持QoS机制,支持实时通信。但通常会绑定如protobuf等序列化工具。

CycloneDDS是由Eclipse基金会开发的。

3.4 不同DDS性能对比

这里对Fast RTPS、Cyclone DDS、OpenSplice DDS从进程间进程内双主机三种场景下的延迟吞吐量对比测试

3.4.1 延迟

3.4.1.1 进程间

3.4.1.2 进程内

3.4.1.3 双主机

3.4.2 吞吐量

3.4.2.1 进程间

3.4.2.2 进程内

由于 Cyclone DDS 不提供进程内测试,eProsima 无法将第二种方案包括在吞吐量性能基准测试中。

3.4.2.3 双主机

结论:在所有测试的情况下,Fast RTPS所提供的延迟更短,吞吐量更高。

参考:

[译] Fast RTPS与Cyclone DDS与OpenSplice DDS对比测试:
https://www.jianshu.com/p/0e0f5ce6b4ce

DDS在自动驾驶中的地位,强烈推荐:
https://blog.csdn.net/usstmiracle/article/details/125498440
https://m.eefocus.com/automobile-electronics/515201
https://codeantenna.com/a/ofZLhMddDa

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容