通信中间件 Fast DDS(二) :详细介绍
目录
1.引言
2.DDS的基本原理
3.FastDDS 的核心特性
4.FastDDS 的核心架构
5.典型应用场景
6.FastDDS 的安装与快速上手
7.学习资源与社区
1.引言
FastDDS(原称 Fast RTPS)是由西班牙公司 eProsima 开发的一款开源、高性能、实时性强的数据分发服务(Data Distribution Service, DDS)实现,完全遵循对象管理组织(OMG)制定的 DDS 标准(OMG DDS v1.4、v2.0 及 DDS Security 规范)。eProsima Fast DDS库提供应用程序编程接口(API)和通信协议,采用以数据为中心的发布-订阅(DCPS)模型,旨在在实时系统之间建立高效且可靠的信息分发机制。它专为需要低延迟、高吞吐量、高可靠性的分布式实时系统设计,广泛应用于机器人、自动驾驶、工业物联网(IIoT)、航空航天等领域。
FastDDS 作为 DDS 标准的主流开源实现之一,其核心定位是:
- 高性能优先:针对实时场景优化,延迟可低至微秒级,吞吐量支持 GB/s 级数据传输。
- 开源与合规:基于 Apache License 2.0 协议开源(商业使用无限制),完全兼容 OMG DDS 及 DDS Security 规范。
- 跨平台与灵活:支持 Linux、Windows、macOS、RTOS(如 VxWorks)等系统,兼容 x86、ARM、RISC-V 等架构。
2.DDS的基本原理
DDS采用的通信模型是一种多对多的单向数据交换,在该模型中,生成数据的应用程序会将数据发布到属于消费数据的应用程序的订阅者的本地缓存中。信息流由负责数据交换的实体之间制定的服务质量(QoS)策略进行调控。
作为一种以数据为中心的模型,DDS 建立在“全局数据空间”这一概念之上,所有相关应用都可访问该空间。想要提供信息的应用会声明其成为发布者的意图,而想要访问数据空间部分内容的应用则会声明其成为订阅者的意图。每当发布者向该空间发布新数据时,中间件就会将这些信息传播给所有相关的订阅者。
通信发生在不同域之间,即连接所有能够相互通信的分布式应用程序的孤立抽象层面。只有属于同一域的实体才能进行交互,而订阅数据的实体与发布数据的实体之间的匹配由主题介导。主题是明确的标识符,它将在域中唯一的名称与数据类型以及一组附加的特定于数据的服务质量(QoS)相关联。
DDS实体被建模为类或类型化接口。后者意味着更高效的资源处理,因为在执行前了解数据类型可以提前分配内存,而不是动态分配。
DDS域内信息流动的概念图。只有属于同一域的实体才能通过匹配的主题发现彼此,从而在发布者和订阅者之间交换数据。
3.FastDDS 的核心特性
1.极致的实时性与可靠性
- 低延迟设计:通过共享内存(Shared Memory)、UDPv4/v6 等轻量级传输协议,减少数据拷贝次数(如零拷贝优化),端到端延迟可低至 10-100 微秒(取决于传输方式)。
- 灵活的 QoS 策略:支持 20+ 种服务质量(Quality of Service)策略,按需平衡 “实时性” 与 “可靠性”,例如:
- 可靠性策略:可选择 “可靠传输”(确保数据不丢失)或 “尽力而为传输”(追求低延迟,允许少量丢包)。
- ** Deadline/ Latency Budget**:保障数据在指定时间内到达(如自动驾驶的控制信号需在 50ms 内传输)。
- 历史数据缓存:新加入的节点可自动获取历史数据(如机器人重启后恢复之前的传感器状态)。
- 高吞吐量:支持批量数据传输(Batching)、流量控制(Flow Control),单节点吞吐量可达 10+ GB/s(共享内存场景)。
2.灵活性与扩展性
- 多传输协议支持:
- 单机低延迟:共享内存(Shared Memory)(适合同一设备内的进程间通信)。
- 跨设备 / 跨网络:UDPv4/v6(实时性优先)、TCPv4/v6(可靠性优先,适合复杂网络)。
- 广域网络:支持 VPN、5G 等网络环境,可通过 “发现服务” 自动适配网络拓扑。
- 动态拓扑适应:支持节点的 “动态加入 / 退出”,无需重启系统即可扩展节点数量(如机器人集群新增传感器节点)。
- 丰富的数据类型支持:基于 IDL(Interface Definition Language) 定义数据结构,支持基本类型(int、float 等)、复杂结构体、枚举、数组等,自动生成跨语言(C++、Python、Java)的序列化 / 反序列化代码。
3.安全性
FastDDS 完全支持 OMG DDS Security 规范,通过插件化方式提供端到端安全能力:
- 身份认证(Authentication):基于 PKI(公钥基础设施)验证节点身份,防止非法节点接入。
- 数据加密(Encryption):使用 AES-256 等算法加密传输数据,防止窃听。
- 访问控制(Access Control):通过细粒度权限管理(如 “仅允许传感器节点向控制节点发送数据”),防止未授权操作。
4.开源生态与工具链
- 配套工具:
- FastDDS Monitor:可视化监控工具,实时查看节点状态、数据传输延迟、吞吐量等指标。
- FastDDS Gen:IDL 编译器,自动生成数据类型的序列化代码和 DDS 接口代码。
- FastDDS Discovery Server:集中式 / 分布式发现服务,解决大规模集群(1000+ 节点)的节点发现效率问题。
- 生态集成:
- 是 ROS 2(机器人操作系统 2) 的默认 DDS 实现之一(另一个是 Cyclone DDS),完美支持 ROS 2 的节点通信。
- 支持与 Unity、Unreal Engine 等引擎集成,用于虚拟现实(VR)、仿真系统的实时数据传输。
4.FastDDS 的核心架构
FastDDS 遵循 DDS 标准的 “发布 - 订阅(Publish-Subscribe)” 模型,核心组件可分为 5 层,自上而下分别是:
架构层级 | 核心组件 | 功能描述 |
---|---|---|
数据应用层 | User Application | 用户业务逻辑(如机器人的传感器数据采集、自动驾驶的控制算法)。 |
DDS 实体层 | DomainParticipant、Topic 等 | DDS 标准定义的核心实体,负责数据的发布 / 订阅管理。 |
数据序列化层 | Serializer | 基于 IDL 定义,将数据结构序列化为二进制流(或反序列化),支持跨平台兼容。 |
传输层 | Transport(UDP/TCP/ 共享内存) | 负责数据的物理传输,按需选择传输协议。 |
发现与配置层 | Discovery、QoS Manager | 管理节点发现(如 “发布者如何找到订阅者”)和 QoS 策略的生效。 |
其中,DDS 实体层是理解 FastDDS 工作流程的关键,核心实体包括:
- DomainParticipant(域参与者):节点的 “入口”,每个节点需创建一个 DomainParticipant 并加入指定 “域(Domain)”,只有同域的节点才能通信(实现逻辑隔离)。
- Topic(主题):数据的 “标签”,发布者和订阅者需通过相同的 Topic 匹配(如 “/robot/sensor/lidar” 表示激光雷达数据)。
- Publisher(发布者):数据的发送端,关联一个或多个 DataWriter。
- Subscriber(订阅者):数据的接收端,关联一个或多个 DataReader。
- DataWriter(数据写入器):将用户数据写入 DDS 系统,由 Publisher 管理。
- DataReader(数据读取器):从 DDS 系统读取数据,由 Subscriber 管理。
5.典型应用场景
FastDDS 的特性使其在实时、高可靠、分布式场景中具备不可替代的优势,典型应用包括:
1.机器人领域
- 场景:机器人集群协作(如工业机械臂、服务机器人)、传感器数据融合(激光雷达、摄像头、IMU 数据实时共享)。
- 价值:通过共享内存实现单机内传感器 - 控制器低延迟通信(微秒级),通过 UDP 实现多机器人跨设备协作(毫秒级延迟)。
2.自动驾驶
- 场景:车载系统内的 “感知 - 决策 - 控制” 数据传输(如摄像头感知数据、毫米波雷达数据向决策模块发送)、车路协同(V2X)中的实时信号交互。
- 价值:满足自动驾驶对 “低延迟(<100ms)” 和 “高可靠性(数据零丢失)” 的严苛要求,支持 DDS Security 防止数据被篡改。
3.工业物联网(IIoT)
- 场景:工业设备实时监控(如数控机床状态、生产线传感器数据)、边缘计算节点与云端的数据同步。
- 价值:支持海量节点(1000+)的动态接入,通过 TCP 适应工业现场复杂网络(如多路由器、高丢包环境)。
4.航空航天与国防
- 场景:无人机集群通信、卫星与地面站的实时数据传输、航空器内的分布式控制系统。
- 价值:符合航空级可靠性标准,支持高抗干扰传输和端到端加密,保障数据安全。
6.FastDDS 的安装与快速上手
通信中间件 Fast DDS(一) :编译、安装和测试_fast dds 安装-CSDN博客
7.学习资源与社区
- 官方文档:FastDDS 官方手册(最权威的入门与进阶资料)。
- GitHub 仓库:eProsima/Fast-DDS(源码、Issue 讨论、贡献指南)。
- 社区论坛:eProsima Community(提问与技术交流)。
- ROS 2 集成文档:ROS 2 与 DDS 配置(针对机器人开发者)。
综上,FastDDS 凭借其高性能、开源免费、丰富的生态,已成为实时分布式系统(尤其是机器人、自动驾驶)的首选中间件之一。无论是个人开发者还是企业级项目,都可基于 FastDDS 快速构建可靠的实时数据传输方案。