01-FastDDS简介
本节介绍DDS和RTPS的概念。
本文章来源于
fast dds
官网中的 What is DDS 和What is RTPS 章节
1.1 什么是DDS
Data Disrubution Service(DDS)
——数据分发服务——是一个用来进行分布式软件应用通信的协议。它描述了数据提供者和数据消费者之间的通信API
以及通信语义。
DDS
是一个以数据为中心的发布、订阅模型(Data-Centric Publish Subscribe
),因此在其实现中定义了三个关键的应用实体:
- 发布者实体(Publication entities)——定义信息生成对象以及属性
- 订阅者实体(Subscription entities)——定义信息消费对象以及属性
- 配置实体(configration entities)——定义了以
topic
形式传输的信息类型,以及创建发布者和订阅者的服务质量(Quality of Service
),以保证上述实体的正确表现。DDS使用QoS来定义DDS实体的行为特征,QoS
有其单独的QoS
策略。
1.1.1 DCPS概念模型
在DCPS
模型中,为通信应用系统的开发定义了四个基本元素:
- 发布者(
Publisher
):它是负责创建和配置它所实现的DataWriter
的实体。DataWriter
是负责实际的消息发布的实体。每个DataWriter
都会被赋予一个topic
,以进行消息的发布。 - 订阅者(
Subscriber
):它是负责接收它所订阅的topic
的实体。它为一个或多个DataReader
对象提供服务,这些对象负责传达应用程序的新数据。 - 话题(
Topic
):它是绑定发布者和订阅者的实体,并且它在DDS
域中是唯一的。通过TopicDescription
,它允许发布和订阅的数据保持一致。 - 域(
Domain
):这是一个连接在一个或多个应用之间的链接所有发布者和订阅者,使他们可以通过不同的topic
交换数据的概念。这些作为domain
的独立应用参与者叫做DomainParticipant
。DDS Domain
通过Domain ID
进行标识。DomainParticipant
定义domain ID
来指定它属于哪个DDS Domain
。具有不同ID的两个DomainParticipants不知道彼此在网络中的存在。DomainParticipant
充当其他DCPS
的实体,扮演发布者、订阅者和主题的实体工厂容器,并提供域中的管理服务。
1.2 什么是RTPS
为提供DDS
应用而开发的实时发布订阅(RTPS
)协议,是一个基于例如UDP/IP
的最佳传输的发布者——订阅者通信中间件。此外,Fast-DDS
还提供支持TCP
和共享内存(SHM
)的传输方式。它被设计为同时支持单播和多播通信。
在继承于DDS
的RTPS
顶部可以找到Domain
,它被定义为一个单独的通信平面。多个domain
可以同时独立共存。domain
可以包含任意个数的RTPS
参与者,既能够发送数据,又可以接收数据。为此,每个RTPS
参与者都有以下端点:
- RTPSWriter:用于发送数据的端点
- RTPSReader:用于接收数据的端点
每个RTPS
参与者可以拥有任意多个的RTPSWriter
和任意多个的RTPSReader
。
DDS
围绕TOPICS
进行通信。它定义并标记要交换的数据。TOPICS
不属于任何特定的参与者。相反,参与者在topics
之下,通过RTPSWriters
和RTPSReaders
进行数据的读写。通信单元被称为Change
,它表示在topic
之下的数据更新。RTPSWriters
和RTPSReaders
在历史中注册这些变更,该变更是一种用于缓存最近更改的数据结构。
在Fast DDS
中,当你通过RTPSWriter
发布数据时,默认的配置行为如下:
- 变更记录被添加到
RTPSReader
的历史缓存中 RTPSWriter
将数据变更发送给它所知道的任何RTPSReader
RTPSReader
接收到数据后将使用新的数据更新它的历史缓存
通过选择不同的Qos
,可以决定历史缓存如何进行管理。