从事汽车软件开发,通信中间件绕不开,当前最火热的无非有 2 种:Some/IP 和 DDS。DDS 是一种分布式通信标准,有很多商业和开源的实现,Fast DDS 是其中的一种。它在 ROS2 中被应用,而 Apollo 中的 CyberRT 框架中也有它的身影。
讲 Fast DDS 之前先讲什么是 DDS。
1. 什么是 DDS ?
DDS 是 OMG 组织发布的一种中间件协议和 API 标准,它将系统的组件集成在一起,提供业务和任务关键型物联网 (IoT) 应用程序所需的低延迟数据连接、极高的可靠性和可扩展架构。
DDS(Data Distribution Service,数据分发服务) 是一种以数据为中心的通信协议,用于分布式软件应用程序通信。
它描述了支持 数据提供者(Data Providers) 和 数据消费者(Data Consumers) 之间通信的通信应用程序编程接口 (API) 和通信语义。
要学习 DDS 就不能忽略它的模型:DCPS(以数据为中心的发布订阅模型)。
DCPS 有 3 个关键实体:
- publication entities: 定义消息生成对象及相关属性
- subscription entities:定义消息消费对象及相关属性
- configuration entities:定义传输相关的属性如 Topic 类型,通信的 QoS(服务质量)。
QoS 是一个非常重要的概念,DDS 使用 QoS 来定义 DDS 实体的行为特征。 QoS 由单独的 QoS 策略(源自 QoSPolicy 的类型的对象)组成。
2. 什么是 Fast-DDS?
DDS 是一套标准,它有很多实现,有商业的,也有开源的。
商业:RTI
开源: Cyclone DDS、Fast-DDS
所以,Fast DDS 是一种开源的 DDS 标准实现,它由 ePromise 公司发布并维护。
3. 什么是 DCPS?
先看看 Fast DDS 官方文档中的一张图。
DDS 是以数据为中心的通信模型,那么这个数据中心是什么呢?
我个人的理解是以 Topic 为代表的消息对象就是 DDS 中的数据中心。
通过 Topic 的纽带关系,可以将数据生成为数据消费对象连接起来,并且可以通过 QoS 执行通信服务质量策略。
在 DCPS 模型中,有 4 个基础的概念:
- Publisher:它是负责创建和配置其实现的 DataWriters 的 DCPS 实体。 DataWriter 是负责实际发布消息的实体。每个 DataWriter 都有一个分配的 Topic,在该 Topic 下发布消息。
- Subscriber:它负责