Fast DDS 的设备发现与数据订阅发布原理

Fast DDS 设备发现与数据订阅发布原理

一、Fast DDS 基本架构

Fast DDS(以前称为Fast RTPS)是一个开源的实时发布-订阅(RTPS)中间件实现,基于OMG(对象管理组织)的DDS(数据分发服务)标准。它专为低延迟、高可靠性的实时系统设计。

核心组件:

  • DomainParticipant - 域参与者,连接到特定DDS域的入口点
  • Publisher - 发布者,负责发布数据
  • Subscriber - 订阅者,负责接收数据
  • Topic - 主题,数据的逻辑通道
  • DataWriter - 数据写入器,具体发送数据
  • DataReader - 数据读取器,具体接收数据

二、设备发现机制

Fast DDS 使用基于RTPS协议的自动发现机制,主要通过以下两种方式实现:

1. 发现过程

  1. 初始发现

    • 启动时,参与者通过多播(UDP)发送"Hello"消息
    • 接收方回复"ACK"消息,建立通信关系
  2. 发现协议

    • SPDP (Simple Participant Discovery Protocol) - 参与者发现
    • SEDP (Simple Endpoint Discovery Protocol) - 端点(发布者/订阅者)发现
  3. 发现消息

    • ParticipantAnnouncement - 参与者公告
    • ParticipantData - 参与者详细信息
    • PublicationData - 发布者信息
    • SubscriptionData - 订阅者信息
  4. 🚀 设备发现 (Discovery):寻找"同伴"的两步走

  • 参与者发现阶段 (PDP) :

    各参与者通过广播(或配置的单播)宣告自己的存在。默认使用多播地址和端口。

    当两个参与者发现彼此位于同一DomainId时,它们便建立了初步的联系,整个过程默认在毫秒级内完成。

  • 端点发现阶段 (EDP) :

    在PDP建立的通道上,参与者们"坦诚相待",交换自己拥有的DataWriter和DataReader信息,包括它们发布/订阅的Topic和QoS策略。

    一旦发现有Topic和数据类型匹配的端点,它们便自动完成配对。

2. 发现机制的实现

  • 多播发现 :默认使用239.255.0.1:7400进行多播
  • 单播发现 :可配置为直接连接到已知参与者
  • 静态发现 :通过配置文件指定参与者信息,适用于网络受限环境

三、数据订阅发布原理

1. 数据传输流程

  1. 发布流程

    • DataWriter创建数据样本
    • 序列化数据(默认使用CDR格式)
    • 通过Publisher发送到网络
    • 根据QoS策略确定传输方式
  2. 订阅流程

    • Subscriber接收网络数据
    • 反序列化数据
    • 根据过滤条件筛选
    • 传递给DataReader

2. 通信模式

  • 尽力而为 (Best Effort) - 不保证可靠性
  • 可靠传输 (Reliable) - 保证数据送达
  • 实时传输 - 支持时间敏感型应用

3. QoS(服务质量)策略

  • 可靠性 :可靠/尽力而为
  • 持久性 :瞬态/持久
  • 历史记录 :保持最新/保持所有
  • ** deadline**:消息截止时间
  • 生命周期 :数据有效期

四、技术特点

  1. 高性能

    • 零拷贝传输
    • 批量数据处理
    • 高效的内存管理
  2. 实时性

    • 低延迟设计
    • 可预测的消息传递
    • 时间感知的调度
  3. 可靠性

    • 自动重传机制
    • 消息确认机制
    • 故障检测与恢复
  4. 可扩展性

    • 支持大规模部署
    • 分层发现机制
    • 动态参与者管理

五、网络传输

  • UDP/IP :默认传输协议
  • TCP :可选,适用于不可靠网络
  • 共享内存 :同一主机内的高效通信

六、安全性

  • 身份验证
  • 加密传输
  • 访问控制

总结

Fast DDS通过RTPS协议实现了高效的设备发现和数据订阅发布机制,特别适合实时系统和资源受限环境。它的发现机制自动且灵活,数据传输支持多种QoS策略,能够满足不同应用场景的需求。

Fast DDS的设计理念是"数据为中心",通过主题将发布者和订阅者解耦,使得系统更加灵活和可扩展。这种架构非常适合需要实时数据交换的分布式系统,如机器人、自动驾驶、工业控制系统等领域。

相关推荐
奇妙之二进制1 天前
fastdds源码分析之WriterListener
linux·开发语言·dds
kyle~1 个月前
DDS(Data Distribution Service)分布式实时数据分发标准
分布式·ros·dds
REDcker2 个月前
DDS 协议详解
机器人·ros·ros2·dds
Felven3 个月前
corundum 40G开源网卡测试结果
fpga开发·性能测试·dds·开源网卡·mqnic
南檐巷上学3 个月前
基于FPGA的正弦信号发生器、滤波器的设计(DAC输出点数受限条件下的完整正弦波产生器)
fpga开发·数字信号处理·dsp·dds
Coder个人博客4 个月前
三大DDS实现对比分析(CycloneDDS/Fast DDS/OpenDDS)
人工智能·自动驾驶·dds
aprilaaaaa5 个月前
(HaloOS 基于TC397学习笔记)一、环境搭建到编译demo成功
python·学习·dds·tc397
qqxhb6 个月前
系统架构设计师备考第61天——嵌入式系统架构模式&操作系统&数据库&中间件
数据库·中间件·系统架构·sqlite·dds·层次化(封闭/开放)·递归模式
Topplyz6 个月前
在FPGA中实现DDS方案详解(频率,幅度,波形可调)
fpga开发·dds