实时发布订阅协议(RTPS)DDS互操作网络协议规范-中文翻译_005

本文详细介绍了RTPS(Real-time Publish-Subscribe Protocol)协议与DDS(Data Distribution Service)的互操作性,包括RTPS参与者、端点、写入者和读取者的概念和功能。RTPS参与者映射到DDS的DomainParticipant,RTPS端点分为Writer和Reader,负责数据的发送和接收。DDS DataWriter通过HistoryCache将数据传递给RTPS Writer,然后传输到匹配的RTPS Reader。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键字:OMG,RTPS,DDS

The Real-time Publish-Subscribe Protocol (RTPS) DDS Interoperability Wire Protocol Specification,Version 2.2,September 2014

8.2.5. RTPS 参与者(Participant)

RTPS参与者(Participant)是RTPS端点(Endpoint)实体的容器,并映射到DDS DomainParticipant。 此外RTPS参与者(Participant)促进了单个RTPS参与者(Participant)中的RTPS端点(Endpoint)实体共享共同属性。

在这里插入图片描述
图 8.5 RTPS Participant

RTPS参与者(Participant)包含表2.8中显示的属性。

表 8.8 RTPS Participant属性
在这里插入图片描述

8.2.6. RTPS 端点(Endpoint)

从RTPS协议的角度来看,RTPS端点(Endpoint)表示可能的通信端点。有两种RTPS端点(Endpoint)实体:Writer端点和Reader端点。

RTPS Writer端点将CacheChange消息发送到RTPS Reader端点,并可能接收它们发送的更改的确认。RTPS Reader端点从Writer端点接收CacheChange和更改可用性声明,并可能确认更改和/或请求丢失的更改。

RTPS端点(Endpoint)包含表8.9中显示的属性。

表 8-9 RTPS Endpoint配置属性

在这里插入图片描述

8.2.7. RTPS 写入者(Writer)

RTPS Writer是RTPS端点(Endpoint)的特殊实例,负责将CacheChange消息发送到匹配的RTPS Reader端点。它的作用是将其HistoryCache中的所有CacheChange更改传输到匹配的远程RTPS Reader的HistoryCache。

配置RTPS Writer的属性与协议行为密切相关,将在行为模块(8.4)中介绍。

8.2.8. RTPS 读取者(Reader)

RTPS Reader是RTPS端点(Endpoint)的特殊实例,负责从匹配的RTPS Writer端点接收CacheChange消息。

配置RTPS Reader的属性与协议行为密切相关,将在行为模块(8.4)中介绍。

8.2.9. 与DDS实体的关系

如8.2.2中所述,HistoryCache构成DDS实体与其对应的RTPS实体之间的接口。例如DDS DataWriter通过公共HistoryCache将数据传递给匹配的RTPS Writer。

DDS实体与HistoryCache的确切交互方式是特定于实现的,而不是由RTPS协议建模。相反RTPS协议的行为模块仅指定如何将CacheChange更改从RTPS Writer的HistoryCache传输到每个匹配的RTPS Reader的HistoryCache。

尽管它不是RTPS协议的一部分,但了解DDS实体如何与HistoryCache交互以获得对协议的完整理解非常重要。本主题构成本小节的主题。

使用UML状态图描述上述交互。用于指代DDS和RTPS实体的缩写列于下表8.10中。

表 8.10序列图和状态图中使用的缩写

在这里插入图片描述

8.2.9.1. DDS数据写入者(DataWriter)

DDS DataWriter上的write方法作将CacheChange更改添加到其关联的RTPS Writer的HistoryCache中。因此HistoryCache包含最新写入的更改的历史记录。更改数量由DDS DataWriter上的QoS设置确定,如HISTORY和RESOURCE_LIMITS QoS。

默认情况下,HistoryCache中的所有更改都被认为与每个匹配的远程RTPS Reader相关。也就是说,Writer应该尝试将HistoryCache中的所有更改发送到匹配的远程Readers。如何做到这一点是RTPS协议行为模块的主题。

由于以下两个原因,可能无法将更改发送到远程Reader:

  1. 这些更改已被DDS DataWriter从HistoryCache中删除,不再可用。
  2. 这些更改被认为与此Reader无关。

由于多种原因,DDS DataWriter可能决定从HistoryCache中删除更改。如可能需要根据HISTORY QoS设置存储有限数量的更改。或者由于LIFESPAN QoS的配置,数据样本可能已过期。使用严格的可靠通信时,只有在所有读取者都已确认收到更改且DDS DataWriter仍处于活动和存活状态时,才能删除更改。

并非所有更改都可能与每个匹配的远程Reader相关,例如通过TIME_BASED_FILTER QoS或通过使用DDS内容过滤主题进行确定。在这种情况下,必须由每个读取者确定更改是否相关。可能的话在Writer端进行过滤,DDS实现可以优化带宽和/或CPU使用。这是否可行取决于DDS实现是否追踪每个远程读取者的状态以及适用于此Reader的QoS和过滤器。Reader本身将始终过滤。

本文档使用DDS_FILTER(reader,change)表示基于QoS或内容的过滤,这是一种反映过滤依赖于读取者的符号。根据写入者存储的特定读取者信息,DDS_FILTER可能是空的。对于基于内容的过滤,RTPS规范允许在每次更改时发送信息,列出已应用于更改的过滤器以及它传递的过滤器。如果可用,读取者可以使用此信息过滤更改,而无需调用DDS_FILTER。这种方法通过在Writer端过滤样本来节省CPU周期,而不是在每个Reader上过滤。

以下状态图说明了DDS DataWriter如何向HistoryCache添加更改。

在这里插入图片描述
图 8.6 DDS DataWriter向HistoryCache添加更改状态图

表 8.11 DDS DataWriter向HistoryCache添加更改转换表
在这里插入图片描述

8.2.9.1.1. 转换 T1

通过创建DDS DataWriter“the_dds_writer”来触发此转换。

转换在虚拟机中执行以下逻辑动作:

the_rtps_writer = new RTPS::Writer;
the_dds_writer.related_rtps_writer := the_rtps_writer;
8.2.9.1.2. 转换 T2

这种转换是由使用DDS DataWriter“the_dds_writer”写入数据的行为触发的。DataWriter :: write()方法将数据“data”和用于区分不同的数据对象的InstanceHandle_t类型的“handle”作为参数。

转换在虚拟机中执行以下逻辑动作:

the_rtps_writer := the_dds_writer.related_rtps_writer;
a_change := the_rtps_writer.new_change(ALIVE, data, handle);
the_rtps_writer.writer_cache.add_change(a_change);

转换后,以下后置条件成立:

the_rtps_writer.writer_cache.get_seq_num_max() == a_change.sequenceNumber
8.2.9.1.3. 转换 T3

这种转换是由处理先前使用DDS DataWriter“the_dds_writer”写入的数据对象的行为触发的。DataWriter :: dispose()方法将用于区分不同的数据对象的InstanceHandle_t类型的“handle”作为参数。

如果topicKind = = NO_KEY,则此方法无效。

转换在虚拟机中执行以下逻辑动作:

the_rtps_writer := the_dds_writer.related_rtps_writer;
if (the_rtps_writer.topicKind == WITH_KEY) 
{
	a_change := the_rtps_writer.new_change(NOT_ALIVE_DISPOSED, <nil>, handle);
	the_rtps_writer.writer_cache.add_change(a_change);
}

转换后,以下后置条件成立:

if (the_rtps_writer.topicKind  = =  WITH_KEY) then
		the_rtps_writer.writer_cache.get_seq_num_max() == a_change.sequenceNumber

8.2.9.1.4. 转换 T4
这种转换是通过取消注册先前使用DDS DataWriter“the_dds_writer”写入的数据对象的行为触发的。DataWriter :: unregister()方法将用于区分不同的数据对象的InstanceHandle_t类型的“handle”作为参数。

如果topicKind = = NO_KEY,则此方法无效。

转换在虚拟机中执行以下逻辑动作:

the_rtps_writer := the_dds_writer.related_rtps_writer;
if (the_rtps_writer.topicKind == WITH_KEY) 
{
	a_change := the_rtps_writer.new_change(NOT_ALIVE_UNREGISTERED,<nil>, handle);
	the_rtps_writer.writer_cache.add_change(a_change);
}

转换后,以下后置条件成立:

if (the_rtps_writer.topicKind = = WITH_KEY) then
		the_rtps_writer.writer_cache.get_seq_num_max() == a_change.sequenceNumber
8.2.9.1.5. 转换 T5

这种转换是由DDS DataWriter“the_dds_writer”的析构引发的。

转换在虚拟机中执行以下逻辑动作:

delete the_dds_writer.related_rtps_writer;

译文连载

RTPS规范-上一篇:实时发布订阅协议(RTPS)DDS互操作网络协议规范-中文翻译_004
RTPS规范-下一篇:实时发布订阅协议(RTPS)DDS互操作网络协议规范-中文翻译_006
DDS规范-译文连载:DDS (Data Distribution Service) 数据分发服务-规范中文翻译_001

相关链接

DDS科普:一文读懂DDS(数据分发服务)
DDS定义:什么是DDS?
产品介绍:BLUE DCS分布式数据连接解决方案
产品试用: 海蓝云平台-Blue DCS
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值