DDS协议
数据分发服务 (DDS) 是一种用于分布式软件的以数据为中心的通信协议 应用程序通信。 它描述了通信应用程序编程接口 (API) 和通信语义,这些接口使 数据提供者和数据使用者之间进行通信。
DCPS模型
DDS是以 数据为中心的发布订阅 (DCPS)模型,因此在其中定义了三个关键应用程序实体 实现:
发布实体,定义信息生成对象及其属性;
订阅实体,定义信息消耗对象及其属性;
配置实体,定义作为主题传输的信息类型,并创建发布者和订阅者其服务质量 (QoS) 属性,确保上述实体的正确性能。
其具有四个基本元素
- 发布者 Publisher。DCPS的实体实现。它充当一个工厂,可以创建任意数量的DataWriter。
- 订阅者 Subscriber。DCPS的实体实现。它充当一个工厂,可以创建任意数量的DataReader。4
- 话题 Topic。用于绑定Pub和Sub,在DDS Domain中唯一。
- 域 Domain。具有Domain ID,用于隔离不同的工作空间。
QoS
DDS 使用 QoS 来定义 DDS 实体的行为特征。QoS 由单个 QoS 策略组成 (派生自 QoSPolicy 类型的对象)。
RTPS发布订阅协议
实时发布订阅 (RTPS) 协议,开发用于 支持DDS应用,是发布-订阅通信中间件 通过尽力而为的传输,例如 UDP/IP。此外,快速DDS提供对TCP和 共享内存 (SHM) 传输。(说人话:DDS是数据分发的协议,RTPS是数据传输的协议,DDS基于RTPS来实现数据分发服务)
其包含组成部分
- RTPSDomain。 它是DDS域对RTPS协议的扩展。
- RTPSParticipant。包含其他 RTPS 实体的实体。它允许配置和创建它包含的实体。
- RTPSWriter。 消息的来源。它读取 DataWriterHistory 中写入的更改,并将它们传输给所有 它之前匹配的 RTPSReaders。
- RTPSReader。 消息的接收实体。它将RTPSWriter报告的更改写入DataReaderHistory。
简单来说,DDS是一种数据分发服务,提供了一种方便、高效的方式来处理实时数据,例如传感器数据、控制命令等。而RTPS则是DDS协议的底层实现,负责数据的传输、发现和分发,确保数据的可靠性和实时性。
类比一下,DDS就像是一个高级服务,相当于快递公司,提供了丰富的服务和功能,如多种包裹尺寸、包裹历史记录等。而RTPS就像是快递员,负责具体的包裹分发和交付工作,保证每个包裹都能准时、安全地送达。两者密切合作,DDS依赖于RTPS来实现数据的传输和分发,而RTPS则通过DDS提供的高级服务来优化数据的处理和管理。
FastDDS整体软件架构
软件层次
FastDDS整体架构如下,这里可以看到DDS和RTPS的关系。另外缺少一部分IDL(统一描述语言),其应该是Pub、Sub的反序列化、序列化工具。
在RTPS层,主角是Writer&Reader,其接口复杂和灵活。DDS层,主角是Publisher&Subscriber。
执行模型(Runtime)
并行模型
FastDDS中每个节点(也叫 DomainParticipant)具有:
- 一个 主程序线程(用户持有)
- 一个 事件和周期性任务的线程
- 一个 异步发送线程,用于用户完成写入数据后,异步得完成网络通信
- 多个 接收线程,每个reception channel,取决于传输层的实现方式
RTPS的通信传输实现
在传输上,Fast-RTPS支持以下五种传输方式:
- UDPv4
- UDPv6
- TCPv4
- TCPv6
- SHM(共享内存)
当 Participant 创建时,会自动的配置两个传输通道:
- SHM:使用同一个机器上的参与者通信
- UDPv4:用于与跨机器的参与者通信