FastRTPS学习笔记(1):RTPS概述


一、RTPS简介

实时发布订阅协议(Real Time Publish Subscribe Protocol,RTPS)是一种协议,用于在单播和多播中通过UDP等不可靠传输进行best effort和reliable的发布-订阅通信。RTPS已被OMG(对象管理组)标准化为数据分发服务(DDS)实现的互操作性协议,该标准广泛用于航空航天和国防部门的实时应用。除了嵌入在不同DDS实现中的RTPS实现外,还有独立的轻量级RTPS实现。其中eProsima Fast RTPS在性能、特性和对最新版本RTPS标准(RTPS 2.2)的遵从性方面处于领先地位。


二、RTPS优点

RTPS协议的主要特点是:

  • 性能和服务质量(QoS)属性,为使用标准IP网络的实时应用程序提供best-effortreliable的发布-订阅通信。
  • 容错,可以创建没有单点故障的网络。
  • 可扩展性,可以通过协议的扩展和新服务的增强实现向后兼容性和互操作性。
  • 即插即用连接,新的应用程序和服务允许通过应用程序随时加入和离开网络来实现自动的、无需配置的发现。
  • 可配置性,可以平衡每个数据交付事务的可靠性和及时性需求。
  • 模块化,允许简单的设备实现协议的子集,并且仍然参与发布-订阅网络。
  • 可伸缩性,使系统能够扩展到非常大的发布-订阅网络。
  • 类型安全,防止应用程序编程错误影响发布-订阅网络中的远程节点的操作。

三、RTPS架构

RTPS协议基于四个不同的模块,控制不同DDS应用程序之间的信息交换。

  • 结构模块:定义通信端点并将它们映射到对应的DDS。
  • 消息模块:定义了这些端点可以交换哪些消息以及如何构建这些消息。
  • 行为模块:定义了一组合法交互,以及它们如何影响每个端点。
  • 发现模块:定义了一组允许自动发现的内置端点。

3.1 结构模块

由于RTPS是设计用来实现DDS应用程序的协议,所以每个DDS概念或实体都自然地映射到一个RTPS实体。所有RTPS实体都与一个RTPS域相关联,该域表示一个包含一组Participants的单独通信平面。每个RTPS参与者可以包含两种不同类型的多个本地端点:WritersReaders。这两种端点通过发送RTPS消息在RTPS网络中交换信息。Writers将本地可用的信息发送给Readers,Readers反过来可以请求或确认数据。

RTPS结构模块
RTPS端点(Writers和Readers)及其对应的DDS实体之间的接口是HistoryCache。端点之间交换的信息,通常存储在CacheChange中。例如,每个写操作都会在Writers History中引入一个CacheChange。然后RTPS Writers向所有匹配的Readers发送一条RTPS消息。在收到消息之后,RTPS Readers将CacheChange添加到相应的HistoryCache中,并通知DDS实体有新的数据可用。

3.2 消息模块

信息模块定义RTPS Writers和Readers之间原子信息交换的内容。RTPS消息由一个报头和一些子消息组成。报头将消息标识为RTPS协议的一部分,以及正在使用的协议版本和发送消息的供应商。它还标识发送消息的参与者。
每个子消息由子消息头和一系列子消息元素组成。选择此结构是为了允许扩展子消息的词汇和每个子消息的组成,同时保持向后兼容性。子消息头包含子消息id,该id标识子消息的类型、子消息长度(以字节为单位)和子消息标志。总计12种不同子消息,有关所有子消息的完整描述、组成和解释,参阅OMG RTPS规范文档。其中3个最重要的子消息为:

  • DATA:该子消息从Writer发送给Reader,其中包含关于对属于Writer的数据对象的更改信息。此更改可以是值(正在添加新信息),也可以是生命周期(以前发送的数据不再有效)。
  • HEARTBEAT:该子消息从Writer发送到Reader,传递此时Writer可用的CacheChanges。
  • ACKNACK:该子消息从Reader发送到Writer,并允许Reader通知Writer它已经接收到哪些更改,哪些更改仍然缺失。它可以用来positive和negative的ACK。

3.3 行为模块

行为模块描述在Writer和Reader之间可能发生的有效消息交换。它还根据每条消息定义Writer和Reader状态的更改。在OMG RTPS规范文档中可以找到完整的规则集。设置这些规则是为了确保不同实现之间的互操作性。

3.4 发现模块

发现模块描述了允许Participants获取关于Domain中所有其他Participants和Endpoints的存在和属性信息的协议。这种信息交换称为元数据交换。一旦发现远程端点,就可以相应地配置本地端点来建立通信。发现协议分为两层:参与者发现协议(Participant Discovery Protocol,PDP)和端点发现协议(Endpoint Discovery Protocol,EDP)。PDP说明了参与者如何发现彼此。发现后,参与者使用EDP交换关于其端点的信息。不同的供应商可能实现多个发现协议,但是为了确保互操作性,所有供应商必须实现一个PDP和一个EDP。这些发现协议被称为“Simple”(简单PDP和简单EDP)适合大多数应用程序。
发现模块的完整描述可以在规范文档中找到。然而,这种发现机制最重要的特性是,它允许简单的即插即用连接,而不需要用户进行任何配置。


四、参考来源

【1】https://www.eprosima.com/index.php/resources-all/rtps

  • 5
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值