DDS与RTPS的定义
一、什么是DDS?
数据分发服务(DDS)是一种以数据为中心的通信协议,用于分布式软件应用程序之间的通信。它描述了通信应用程序编程接口(API)和通信语义,这些接口和语义支持数据提供者和数据消费者之间的通信。
由于它是一种以数据为中心的发布-订阅(DCPS)模型,在其实现中定义了三个关键的应用实体:发布实体(用于定义信息生成对象及其属性)、订阅实体(用于定义信息消费对象及其属性)以及配置实体(用于定义作为主题传输的信息类型,并创建具有服务质量(QoS)属性的发布者和订阅者,以确保上述实体的正确运行)。
DDS使用QoS来定义DDS实体的行为特征。QoS由各个QoS策略(派生自QoSPolicy类型的对象)组成。这些在《策略》中有描述。
1.1 DCPS概念模型
在DCPS模型中,定义了四个用于开发通信应用系统的基本元素。
- 发布者(Publisher):它是负责创建和配置其所实现的数据写入器(DataWriters)的DCPS实体。数据写入器是负责实际发布消息的实体。每个数据写入器都会有一个指定的主题(Topic),消息将在该主题下发布。详情参见《发布者》。
- 订阅者(Subscriber):它是负责接收在其订阅的主题下发布的数据的DCPS实体。它为一个或多个数据读取器(DataReader)对象服务,这些数据读取器负责将新数据的可用性通知给应用程序。详情参见《订阅者》。
- 主题(Topic):它是将发布和订阅绑定在一起的实体。它在一个DDS域内是唯一的。通过主题描述(TopicDescription),它确保发布和订阅的数据类型的一致性。详情参见《主题》。
- 域(Domain):这一概念用于关联所有在不同主题下交换数据的、属于一个或多个应用程序的发布者和订阅者。参与一个域的这些独立应用程序被称为域参与者(DomainParticipant)。DDS域由一个域ID标识。域参与者通过定义域ID来指定它所属的DDS域。具有不同ID的两个域参与者不会察觉到彼此在网络中的存在。因此,可以创建多个通信通道。这适用于涉及多个DDS应用程序的场景,这些应用程序各自的域参与者相互通信,但这些应用程序之间不能相互干扰。域参与者充当其他DCPS实体的容器,作为发布者、订阅者和主题实体的工厂,并在域中提供管理服务。详情参见《域》。
这些元素如下图所示。

DCPS模型实体在DDS域中。
二、什么是RTPS?
实时发布-订阅(RTPS)协议是为支持DDS应用程序而开发的,是一种基于尽力而为的传输协议(如UDP/IP)的发布-订阅通信中间件。此外,Fast DDS还支持TCP和共享内存(SHM)传输。
它旨在支持单播和多播通信。
在RTPS的顶层,继承自DDS的是域(Domain),域定义了一个独立的通信平面。多个域可以同时独立存在。一个域包含任意数量的RTPS参与者(RTPSParticipants),即能够发送和接收数据的元素。为了实现这一点,RTPS参与者使用它们的端点(Endpoints):
- RTPS写入器(RTPSWriter):能够发送数据的端点。
- RTPS读取器(RTPSReader):能够接收数据的端点。
一个RTPS参与者可以有任意数量的写入器端点和读取器端点。

RTPS高层架构
通信围绕主题(Topics)展开,主题定义并标记了正在交换的数据。主题不属于特定的参与者。参与者通过RTPS写入器在某个主题下发布的数据中产生变更,并通过RTPS读取器接收与其订阅的主题相关联的数据。通信单元称为变更(Change),它表示在某个主题下写入的数据中的一次更新。RTPS读取器/RTPS写入器将这些变更记录在它们的历史(History)中,历史是一种用作近期变更缓存的数据结构。
在eProsima Fast DDS的默认配置中,当通过RTPS写入器端点发布一个变更时,后台会执行以下步骤:
- 该变更被添加到RTPS写入器的历史缓存中。
- RTPS写入器将该变更发送给它已知的所有RTPS读取器。
- 接收数据后,RTPS读取器用新的变更更新它们的历史缓存。
然而,Fast DDS支持多种配置,这些配置允许更改RTPS写入器/RTPS读取器的行为。对RTPS实体默认配置的修改意味着RTPS写入器和RTPS读取器之间的数据交换流程会发生变化。此外,通过选择服务质量(QoS)策略,可以在多个方面影响这些历史缓存的管理方式,但通信循环保持不变。您可以继续阅读《RTPS层》部分,了解更多关于Fast DDS中RTPS协议的实现。

674

被折叠的 条评论
为什么被折叠?



