Fast-DDS 快速入门

📅 2026/7/13 13:00:42 👁️ 阅读次数 📝 编程学习
Fast-DDS 快速入门

Fast-DDS 快速入门

精简版快速入门,只保留核心概念与上手步骤。发现协议、传输层、Security、XTypes、DataSharing 等见 Fast-DDS完整文档.md。

目录

  1. 一句话了解 Fast-DDS
  2. 核心概念(DDS 实体与数据流)
  3. 环境要求与构建
  4. 5 分钟上手:Hello World
  5. 双层 API 怎么选
  6. 常用 QoS 速览
  7. 常见问题
  8. 下一步

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订阅数据

Publisher

DataWriter

Topic

DataReader

Subscriber

DomainParticipant

同一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.hppHelloWorldPubSubTypes.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-s5

4.3 最小代码顺序(Publisher)

  1. DomainParticipantFactory::get_instance()
  2. create_participant_with_default_profile()
  3. type.register_type(participant)
  4. create_publisher()create_datawriter()
  5. writer->write(&data)

Subscriber 侧对应create_subscriber()create_datareader(),Listener 或 WaitSet 收数。


5. 双层 API 怎么选

DDS APIRTPS API
命名空间fastdds::ddsfastdds::rtps
抽象Participant / Writer / ReaderRTPSParticipant / RTPSWriter / RTPSReader
适用应用开发、ROS 2 集成定制历史、负载池、协议细节

多数项目从DDS API起步;需要底层控制时再下沉 RTPS。


6. 常用 QoS 速览

QoS含义典型场景
ReliabilityRELIABLE / BEST_EFFORT控制指令 vs 传感器流
DurabilityVOLATILE / TRANSIENT_LOCAL晚加入订阅者能否补历史
HistoryKEEP_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 → 参与者/端点发现 → 传输与安全(按需求选读)。