RTPS协议之Messages Module

目录

  • Messages Module
    • Type定义
    • RTPS消息结构
      • RTPS消息头
      • 子消息结构
    • RTPS消息接收者
    • SubmessageElements
    • RTPS Header
    • RTPS Submessages

Messages Module

RTPS Writer和RTPS Reader之间的交换数据的消息。

Type定义

TypePurpose
ProtocolId_t
SubmessageFlagsub msg flag
SubmessageKind枚举值用于标识是什么类型的sub msg,有这些:DATA, GAP, HEARTBEAT, ACKNACK, PAD, INFO_TS, INFO_REPLY, INFO_DST, INFO_SRC, DATA_FRAG, NACK_FRAG, HEARTBEAT_FRAG
Time_t时间戳,至少到ns,TIME_ZERO,TIME_INVALID TIME_INFINITE
Count_t保存递增的计数,用于识别重复消息
ParameterId_t用于在参数列表中唯一标识参数的类型。主要在Discovery中广泛使用,主要用于定义QoS参数。一些被保留用于协议定义的参数,另一些可以用于供应商定义的参数。
FragmentNumber_t用于保存帧序号?
GroupDigest_t用于保存唯一标识属于同一参与者的一组实体的摘要值的类型。

RTPS消息结构

RTPS message structure

RTPS协议发送的每一条消息都有一个固定的长度。这个长度不是由RTPS协议明确发送的,而是作为传输底层的一部分,RTPS消息是通过这种方式发送的。在面向数据包的传输(例如UDP/IP)的情况下,消息的长度已经由传输头部提供。面向流的传输(例如TCP)则需要在消息前面插入长度,以便识别RTPS消息的边界

RTPS消息头

RTPS Header
消息头标识这条消息属于RTPS协议,标识了协议版本和供应商,具体包含以下内容:

字段类型含义抓包中对应的字段
protocolProtocolId_t表示这个rtps消息Magic: RTPS
versionProtocolVersion_t标识rtps协议的版本号Protocol version: 2.2
vendorIdVendorId_tRTPS协议实现的供应商标识vendorID: 01.15(eProsima - Fast-RTPS)
guidPrefixGuidPrefix_tGUIDs中使用的默认的prefix?TODO要确认
  • guidPrefix定义了一个默认前缀,可以用来重构消息中包含的子消息的全局唯一标识符(GUIDs)。guidPrefix允许子消息只包含GUID的EntityId部分,因此可以避免在每个GUID上重复相同的前缀,从而节省空间。

子消息结构

每个RTPS消息都是由一个或多个子消息组成。
Structure of the RTPS Message Header
所有的子消息都是由 一个SubmessageHeader+0个或多个消息元素 组成。子消息头部用于标识子消息的种类和该子消息内的可选元素。

子消息头结构:

字段类型含义
submessageIdSubmessageKind标识了Submessage.的消息类型,消息类型在下面列出
flagsSubmessageFlag[8]标识用于编码子消息的字节顺序,子消息中的可选元素的存在,并可能修改子消息的解释。有8个可能的标志。第一个标志(索引0)标识用于编码子消息的字节顺序。其余的标志会根据子消息的种类有不同的解释,并分别为每个子消息进行描述。
submessageLengthushort表示子消息的长度。由于RTPS消息由子消息的连结组成,所以子消息的长度可用于跳转到下一个子消息。

RTPS消息接收者

一个消息中的子消息的解释和含义可能取决于该消息中之前的子消息。因此,消息的接收者必须维护同一消息中先前反序列化的子消息的状态。这种状态被建模为每次处理新消息时复位的RTPS接收器的状态,并为每个子消息的解释提供上下文。
 RTPS Receiver

对每一条新的message,Receiver的状态被重置和初始化

name初始值
sourceVersionPROTOCOLVERSION
sourceVendorIdVENDORID_UNKNOWN
sourceGuidPrefixGUIDPREFIX_UNKNOWN
destGuidPrefix
UnicastReplyLocatorList
multicastReplyLocatorList
haveTimestampFalse
timestampTIME_INVALID
messageLength

Message Receiver必须遵守以下规则:

  1. 如果Submessage的消息头不能被读取,则其他消息体无效
  2. submessageLength为下一个Submessage的起始位置,或指示子消息扩展到消息的结束。如果这个字段是无效的,那么这条消息无效。
  3. 具有未知SubmessageId的子消息必须被忽略,并且必须要解析继续下一个子消息。也就是说,不在SubmessageKind范围内的消息id必须要被忽略。未知vendorId的供应商的SubmessageIds也必须被忽略,并且必须解析继续到下一个子消息。
  4. Submessage的接收者应忽略位置的flag
  5. 一个有效的submessageLength字段必须要被用于发小下一条Submessage, 即使Submessage有明确的id
  6. 一个已知但无效的子消息会使消息的其余部分失效。
    子消息何时被视为无效:
  • 它可以改变接收者的状态;这个状态影响了消息中后续子消息的解释方式。8.3.7节讨论了每个子消息如何改变状态。在此协议版本中,只有标题和子消息InfoSource,InfoReply,InfoDestination和InfoTimestamp改变了接收者的状态。
  • 它可以影响目标Endpoint的行为,这适用于基本的RTPS消息:Data,DataFrag,HeartBeat,AckNack,Gap, HeartbeatFrag, NackFrag.

SubmessageElements

每个RTPS消息包含可变数量的RTPS子消息。每个RTPS子消息反过来又是由一组预定义的原子构建块构成,这些构建块被称为子消息元素。RTPS 2.4定义了以下子消息元素:GuidPrefix, EntityId, SequenceNumber, SequenceNumberSet, FragmentNumber, FragmentNumberSet, VendorId, ProtocolVersion, LocatorList, Timestamp, Count, SerializedData, ParameterList和GroupDigest。
RTPS SubmessageElements

  1. GuidPrefix和EntityId
  2. VendorId
  3. ProtocolVersion
  4. SequenceNumber
  5. SequenceNumberSet
  6. FragmentNumber
  7. FragmentNumberSet
  8. Timestamp
  9. ParameterList
  10. Count
  11. LocatorList
  12. SerializedData
  13. SerializedDataFragment
  14. GroupDigest

RTPS Header

每一条 RTPS Message必须以一个 Header开头.

RTPS Submessages

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/663159.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【c++】继承学习(三)菱形继承的挑战与虚拟继承的策略

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章来讲解继承的第三部分,有关多继承和菱形继承的内容 目录 1.菱形继承2.虚拟继承3.虚拟继承解决数据冗余和二义性的原理4.继承的总结和反思继承…

外汇天眼:PayPoint投资100万英镑,深化与Aperidata开放银行合作

PayPoint今日宣布对Aperidata Ltd进行100万英镑的投资,Aperidata是一家创新的消费者和商业信用报告及开放银行平台。 此交易将使PayPoint集团在两家公司之间现有的商业合作基础上更进一步,为包括政府、地方当局、慈善机构和住房协会在内的多个领域的客户…

Java 五种内部类演示及底层原理详解

内部类 什么是内部类 在A类的内部定义B类,B类就被称为内部类 发动机类单独存在没有意义 发动机为独立个体 可以在外部其他类里创建内部类的对象去调用方法 类的五大成员 属性 方法 构造方法 代码块 内部类 内部类的访问特点 内部类可以直接访问外部类的成员&a…

海外代理IP适用业务是哪些?

在当今数字化时代,互联网已经成为商业和个人生活不可或缺的一部分。IP代理作为出海业务的神器之一,备受跨境出海业务人员关注。IPFoxy动态、静态纯净代理IP也根据业务需求的不同,分为静态住宅、动态住宅、静态IPv4、静态IPv6四种类型代理。那…

基于Spring Cloud微服务架构的Java CRM客户关系管理系统源码

在当今竞争激烈的市场环境中,企业要想保持持续的增长和稳定的客户基础,高效管理客户关系显得尤为重要。CRM(客户关系管理)系统作为一种先进的管理工具,正逐渐成为企业不可或缺的一部分。该系统通过集成销售、市场、服务…

Tensorflow 2.0 安装过程

第一步:进入国内清华软件网站 anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirroranaconda 使用帮助 | 镜像站使用帮助 | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务&…

WL-3500螺栓卧式拉力试验机

一、产品概述 微机控制卧式拉力试验机适用于额定试验力下的拉伸试验及恒负荷拉伸,主要用于高强螺栓等制品或材料的拉伸强度测试。 二、性能特点 本机采用计算机控制,具有力、位移自动跟踪测量加荷速率任意设定、试验力量程自动切换恒负荷拉伸负荷保持…

linux系统的逻辑卷管理及磁盘配额

目录 逻辑卷管理 磁盘配额 逻辑卷管理 lvm:logical volume manager 逻辑卷管理 linux系统下对硬盘分区的一种管理机制。 lvm机制特别适合于管理大存储设备,可以动态的对硬盘进行扩容。 逻辑上的磁盘,概念上的磁盘&a…

linux部署运维1——centos7.9离线安装部署web或java项目所需的依赖环境,包括mysql8.0,nginx1.20,redis5.0等工具

在实际项目部署运维过程中,如果是云服务器,基本安装项目所需的依赖环境都是通过yum联网拉取网络资源实现自动化安装的;但是对于一些特殊场合,在没有外部网络的情况下,就无法使用yum命令联网操作,只能通过编…

Redhat7.4部署MySQL-5.7.17搭建双主互为主从

一、准备工作 需要先准备已经搭建好的两台数据库,并且保证服务器之间网络是通的,3306端口可以相互访问。 二、修改两台数据库my.cnf 配置文件,将下列内容添加进去,放在 [mysqld] 下 我们暂定两台服务器为A服务和B服务&#xff…

在XP/Vista系统下使用Node.js的babel-cli命令行工具转码ES6语法的js文件,让IE8浏览器也能运行

在XP系统下IE浏览器最高只能装到IE8,在Vista系统下最高只能装到IE9。 2015年以后,JavaScript新增了很多语法,比如class、extends,还有let和const等等,这些语法都是XP下的终端浏览器IE8所不支持的。要想让使用了这些新式…

Linux安装教程 (centOS-7)

目录 安装 修改主机名 配置静态IP 镜像下载地址 https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso VMware Workstation Pro下载 VMware Workstation Pro各版本下载(2024.5.5之后)(Windows与Linux安装包不限…

关于 CSS 的那些事儿,我竟然都不知道

CSS 是一种美丽且复杂的技术,我们每天在工作中都会用到。然而,包括我在内的许多开发者都忽略了它的一些重要方面。 这很明显,因为在互联网上很难找到关于 CSS 的新知识或高级内容。大多数内容创作者只写一些热门话题,比如新语言、…

vbs执行报错vbs没有文件拓展,双击无法打开

如果看不到文件扩展名需要设置: 无法双击打开vbs 一般为注册表问题 解决办法 将下方代码保存为xxx.reg Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.VBS] "VBSFile" [HKEY_CLASSES_ROOT.VBS\PersistentHandler] "{5e941d80-bf96-…

【教学类-59-01】专注力视觉训练01(圆点百数图)

背景需求: 视觉训练的神奇效果,让你的宝贝成为焦点 - 小红书魔法视觉追踪-视觉训练—— 🔍视觉训练🔍 🔹想要提高宝宝的专注力,视觉训练是个绝佳方法! 🔹让宝宝仔细观察数字的路线&a…

展锐UIS7885+android13代码目录

文章目录 bsp目录1. bootloader1.1 chipram1.2 lk1.1 平台启动初始化代码目录1.2 命令实现、下载和启动等相关代码 2. kernel目录(如kernel5.4)2.1 设备树目录2.2 内核配置文件 bsp目录 1. bootloader 1.1 chipram 说明目录展锐芯片arch\arm\include arch\arm\cpu\armv8驱动…

Vue 实例

一、页面效果图 二、代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><script src"../vue.js" type"text/javascript"></script><title>vue 实例</title></head><body>&l…

与AI对话 --如何更好的使用AI工具

文章目录 与AI对话 --如何更好的使用AI工具1、认识AI工具&#xff1a;2、对话原则&#xff1a;3、提问步骤&#xff1a;4、AI可以学习什么&#xff1f;5、提问技巧&#xff1a;1、提出假设性问题:2、&#xff08;鼓励引导式提问&#xff09;跨学科思考:举个例子&#xff1a; 3、…

哪里能下载到合适的衣柜3D模型素材?

室内设计师在进行家居设计时&#xff0c;衣柜3D模型素材是非常重要的工具。那么&#xff0c;哪里能下载到合适的衣柜3D模型素材呢? 一、建e网&#xff1a; ①建e网是一个专注于3D模型素材分享的平台&#xff0c;上面可以找到大量的衣柜3D模型。 ②该网站提供的模型种类丰富&am…

证件照换底色推荐什么软件好?这五个可以随意换证件照底色

证件照&#xff0c;无论是考证还是工作&#xff0c;都是我们生活中不可或缺的一部分。 一张高质量的证件照&#xff0c;不仅能够展示我们专业的形象&#xff0c;还能在众多候选人中脱颖而出。像这种时候&#xff0c;我们就可以使用证件照制作软件啦&#xff01;无论是考证、护…