Fast-DDS 快速入门
精简版快速入门,只保留核心概念与上手步骤。发现协议、传输层、Security、XTypes、DataSharing 等见 Fast-DDS完整文档.md。
目录
- 一句话了解 Fast-DDS
- 核心概念(DDS 实体与数据流)
- 环境要求与构建
- 5 分钟上手:Hello World
- 双层 API 怎么选
- 常用 QoS 速览
- 常见问题
- 下一步
1. 一句话了解 Fast-DDS
Fast-DDS(eProsima)是 OMGDDS标准及线协议RTPS的高性能C++实现:无中心 broker 的发布-订阅,自动发现、可配置 QoS、可插拔传输(UDP/TCP/共享内存)。ROS 2 LTS 默认中间件,广泛用于机器人与实时分布式系统。
为什么用 Fast-DDS?
- 标准兼容:DDS + RTPS,可与其它 DDS 实现互操作
- 性能与可扩展:共享内存、DataSharing 零拷贝、Discovery Server
- 两层 API:DDS 易用;RTPS 细粒度控制
2. 核心概念(DDS 实体与数据流)
| 实体 | 作用 |
|---|---|
| DomainParticipant | 加入 DDS 域(逻辑隔离边界) |
| Topic | 命名数据通道 + 类型 |
| Publisher / DataWriter | 发布数据 |
| Subscriber / DataReader | 订阅数据 |
同一Domain ID内的 Participant 自动发现彼此(PDP/EDP),无需手动配 IP 列表(Discovery Server 模式除外)。
3. 环境要求与构建
| 项 | 要求 |
|---|---|
| CMake | ≥ 3.22 |
| C++ | C++11+ |
| 依赖 | fastcdr、foonathan_memory(CMake 自动拉取) |
| 可选 | OpenSSL(DDS Security) |
gitclone https://github.com/eProsima/Fast-DDS.gitcdFast-DDSmkdirbuild&&cdbuild cmake..-DCMAKE_BUILD_TYPE=Release-DCOMPILE_EXAMPLES=ON cmake--build.-j$(nproc)sudocmake--install.# 可选-DCOMPILE_EXAMPLES=ON可直接编译hello_world示例。
4. 5 分钟上手:Hello World
4.1 定义 IDL 并生成代码
@extensibility(APPENDABLE) struct HelloWorld { unsigned long index; string message; };fastddsgen HelloWorld.idl生成HelloWorld.hpp、HelloWorldPubSubTypes.hpp等,并在 Participant 上register_type()。
4.2 运行示例
两个终端(需已构建examples/cpp/hello_world):
# 终端 1./hello_world publisher# 终端 2./hello_world subscriber看到Publisher matched./Subscriber matched.后数据开始流动。有限测试:
./hello_world publisher-s5./hello_world subscriber-s54.3 最小代码顺序(Publisher)
DomainParticipantFactory::get_instance()create_participant_with_default_profile()type.register_type(participant)create_publisher()→create_datawriter()writer->write(&data)
Subscriber 侧对应create_subscriber()→create_datareader(),Listener 或 WaitSet 收数。
5. 双层 API 怎么选
| DDS API | RTPS API | |
|---|---|---|
| 命名空间 | fastdds::dds | fastdds::rtps |
| 抽象 | Participant / Writer / Reader | RTPSParticipant / RTPSWriter / RTPSReader |
| 适用 | 应用开发、ROS 2 集成 | 定制历史、负载池、协议细节 |
多数项目从DDS API起步;需要底层控制时再下沉 RTPS。
6. 常用 QoS 速览
| QoS | 含义 | 典型场景 |
|---|---|---|
| Reliability | RELIABLE / BEST_EFFORT | 控制指令 vs 传感器流 |
| Durability | VOLATILE / TRANSIENT_LOCAL | 晚加入订阅者能否补历史 |
| History | KEEP_LAST / KEEP_ALL + depth | 缓存条数 |
| Deadline | 最大发布间隔 | 超时检测 |
| Liveliness | 存活断言 | 节点宕机检测 |
Writer 与 Reader QoS必须兼容才能匹配;不匹配时on_subscription_matched可能一直为 0。
7. 常见问题
| 现象 | 处理 |
|---|---|
| Publisher/Subscriber 不匹配 | 检查 Domain ID、Topic 名、类型、QoS |
| 本机不通 | 确认防火墙;同机可试 SHM 传输 |
| 找不到 fastddsgen | 安装 Fast-DDS 工具包或从源码COMPILE_TOOLS=ON |
| ROS 2 用哪个版本 | 跟随 ROS 发行版绑定的 Fast-DDS 版本 |
8. 下一步
- 官方:eProsima/Fast-DDS — 文档、
examples/、fastddsgen。 - 建议顺序:DDS/RTPS 标准入门 → 架构概述 → QoS → 参与者/端点发现 → 传输与安全(按需求选读)。