Fast-DDS源码阅读笔记(一)-基本概念入门
Fast-DDS基础概念
数据分发服务(DDS)是以数据为中心的通信协议,用于分布式软件应用程序通信。它描述了支持数据提供者和数据消费者之间通信的通信应用程序编程接口(API)和通信语义。
由于它是一种以数据为中心的发布订阅(DCPS)模型,在其实现中定义了三个关键的应用实体:发布实体,它定义了生成信息的对象及其属性;订阅实体,它定义了消费信息的对象及其属性;以及配置实体,它定义了作为主题传输的信息类型,并使用其服务质量(QoS)属性创建发布者和订阅者,确保上述实体的正确性能。模型图示如下

DDS中的四个基本概念
Publisher
负责配置与实现DataWrites的DCPS实体,DataWriters是负责发布消息的实体,每个DataWriter从属于一个Topic,在这个主题下发送消息
Subscribler
订阅者,负责接收订阅主题上的发布数据的DCPS实体,为一个或者多个数据读取器服务,同时将可用的消息传达给应用程序
Topic
主题,每个Domain上唯一,完成了发布者和订阅者之间的数据类型统一
Domain
将所有属于Domain的发布者与订阅者联系起来,DDS的域由Domain ID标识域参与者通过指定Domain ID设置自己从属的Domain,不同的Domain的Participant之间感知不到彼此的存在
RTPS协议
RTPS(Real Time Publish Subscribe Protocal)是支持DDS协议开发的尽力而为协议传输(UDP/IP)的消息中间件,除了RTPS,Fast-DDS还支持SHM与TCP的传输方式
RTPS的顶层继承自DDS的域,定义了独立的通信平面,存在多个域可以独立的运行。Domain中可以存在任意数量的PTPS Participants,PTPS Participants会使用EndPoint,EndPoint分为PTPSReader与RTPSWriter

通信围绕着Topic这个概念展开,Topic独立于Paticipant,通信单元被称之为Change,其抽象出了某个主题命名的数据以及与其相关的更新。RTPS Reader与RTPS Writer会将更改记录记录在History中
FastDDS架构
架构如下图所示

应用层
在分布式系统中使用FastDDS(Fast Rtps)实现通信的用户程序
FastDDS层
对DDS通信中间件的健壮实现,允许在一个或者多个DDS域中部署Domain Participants,同一个Domain中的Participants能够通过发布/订阅主题交换消息
| 概念 | 定义 |
|---|---|
| Entity | 参与通信的元素,支持Qos,实现Listener |
| Qos | 定义每个Entity的具体通信行为 |
| Listener | 通知Entity应用执行过程中可能发生的事件 |
Fast-DDS中的Entity
| 名称 | 描述 |
|---|---|
| Domain | 域,一个整数,由Application层的开发人员提供 |
| DomainPaticipant | 包含Publisher,Subscriber,Topic等其他实体的对象 |
| DataWriter | 它是负责发布消息的实体。 创建该实体时,用户必须提供一个主题,该主题将是数据发布的主题。 通过将数据对象写入数据写入器历史记录的变化来进行发布。 |
| DataWriterHistory | 是指数据对象所发生的更改的列表。当 DataWriter 开始在特定主题下发布数据时,实际上会对数据进行更改。这些更改会被记录在 History 中 |
| Subscriber | 订阅者使用数据读取器(DataReader)订阅主题,该读取器从传输层读取数据。 它是创建并配置其包含的数据读取器实体的实体,并且可能包含一个或多个数据读取器实体。 |
| DataReader | 订阅主题以接收发布物的实体。用户在创建该实体时必须提供订阅主题。DataReader 以 DataReaderHistory 中的更改来接收消息 |
| DataReaderHistory | 读取器历史。它包含数据读取器在订阅某个主题后接收到的数据对象所发生的更改 |
| Topic | 绑定 DataWriter与DataReader |
RTPS层
实现实时发布订阅协议,实现DDS应用程序的互操作性,作为传输层的抽象层
该层有四个重要的Entity
| 概念 | 定义 |
|---|---|
| RTPSDomain | 实现DDS中的Domain到RTPS协议中 |
| RTPS Participant | 如上,DDS中的Paticipant实现到RTPS协议中,允许对包含的实体进行配置与创建 |
| RTPS Reader | 消息接收实体,接收Writer的变化并且写入到ReaderHistory, |
| RTPS Writer | 消息的来源,从DataWriter History中读取变化,并且传输给所有匹配的Reader |
传输层
为FAST-DDS解耦底层的具体通信行为提供抽象,支持UDP,TCP,SHM
事件驱动架构
Fast DDS有一个时间事件系统,它可以让Fast DDS响应某些条件,并定期执行操作。其中一些时间事件对用户不可见,因为它们与DDS和RTPS元数据有关。然而,用户可以在他们的应用程序中通过继承该类来定义定期的时间事件。
功能特性
服务发现协议
| 发现机制 | 描述 |
|---|---|
| Simple Discovery | 简单发现机制,与其他的DDS协议兼容,DomainPaticipant将被逐个发现并匹配 |
| Discovery Server | 发现服务器方式,集中式的发现架构,服务器作为发现的中心节点 |
| Static Discovery | 静态方式,跳过对某些实体的发现 |
| Manual Discovery | 手动发现,仅在RTPS这种使用 |

浙公网安备 33010602011771号