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将数据变更发送给它所知道的任何RTPSReaderRTPSReader接收到数据后将使用新的数据更新它的历史缓存
通过选择不同的Qos,可以决定历史缓存如何进行管理。










