Fast DDS 设备发现与数据订阅发布原理
一、Fast DDS 基本架构
Fast DDS(以前称为Fast RTPS)是一个开源的实时发布-订阅(RTPS)中间件实现,基于OMG(对象管理组织)的DDS(数据分发服务)标准。它专为低延迟、高可靠性的实时系统设计。
核心组件:
- DomainParticipant - 域参与者,连接到特定DDS域的入口点
- Publisher - 发布者,负责发布数据
- Subscriber - 订阅者,负责接收数据
- Topic - 主题,数据的逻辑通道
- DataWriter - 数据写入器,具体发送数据
- DataReader - 数据读取器,具体接收数据
二、设备发现机制
Fast DDS 使用基于RTPS协议的自动发现机制,主要通过以下两种方式实现:
1. 发现过程
-
初始发现
- 启动时,参与者通过多播(UDP)发送"Hello"消息
- 接收方回复"ACK"消息,建立通信关系
-
发现协议
- SPDP (Simple Participant Discovery Protocol) - 参与者发现
- SEDP (Simple Endpoint Discovery Protocol) - 端点(发布者/订阅者)发现
-
发现消息
- ParticipantAnnouncement - 参与者公告
- ParticipantData - 参与者详细信息
- PublicationData - 发布者信息
- SubscriptionData - 订阅者信息
-
🚀 设备发现 (Discovery):寻找"同伴"的两步走
-
参与者发现阶段 (PDP) :
各参与者通过广播(或配置的单播)宣告自己的存在。默认使用多播地址和端口。
当两个参与者发现彼此位于同一DomainId时,它们便建立了初步的联系,整个过程默认在毫秒级内完成。
-
端点发现阶段 (EDP) :
在PDP建立的通道上,参与者们"坦诚相待",交换自己拥有的DataWriter和DataReader信息,包括它们发布/订阅的Topic和QoS策略。
一旦发现有Topic和数据类型匹配的端点,它们便自动完成配对。
2. 发现机制的实现
- 多播发现 :默认使用239.255.0.1:7400进行多播
- 单播发现 :可配置为直接连接到已知参与者
- 静态发现 :通过配置文件指定参与者信息,适用于网络受限环境
三、数据订阅发布原理
1. 数据传输流程
-
发布流程
- DataWriter创建数据样本
- 序列化数据(默认使用CDR格式)
- 通过Publisher发送到网络
- 根据QoS策略确定传输方式
-
订阅流程
- Subscriber接收网络数据
- 反序列化数据
- 根据过滤条件筛选
- 传递给DataReader
2. 通信模式
- 尽力而为 (Best Effort) - 不保证可靠性
- 可靠传输 (Reliable) - 保证数据送达
- 实时传输 - 支持时间敏感型应用
3. QoS(服务质量)策略
- 可靠性 :可靠/尽力而为
- 持久性 :瞬态/持久
- 历史记录 :保持最新/保持所有
- ** deadline**:消息截止时间
- 生命周期 :数据有效期
四、技术特点
-
高性能
- 零拷贝传输
- 批量数据处理
- 高效的内存管理
-
实时性
- 低延迟设计
- 可预测的消息传递
- 时间感知的调度
-
可靠性
- 自动重传机制
- 消息确认机制
- 故障检测与恢复
-
可扩展性
- 支持大规模部署
- 分层发现机制
- 动态参与者管理
五、网络传输
- UDP/IP :默认传输协议
- TCP :可选,适用于不可靠网络
- 共享内存 :同一主机内的高效通信
六、安全性
- 身份验证
- 加密传输
- 访问控制
总结
Fast DDS通过RTPS协议实现了高效的设备发现和数据订阅发布机制,特别适合实时系统和资源受限环境。它的发现机制自动且灵活,数据传输支持多种QoS策略,能够满足不同应用场景的需求。
Fast DDS的设计理念是"数据为中心",通过主题将发布者和订阅者解耦,使得系统更加灵活和可扩展。这种架构非常适合需要实时数据交换的分布式系统,如机器人、自动驾驶、工业控制系统等领域。