编程语言应用

首页 » 常识 » 常识 » 通信中间件FastDDS基础概念简
TUhjnbcbe - 2022/6/5 16:22:00
白癜风前沿技术 http://news.39.net/bjzkhbzy/170920/5709508.html

从事汽车软件开发,通信中间件绕不开,当前最火热的无非有2种:Some/IP和DDS。DDS是一种分布式通信标准,有很多商业和开源的实现,FastDDS是其中的一种。它在ROS2中被应用,而Apollo中的CyberRT框架中也有它的身影。

讲FastDDS之前先讲什么是DDS。

1.什么是DDS?

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

DDS(DataDistributionService,数据分发服务)是一种以数据为中心的通信协议,用于分布式软件应用程序通信。

它描述了支持数据提供者(DataProviders)和数据消费者(DataConsumers)之间通信的通信应用程序编程接口(API)和通信语义。

要学习DDS就不能忽略它的模型:DCPS(以数据为中心的发布订阅模型)。

DCPS有3个关键实体:

publicationentities:定义消息生成对象及相关属性subscriptionentities:定义消息消费对象及相关属性configurationentities:定义传输相关的属性如Topic类型,通信的QoS(服务质量)。

QoS是一个非常重要的概念,DDS使用QoS来定义DDS实体的行为特征。QoS由单独的QoS策略(源自QoSPolicy的类型的对象)组成。

2.什么是Fast-DDS?

DDS是一套标准,它有很多实现,有商业的,也有开源的。

商业:RTI开源:CycloneDDS、Fast-DDS

所以,FastDDS是一种开源的DDS标准实现,它由ePromise公司发布并维护。

3.什么是DCPS?

先看看FastDDS官方文档中的一张图。

在这里插入图片描述

DDS是以数据为中心的通信模型,那么这个数据中心是什么呢?

我个人的理解是以Topic为代表的消息对象就是DDS中的数据中心。

通过Topic的纽带关系,可以将数据生成为数据消费对象连接起来,并且可以通过QoS执行通信服务质量策略。

在DCPS模型中,有4个基础的概念:

Publisher:它是负责创建和配置其实现的DataWriters的DCPS实体。DataWriter是负责实际发布消息的实体。每个DataWriter都有一个分配的Topic,在该Topic下发布消息。Subscriber:它负责接收在其订阅的Topic下发布的数据。它为一个或多个DataReader对象提供服务,这些对象负责将新数据的可用性传达给应用程序。Topic(话题):它是绑定发布和订阅的实体。它在DDS域中是唯一的。通过TopicDescription,它允许发布和订阅数据类型的统一。Domain(领域):这是用于链接所有发布者和订阅者的概念,属于一个或多个应用程序,它们在不同主题下交换数据。这些参与域的单个应用程序称为DomainParticipant。DDS域由域ID标识。DomainParticipant定义域ID以指定它所属的DDS域。具有不同ID的两个DomainParticipants不知道彼此在网络中的存在。因此,可以创建多个通信通道。这适用于涉及多个DDS应用程序的场景,它们各自的DomainParticipants相互通信,但这些应用程序不得干扰。DomainParticipant充当其他DCPS实体的容器,充当发布者、订阅者和主题实体的工厂,并在域中提供管理服务。

DDS是一种通过信息,而DCPS是一个抽象的模型概念,实际上映射到具体的代码维度,则需要DomainParticipants作为容器去承载Publisher、Subsriber、Topic等等。

可以这样理解:

Domain是项目组Topic是项目生产过程各类相关产出物,如需求文档、概要设计、产品方案、测试用例等DomainParticipant代表项目中不同的参与组织如UI小组、产品小组、开发小组、测试小组等等Publisher和Subscriber代表不同小组中对外输出文档和接受信息的窗口角色QoS代表不同的文档在各个小组流转时,双方对于文件传输状态的质量要求在这里插入图片描述

最后说明一下,如何理解QoS呢?

你可以联想到,假如你是写代码的,产品经理传递文件给你时的方法和需要你反馈的时效,以及测试人员传递文档给你要求的时效是不一样的。

当然,这里只是类比,为了帮助大家加深理解,真正的DDS不一定这样。

4.什么是RTPS?

RTPS是Real-TimePublishSubscribe的缩写,它是DDS的通信中间件,是发布-订阅模式,通信能力强大,支持UDP/IP、TCP及共享内存。

RTPS是DDS通信的根基,它内部有一样重要的概念:

DomainRTPSParticipantTopicAttributesChangeHistoryRTPSWriterRTPSReader

RTPS中定义了一个Domain的概念,它定义了一个单独的通信平面。几个域可以同时独立地共存。一个域包含任意数量的RTPSParticipant,即能够发送和接收数据的元素。

RTPSParticipants使用EndPoint进行通信:

RTPSWriter:能够发送数据的EndPoint端点。RTPSReader:能够接收数据的EndPoint端点。

RTPSParticipant可以有任意数量的写入器和读取器端点。

在这里插入图片描述

Topic定义和标记正在交换的数据。主题不属于特定DomainParticipant。DomainParticipant通过RTPSWriters对Topic发布的数据进行更改,并通过RTPSReaders接收与其订阅的Topic相关的数据。

在FastDDS中最基础的通信单元称为Change,它表示在Topic下写入的数据的更新。RTPSReaders/RTPSWriters在其History中注册这些Change,History是一种用作最近更改缓存的数据结构。

在eProsimaFastDDS的默认配置中,当您通过RTPSWriter端点发布更改时,会在后台执行以下步骤:

Change将添加到RTPSWriter的History中。

RTPSWriter将Change发送到它知道的任何RTPSReaders。

接收到数据后,RTPSReaders用新的Change更新他们的History。

FastDDS支持多种配置,允许更改RTPSWriters/RTPSReaders的行为。修改RTPS实体的默认配置意味着RTPSWriters和RTPSReaders之间的数据交换流发生变化。此外,通过选择服务质量(QoS)策略,您可以通过多种方式影响这些历史缓存的管理方式,但通信循环保持不变。

5.FastDDS和RTPS关系?

前文说过RTPS是DDS的基础,实际上完整的FastDDS架构分为4层:

ApplicationLayerFASTDDSLayerRTPSLayerTranportLayer在这里插入图片描述

Application指的是采用FastDDSAPI的各类应用。

DDSLayer主要定义一个系统中不同的Domain,在同一个Domain下Topic按规则通信。

FastRTPS是通信协调层,是下层Transport的抽象。

Transport层处理底层UDP、TCP、SHM(共享内存)。

6.一个简单的FastDDS示例

要使用FastDDS首先需要安装它,有bin、Source、dockerimage3种方式,但bin和dockerimage需要到

1
查看完整版本: 通信中间件FastDDS基础概念简