1.1 技术基础与发展背景
章节状态:已完成
更新时间:2026-05-21
一、生活化通俗类比
类比:从"传纸条"到"校园广播系统"
阶段1:点对点传纸条(Socket通信)
- 小明想告诉小红一件事,写纸条直接递过去
- 问题:小红不在座位怎么办?多人想听怎么办?
阶段2:班级公告栏(消息队列)
- 小明把消息贴到公告栏,小红有空来看
- 问题:不同班级看不到彼此的公告栏
阶段3:校园广播系统(DDS)
- 小明在广播室说:"我是三年级二班的小明,主题是'运动会通知',内容是..."
- 全校各班级订阅了"三年级二班+运动会"这个频道的都能收到
- 不需要知道谁在听,不需要知道对方在哪间教室
- 可以要求"必须每个人都听到"(可靠传输)或"听到最新就行"(尽力传输)
- 可以要求"只保留最近3条通知"(历史策略)
DDS就是这个"校园广播系统"的标准协议。
二、专业化标准定义与技术原理
2.1 DDS是什么
DDS(Data Distribution Service,数据分发服务) 是OMG(Object Management Group)制定的**以数据为中心的发布订阅(DCPS)**中间件标准。
| 属性 | 说明 |
|---|---|
| 全称 | Data Distribution Service for Real-Time Systems |
| 标准版本 | DDS v1.4 (2015), DDS-RTPS v2.5 (2023) |
| 核心模型 | 以数据为中心的发布订阅(DCPS) |
| 传输方式 | 支持UDP、TCP、共享内存、零拷贝等多种传输 |
| QoS支持 | 22+种服务质量策略 |
| 实时性 | 微秒级延迟,适用于自动驾驶、工业控制 |
2.2 技术演进时间线
timeline
title DDS技术演进历程
2004 : OMG发布DDS 1.0标准
2007 : RTPS协议标准化(DDSI-RTPS 2.0)
2009 : eProsima成立,开始Fast-DDS前身开发
2013 : Fast-RTPS首个版本发布
2015 : DDS 1.4标准发布
2017 : Fast-RTPS 1.5支持ROS2
2019 : Fast-RTPS更名为Fast-DDS 2.0
2021 : Fast-DDS 2.3支持动态类型
2023 : DDS-RTPS 2.5标准发布
2024 : Fast-DDS 2.14/3.0版本迭代
2025 : Fast-DDS 3.6.x持续演进
2.3 为什么需要DDS
传统中间件的痛点:
| 场景 | 传统方案问题 | DDS解决方案 |
|---|---|---|
| 自动驾驶 | 传感器数据量大、实时性要求高 | 零拷贝传输、微秒级延迟 |
| 工业机器人 | 节点动态上下线频繁 | 自动发现机制、Plug-and-Play |
| 分布式仿真 | 多节点时钟同步困难 | 时间戳管理、Deadline QoS |
| 军工航天 | 网络环境复杂、可能断网 | 多种传输适配、可靠性QoS |
2.4 核心概念图解
graph TB
subgraph "DDS Domain(域)"
subgraph "Participant A"
Pub[Publisher<br/>发布者]
DW[DataWriter<br/>数据写入器]
TopicA[Topic: /vehicle/speed<br/>主题]
end
subgraph "Participant B"
Sub[Subscriber<br/>订阅者]
DR[DataReader<br/>数据读取器]
TopicB[Topic: /vehicle/speed<br/>主题]
end
subgraph "Participant C"
Sub2[Subscriber<br/>订阅者]
DR2[DataReader<br/>数据读取器]
TopicC[Topic: /vehicle/speed<br/>主题]
end
end
Pub -->|创建| DW
DW -->|发布数据| TopicA
TopicA -.->|匹配| TopicB
TopicA -.->|匹配| TopicC
TopicB -->|接收数据| DR
DR -->|读取| Sub
TopicC -->|接收数据| DR2
DR2 -->|读取| Sub2
style TopicA fill:#e1f5ff
style TopicB fill:#e1f5ff
style TopicC fill:#e1f5ff
2.5 Fast-DDS在DDS生态中的位置
graph TB
subgraph "DDS实现生态"
direction TB
subgraph "商业实现"
RTI[RTI Connext DDS<br/>市场份额最大]
Vortex[ADLINK Vortex OpenSplice]
end
subgraph "开源实现"
FastDDS[eProsima Fast-DDS<br/>ROS2默认]
Cyclone[Eclipse Cyclone DDS<br/>轻量级]
OpenDDS[OpenDDS<br/>ACE/TAO基础]
Gurum[Gurum DDS<br/>韩国]
end
subgraph "上层应用"
ROS2[ROS2<br/>机器人操作系统]
AUTOSAR[AUTOSAR Adaptive]
Simulink[MATLAB/Simulink]
end
FastDDS --> ROS2
Cyclone --> ROS2
RTI --> AUTOSAR
RTI --> Simulink
end
style FastDDS fill:#90EE90
三、行业应用场景
3.1 主要应用领域
| 领域 | 典型场景 | 代表用户 |
|---|---|---|
| 自动驾驶 | 传感器融合、决策规划、车辆控制 | 百度Apollo、AutoWare |
| 机器人 | ROS2通信中间件 | 各大机器人公司 |
| 工业自动化 | PLC通信、产线控制 | 西门子、博世 |
| 航空航天 | 飞控系统、航电网络 | NASA、波音、空客 |
| 国防军工 | 舰载/机载系统、C4ISR | 各国军工企业 |
| 能源电力 | 电网调度、变电站自动化 | 国家电网、南方电网 |
3.2 Fast-DDS的典型部署架构
graph TB
subgraph "自动驾驶车辆"
subgraph "传感器域"
Lidar[激光雷达<br/>Topic: /lidar/points]
Camera[摄像头<br/>Topic: /camera/image]
Radar[毫米波雷达<br/>Topic: /radar/tracking]
end
subgraph "计算域"
Perception[感知模块<br/>订阅: /lidar /camera /radar<br/>发布: /perception/objects]
Planning[规划模块<br/>订阅: /perception/objects<br/>发布: /planning/trajectory]
Control[控制模块<br/>订阅: /planning/trajectory<br/>发布: /control/command]
end
subgraph "执行域"
Chassis[底盘执行器<br/>订阅: /control/command]
end
Lidar -->|SHM零拷贝| Perception
Camera -->|SHM零拷贝| Perception
Radar -->|SHM零拷贝| Perception
Perception -->|SHM| Planning
Planning -->|SHM| Control
Control -->|SHM| Chassis
end
subgraph "云端/车路协同"
V2X[V2X通信单元<br/>Domain: 2]
Cloud[云端服务器<br/>Domain: 2]
end
Perception -.->|UDP| V2X
V2X -.->|UDP| Cloud
四、推荐材料学习
4.1 国内资源
| 类型 | 资源名称 | 链接/说明 | 推荐指数 |
|---|---|---|---|
| 视频 | B站-ROS2与DDS原理 | 搜索"ROS2 DDS"相关教程 | ⭐⭐⭐⭐ |
| 博客 | 知乎-DDS协议详解 | 搜索"DDS中间件"专题文章 | ⭐⭐⭐⭐ |
| 社区 | 古月居-ROS2通信机制 | www.guyuehome.com/ | ⭐⭐⭐⭐⭐ |
| 文档 | 鱼香ROS-DDS教程 | fishros.com/ | ⭐⭐⭐⭐ |
4.2 国外资源
| 类型 | 资源名称 | 链接 | 推荐指数 |
|---|---|---|---|
| 官方文档 | Fast-DDS官方文档 | fast-dds.docs.eprosima.com/ | ⭐⭐⭐⭐⭐ |
| 规范文档 | OMG DDS Specification | www.omg.org/spec/DDS/ | ⭐⭐⭐⭐⭐ |
| 视频 | YouTube-ROSCon演讲 | 搜索"ROSCon DDS" | ⭐⭐⭐⭐ |
| 技术博客 | LWN-DDS相关 | lwn.net/ | ⭐⭐⭐⭐ |
| 播客 | CppCast | cppcast.com/ | ⭐⭐⭐ |
4.3 学术论文
| 论文 | 作者/会议 | 一句话摘要 | 链接 |
|---|---|---|---|
| The Data Distribution Service | OMG标准文档 | DDS规范权威定义 | www.omg.org/spec/DDS/ |
| DDSI-RTPS | OMG标准文档 | RTPS协议详细规范 | www.omg.org/spec/DDSI-R… |
| ROS2: The Robot Operating System | ROS2设计论文 | ROS2架构与DDS集成 | 搜索"ROS2 design paper" |
4.4 AI拓展工具
| 工具 | 用途 | 使用场景 |
|---|---|---|
| ChatGPT/Claude | 代码解释 | 阅读复杂源码时辅助理解 |
| GitHub Copilot | 代码辅助 | 二次开发时自动生成代码 |
| Mermaid Live Editor | 架构绘图 | mermaid.live/ |
| DeepL | 文档翻译 | 翻译OMG规范文档 |
五、数据源标注
5.1 官方规范文档
| 文档 | 版本 | 链接 |
|---|---|---|
| DDS Specification | v1.4 | www.omg.org/spec/DDS/1.… |
| DDSI-RTPS Specification | v2.5 | www.omg.org/spec/DDSI-R… |
| DDS-XTypes | v1.3 | www.omg.org/spec/DDS-XT… |
| DDS-Security | v1.1 | www.omg.org/spec/DDS-SE… |
5.2 Fast-DDS官方资源
| 资源 | 链接 |
|---|---|
| GitHub仓库 | github.com/eProsima/Fa… |
| 官方文档 | fast-dds.docs.eprosima.com/ |
| API参考 | fast-dds.docs.eprosima.com/en/latest/f… |
| 设计文档 | /home/my/code/opensource/Fast-DDS/mdDoc/ |
5.3 源码关键入口
| 路径 | 说明 |
|---|---|
/home/my/code/opensource/Fast-DDS/include/fastdds/dds/ | DDS标准API头文件 |
/home/my/code/opensource/Fast-DDS/include/fastrtps/rtps/ | RTPS协议实现头文件 |
/home/my/code/opensource/Fast-DDS/src/cpp/rtps/ | RTPS核心实现源码 |
/home/my/code/opensource/Fast-DDS/examples/cpp/ | 官方示例代码 |
/home/my/code/opensource/Fast-DDS/mdDoc/ | 项目内部文档 |
六、本节小结
核心要点:
- DDS是OMG制定的以数据为中心的发布订阅中间件标准
- Fast-DDS是开源DDS实现,ROS2的默认中间件
- 核心优势:自动发现、丰富QoS、多传输支持、实时性
- 主要应用:自动驾驶、机器人、工业控制、航空航天
七、学习检查清单与解答
| 检查项 | 解答要点 |
|---|---|
| DDS与消息队列的区别? | DDS:以数据为中心,自动发现,去中心化,无Broker,微秒级延迟,适合实时控制。 Kafka/RabbitMQ:以消息为中心,需配置Broker,毫秒级延迟,适合日志/事件处理。 类比:DDS像"校园广播",MQ像"邮局寄信"。 |
| DCPS核心概念? | Domain:逻辑隔离的通信域(如不同车辆)。 Topic:数据主题(如/vehicle/speed)。 Participant:域内通信节点。 Publisher/Subscriber:发布/订阅实体。 DataWriter/DataReader:实际读写数据的对象。 |
| Fast-DDS在生态中的位置? | 开源DDS实现三强之一(Fast-DDS/Cyclone DDS/OpenDDS)。 ROS2默认中间件,生态最活跃。 相比RTI商业版:免费、源码开放、社区支持好。 |
| DDS主要应用领域? | 自动驾驶:传感器数据融合(百度Apollo)。 机器人:ROS2通信基础。 工业控制:产线PLC通信。 航空航天:飞控系统(NASA/波音)。 国防军工:C4ISR系统。 |
本章内容按五件套规范编写:生活化类比 → 专业定义 → Mermaid图例 → 推荐材料 → 数据源标注