FastDDS
DDS
DDS采用的通信模型是多对多单向数据交换,其中应用 生成数据,发布到属于应用的订阅者本地缓存中,这些应用正在消耗数据。 信息流由各实体之间建立的服务质量(QoS)政策监管 负责数据交换。
DDS域内信息流动的概念图。 只有属于同一域的实体才能发现每个 其他则通过匹配主题。
DDS安装
1 | mkdir ~/Fast-DDS |
RTPS(实时发布订阅协议)是其底层实现的核心协议,用于支持分布式系统中的高效数据传输。RTPS通过定义消息格式、行为和发现机制,实现不同DDS产品间的互操作性。
RTPS
RTPS协议的核心模块
RTPS协议主要由以下四个模块组成:
- 结构模块:定义了RTPS的核心概念和数据结构,如GUID_t(全局唯一标识符)、Locator_t(通信地址信息)等。这些结构为通信实体提供了唯一标识和数据传输的基础。
- 报文模块:定义了RTPS消息的格式,包括消息头和子消息。子消息分为三类: 可靠型:如Heartbeat、AckNack,用于可靠传输。 信息型:如InfoDestination、InfoTimestamp,用于传递元信息。 数据型:如Data、DataFrag,用于传输用户数据。
- 行为模块:描述了Writer和Reader的行为。根据可靠性需求,分为Stateless(无状态)和Stateful(有状态)两种模式: StatelessWriter/Reader适用于BEST-EFFORT传输。 StatefulWriter/Reader适用于RELIABLE传输,支持基于序列号的反馈重传机制。
- 发现模块:实现通信实体的动态发现,分为两种协议: PDP(参与者发现协议):用于发现域内的参与者。 EDP(端点发现协议):用于发现参与者下的Writer和Reader。
RTPS在非可靠传输层(如UDP)上实现可靠传输,主要流程如下:
- Heartbeat子消息:Writer通过Heartbeat告知Reader当前有效的样本序列号范围。
- AckNack子消息:Reader对比本地接收的序列号,反馈缺失的序列号。
- 数据重传:Writer根据AckNack的反馈,通过Data或Gap子消息重传缺失的数据。
RTPS的动态发现机制是DDS分布式架构的基础。通过SPDP(简单域发现协议)和SEDP(简单端点发现协议),实现参与者和端点的自动发现与匹配。SPDP基于UDP组播,周期性广播参与者信息;SEDP则通过单播交换Writer和Reader的详细信息。
我一定会回来的,未完待续。。。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 涵风 Blog!

