详解DDS在GCAir中的应用
一、什么是DDS
DDS,全称 Data Distribution Service (数据分发服务),是由OMG(Object Management Group)对象管理组织发布的中间件协议和应用程序接口(API)标准(2004年12月发布1.0版,2007年1月发布1.2版)。DDS采用发布/订阅体系架构,强调以数据为中心,提供丰富的QoS(Quality of Services)服务质量策略,为分布式系统提供了低延迟、高可靠性、可扩展的通信架构标准。DDS目前在工业、航空、交通、分布仿真、国防领域都有广泛的应用。在分布式系统中,DDS中间件是一个软件层。位于操作系统和应用程序之间,支持多种编程语言以及多种底层协议。
二、数据为中心发布订阅模型(DCPS)
DDS采用的通信模型是一种多对多单向数据交换,其中产生数据的应用程序将数据发布到属于使用数据的应用程序的订阅者的本地缓存。信息流由负责数据交换的实体之间建立的服务质量(QoS)策略来监管。作为以数据为中心的模型,DDS建立在所有感兴趣的应用程序都可以访问的“全局数据空间”的概念之上。提供信息的应用程序作为发布者,访问部分数据空间的应用程序作为订阅者。每当发布者向该空间发布新数据时,中间件就将该信息传播给所有感兴趣的订阅者。订阅数据的实体和发布数据的实体之间的匹配通过主题进行中介。主题是明确的标识符,它将在域中惟一的名称与数据类型和一组附加的特定于数据的QoS相关联。这便是DDS的核心,以数据为中心的发布-订阅模型DCPS(Data-Centric Publish-Subscribe),如下图:
![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240772820_fenz55.jpg?imageView2/0)
Domain:代表一个通信平面,由Domain ID唯一标识,只有在同一个域内的通信实体才可以通信;Topic:是数据的抽象概念,由TopicName标识,关联相应数据的数据类型(DataType),把所涉及的所有Topic集合在一起,这样就形成一个虚拟的全局数据空间“Global Data Space”;DataWriter:数据写入者,类似缓存,把需要发布的Topic数据从应用层写入到DataWriter中;DataReader:数据读取者,同样类似缓存,从订阅者得到Topic数据,随之传给应用层;Publisher:发布者,发布主题数据,至少与1个datawriter关联;Subscriber:订阅者,订阅主题数据,至少与一个datareader关联。
三、Qos(Quality of Service)策略
QoS(Quality of Service)服务质量,是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术。 应用程序可以使用Qos策略来控制、管理和优化在网络传输中的数据流,然后由DDS服务决定如何实现这些行为。可以理解Qos为数据提供者和数据接收者之间的合约,必须确保收发双方的Qos策略相互兼容才能建立起通讯连接。DDS可以提供丰富的Qos服务质量策略,目前支持22种Qos策略,每种策略都可以应用于DDS实体(Topic、Datawriter、Datareader、发布者、订阅者),通过定义灵活的QoS规则,以保障数据进行实时、高效、灵活地分发,可满足各种分布式实时通信应用需求。Kind = RELIABLE ,如果当网络发生错误, DataReader可能无法收到DataWriter的样本数据时,会对样本数据进行重发,保证DataReader能够收到数据;Kind = BEST_EFFORT,如果当网络发生错误, DataWriter不会重新发送丢失的样本数据,这样,无法保证DataReader能够收到数据;如果在DataWriter上应用此QoS策略,设置Kind = RELIABLE,这样保证了DataWriter发布的数据都能被DataReader收到。
四、实时发布订阅协议(RTPS)
RTPS(Real Time Publish Subscribe Protocol )是由OMG联盟定义和维护的用于DDS的互操作性有线协议。该协议通过TCP/UDP/IP等传输协议提供发布者-订阅者通信,并保证不同DDS实现之间的兼容性。由于RTPS协议的发布-订阅和它的规范是为满足DDS应用程序域所解决的相同需求而设计的,因此RTPS协议映射到许多DDS概念。所有RTPS核心实体都与一个RTPS域相关联,该域表示一个端点匹配的隔离通信平面。RTPS协议中指定的实体与DDS实体一一对应,因此允许通信发生。![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240768931_qijhck.jpg?imageView2/0)
RTPS架构
RTPS有线协议基于四个不同的模块,用于控制不同DDS应用程序之间的信息交换。结构模块:定义了通信端点并将它们映射到自己的DDS实体。消息模块:定义可以将消息端点进行数据交换以及它们是如何构建的。行为模块:定义了一组规则的相互作用以及它们如何影响每个端点。由于RTPS是用于实现DDS应用的有线协议,因此每个DDS概念或实体自然地映射到RTPS实体。所有RTPS实体都与RTPS域相关联,RTPS域表示包含一组参与者的单独通信平面。每个RTPS参与者可以包含两种不同类型的本地端点:Writers和Readers。这两个端点通过发送RTPS消息在RTPS网络中交换信息。Writers将本地可用信息发送给Readers,Readers可以请求或确认数据。RTPS端点(Writers和 Readers)与其对应的DDS实体之间的接口是 HistoryCache(历史缓存)。端点之间交换的信息通常存储在CacheChange(缓存更改)中。例如,每个写操作都在Writer History中引入CacheChange。然后,RTPS Writer向所有匹配的Readers发送RTPS消息。收到后,RTPS Reader将CacheChange添加到其对应的HistoryCache,并通知DDS实体新数据可用。消息模块定义RTPS writers和readers之间的信息交换的内容。RTPS消息由Topic和许多Submessage组成。Topic将消息标识为RTPS协议的一部分,以及正在使用的协议版本和发送消息的供应商。它还标识正在发送消息的参与者。每个Submessage都由Submessage Header和一系列Submessage元素组成。选择此结构是为了允许扩展Submessages的词汇表和每个Submessage的组成,同时保持向后兼容性。Submessage Header包含子消息Id,用于标识Submessage的类型,Submessage长度(以字节为单位)和Submessage标志。有十二种不同类型的Submessage。数据:此子消息从Writer发送到Reader,其中包含有关对属于Writer的数据对象的更改的信息。此更改可以是值(添加新信息)或生命周期(先前发送的数据不再有效)。HEARTBEAT(心跳):此子消息从Writer发送到Reader,传达Writer目前可用的CacheChanges。ACKNACK(数据的接收确认):此子消息从Reader发送到Writer,并允许Reader通知Writer它已收到哪些更改以及哪些更改仍然丢失。它可以用来做正面和负面的确认。此模块描述了Writer和Reader之间可能发生的有效消息交换。它还根据每条消息定义Writer和Reader状态的变化。可以在OMG RTPS规范文档中找到完整的规则。设置这些规则是为了确保不同实现之间的互操作性。![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240766096_9l6p2e.jpg?imageView2/0)
此模块描述了使参与者能够获取有关域中所有其他参与者和节点的存在和属性的信息的协议。这种信息交换称为metatraffic。一旦发现远程节点,就可以相应地配置本地节点以建立通信。发现协议分为两层:参与者发现协议(PDP)和端点发现协议(EDP)。PDP指定参与者如何相互发现。发现后,参与者使用EDP交换有关其终点的信息。不同的供应商可以实现多个发现协议,但是为了确保互操作性,所有供应商必须实现一个PDP和一个EDP。这种发现机制最重要的特征是它允许即插即用连接,而无需用户进行任何配置。
五、基于DDS总线GCAir与第三方设备通讯
5.1DDS总线属性配置
GCAir仿真平台中的DDS总线,是基于DDS通讯模型结构要素定义的一条仿真总线,GCAir通过DDS总线配置与第三方设备相同主题的节点可以实现跨平台仿真的需求。在GCAir中,DDS总线默认一个Qos策略文件,可用于约束与第三方设备通讯的数据属性,也可通过导入的Qos描述文件,建立设备间的通讯连接规则;通过主题设置,来确定DDS总线Topic承载的报文信号;通过节点设置,来确定DDS主题的Datawriter/Datareader;Topic和节点可通过配置对应的Qos文件,继承该Qos文件属性。![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240767642_i3629m.jpg?imageView2/0)
5.2基于DDS总线与第三方设备的通讯案例
基于DDS总线配置,其他使用DDS通讯服务的第三方软件或用户组件可以和GCAir进行数据传输,实现GCAir与第三方设备的联合仿真。![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240771417_omg9xb.jpg?imageView2/0)
本案例的第三方设备由一台装有GCAir的计算机设备代替,两台装有GCAir的设备,通过DDS总线连接实现一收一发仿真。两台计算机的GCAir分别创建一个子系统(一个作为数据接收端Datareader,一个作为数据发送端Datawriter),分别为两个子系统添加DDS总线,总线的Qos文件采用系统自带的DefaultQos文件;分别为两个总线配置一个相同名称的主题,并为该主题配置一个信号;分别为接收端GCAir和发送端GCAir的DDS节点,配置收发数据属性。在相同的Topic下,发送端节点设置为Datawriter,接收端节点设置为Datareader;把上述两个子系统设置为被测硬件。并为这两个被测硬件分别连接的子系统(下图Sub/Pub);发送端子系统(Sub)内部fmu输出一个sin函数;以上完成两台计算机的GCAir的收发配置,在发送端的GCAir执行仿真开始操作,接收端的GCAir的仿真会接收到仿真数据,绘制曲线;六、分布式仿真
基于DDS通讯方式,GCAir可实现将模型进行分布式仿真。由1台GCAir的上位机对多台仿真引擎进行线程分配和控制指令发送,多台仿真引擎根据线程配置执行命令,仿真引擎之间可以实时进行数据交换,并把计算结果回传到GCAir上位机。上位机与仿真引擎、仿真引擎之间相互获取时间信息,控制信息和数据信息等,都采用DDS进行通讯。![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1663240765547_d32676.jpg?imageView2/0)
分布式仿真,不仅能满足用户对多台计算机联合仿真应用的需求,还能很好地平衡工程计算量过大仿真引擎资源消耗的问题,大大地提高了仿真平台的性能。
七、DDS的典型应用
船舶信息系统是一个集通讯、导航、安保、消费、损管、电力等一体的信息化、集成化的信息系统。他利用计算机技术、自动化控制、网络通讯等技术,对全船各个分系统的检测信息进行采集传输,通过发出控制指令对现场设备进行指导控制。基于DDS的数据分发模型,船舶系统实现各个分系统之间的信息传输。为了解决现在汽车软件架构的问题,DDS和AUTOSAR被越来越多的采用,将两者融合能够充分发挥两者的优势所在。针对于AUTOSAR的AP平台,DDS能够优化端到端的数据传输而无需再进行集成,并且为了实现数据的生产-准备对于DDS进行了网络的绑定,因此对于复杂的软件系统,显著的增加了软件的可靠性、伸缩性,提高的性能。AUTOSAR和DDS为汽车厂商设计和运营并提升下一代汽车的性能提供了一种行之有效的方法。 基于数据分发服务(DDS)通信框架,ROS 2将机器人操作系统(ROS)扩展到商业应用中,它是一个由多个组件组成的异构且复杂的系统。ROS 2的性能在很大程度上取决于多个体系结构层:包括硬件、操作系统内核和调度程序,他们处于DDS和应用程序之间。由于ROS 2使用DDS进行通信,ROS 2组件可以与本机DDS组件自由组合,从而提供了丰富的功能和性能。