其他笔记 - 关于Fast DDS 和rtps的介绍

2023-05-16

简述

分布式实时数据分发服务中间件协议Data Distribution Service(DDS)是OMG于2003年发布并于2007年修订的开放标准。该标准定义了用于分布式系统的【发布-订阅】通信中间件的API规范。

使用DDS的分布式应用程序可以发布或订阅信息的“主题”,并使用一组丰富的服务质量参数来设置通信的不同方面(可靠性,持久性,冗余性,寿命,传输设置,资源…) 。

DDS模型:

抽象模型非常容易理解:如是我们要在分布式系统中共享的数据结构的定义,以及引用该信息的名称。例如,我们可以定义一个名为“车辆位置”的主题,其结构可以是x和y的几个浮点数,也可以是车辆ID的整数。

主题存在于DDS称为“全局数据空间”的抽象空间中。实际上,这个抽象概念接近于实际的实现,因为在最常用的DDS实现中,没有中间代理,例如JMS,ZeroC ICE Storm或其他发布/订阅技术。

DDS模型:全球数据空间
用于创建发布者和订阅者的DDS工厂称为DDS参与者。通常,应用程序创建一个参与者,发布者发布数据,和/或订阅者订阅数据。实际上,DDS定义了第三层,即数据写入器和数据读取器,而这些实体实际上负责从全局数据空间进行写入/读取,但是为了简单起见,在本文中,我们仅讨论发行者和订阅者。

远程DDS参与者的发现是自动的,在默认行为下,每个参与者都会发送多播声明(或将单播消息发送到预定义的对等列表),并且DDS会维护一个远程目标列表。

该模型在几个方面解耦:

  • 空间:作为自动发现,分布式系统独立于网络拓扑。如果用户更改了网络拓扑,则无需在应用程序中进行任何更改。
  • 时间:发布者可以完全异步发布,而无需测试订阅者的存在。如果将服务的持久性质量参数设置为持久性,则DDS会将数据发送给后加入者。
  • 冗余:DDS允许非常轻松地实现冗余。多个发布者可以在同一个主题上发布,共享该主题,或者可以设置DDS将该主题设置为独占,并且该主题的所有者将是“强度”参数最高的发布者。如果所有者失败,那么以下更强大的发布者将成为所有者。故障转移和接管行为都可以实现。对于订户方,任何数量的订户都可以订阅同一主题。
  • 平台和语言:DDS在许多平台(Windows,Linux,Solaris,Aix,Mac
    OS,Integrity,LynxOS,QNX,VxWorks …)和语言(C,C,Java,C#,Ada …)中实现。
    )。您的分布式系统可能非常异构,开发人员不必担心远程节点的平台/语言。
  • 实现:DDS规范集包括一个用于DDS互操作性协议的规范,称为RTPS(实时发布订阅协议)。分布式系统中的不同应用程序可以使用不同的DDS实现,并且它们将互操作。

DDS体系结构:

DDS公开了简单的模块化设计。在最常用的实现中,DDS基础结构只是链接到应用程序的库(静态或动态)。不需要安装任何服务或守护程序。

互操作性协议位于OSI模型中的传输层之上,因此可以在任何基础传输上实现。几种DDS实现公开了可插入的传输机制,并提供了典型的传输选项,例如UDP,TCP和共享内存,并允许添加用户传输。
DDS架构

DDS的优势:

发布/订阅模型:简单且分离。它允许您对分布式系统进行更整洁的设计。
性能:与请求/回复模式相比,在发布/订阅模式下,延迟时间较短,吞吐量更高。在请求/答复模型中,请求者应拉远程参与者以获取数据,但在发布/订阅模型中,发布者只要有可用数据,便直接将数据发送给订阅者。 已经计划了API,对象模型和QoS参数以实现实时性能,并且通常会对不同的实现进行真正的优化。
自动发现远程参与者:此机制是DDS的关键功能之一。通信是匿名的并且是分离的,并且开发人员不必担心远程参与者的本地化。
丰富的Qos参数集,允许调整通信的各个方面:可靠性,持久性,冗余,寿命,传输设置,资源…
互操作性协议(RTPS):该协议几乎可以在任何传输上实现,从而允许在UDP,TCP,共享内存和用户传输中使用DDS,并在不同DDS实现之间实现真正的互操作性。
可用的实现:
DDS的商业和开源实现均可用。最著名的是 eProsima Fast DDS (以前称为Fast RTPS),RTI DDS,OpenSplice DDS,CoreDx和OpenDDS。

RTPS简介

什么是RTPS?

RTPS(实时发布订阅协议)是一种协议,用于在单播和多播中的不可靠传输(例如UDP )上实现最大努力和可靠的发布-订阅通信。

OPS (对象管理组)已将RTPS标准化 为数据分发服务(DDS) 实施的互操作性协议,该协议已 广泛用于航空航天和国防领域的实时应用程序。

除了嵌入在不同DDS实现中的RTPS实现之外,还有独立的轻量级RTPS实现,eProsima Fast RTPS 在性能,功能和对最新版本的RTPS标准(RTPS 2.2)的坚持方面均处于领先地位。

RTPS的优势:

RTPS协议的主要功能是:

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

RTPS架构:
RTPS有线协议基于四个不同的模块,这些模块控制不同DDS应用程序之间的信息交换。

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

每个模块及其组成部分的简要说明如下:

  • 结构模块
    由于RTPS是旨在实现DDS应用程序的有线协议,因此每个DDS概念或实体自然都映射到RTPS实体。所有RTPS实体都与一个RTPS域相关联,该域表示一个包含一组参与者的单独通信平面。每个RTPS参与者都可以包含两种不同类型的多个本地端点: Writer 和 Readers。这两个端点通过发送RTPS消息在RTPS网络中交换信息。编写器将本地可用的信息发送给读取器,而后者又可以请求或确认数据。

    RTPS端点(写入器 和 读取器)及其相应的DDS实体之间的接口是 HistoryCache。端点之间交换的信息通常存储在CacheChange中。例如,每个写操作都会在Writer History中引入CacheChange。然后,RTPS编写器将RTPS消息发送给所有匹配的阅读器。收到后,RTPS读取器将CacheChange添加到其相应的HistoryCache并通知DDS实体新数据可用。

  • 消息模块
    消息模块定义RTPS编写器和读取器之间原子信息交换的内容。RTPS消息由标题和后面的许多子消息组成。标头将消息标识为RTPS协议的一部分,以及所使用协议的版本和发送消息的供应商。它还标识正在发送消息的参与者。

    每个Submessage由一个Submessage标头和一系列Submessage元素组成。选择此结构是为了使子消息的词汇表和每个子消息的组成得以扩展,同时保持向后兼容性。子消息标题包含标识子消息类型,子消息长度(以字节为单位)和子消息标记的子消息ID。有十二种不同的子消息。有关所有消息,其组成和解释的完整说明,请查阅OMG RTPS规范文档。三个最重要的消息是:

    数据: 此子消息从写入器发送到读取器,其中包含有关更改属于写入器的数据对象的信息。此更改可以是值(正在添加新信息),也可以是生命周期(先前发送的数据不再有效)。

    HEARTBEAT: 此子消息从Writer发送到Reader,以传达Writer目前可用的CacheChanges。

    确认: 此子消息从阅读器发送到编写器,并允许阅读器将其已收到的更改和仍遗漏的更改通知编写器。它可以用来做肯定和否定的确认。

  • 行为模块
    该模块描述了在写方和读方之间可能发生的有效消息交换。它还定义了Writer和Reader的状态更改,具体取决于每个消息。可以在OMG RTPS规范文档中找到全套规则。设置这些规则是为了确保不同实现之间的互操作性。

  • 发现模块
    该模块描述了使参与者能够获取有关域中所有其他参与者和端点的存在和属性的信息的协议。这种信息交换称为超流量。一旦发现远程端点,就可以相应地配置本地端点以建立通信。发现协议分为两层:参与者发现协议(PDP)和端点发现协议(EDP)。PDP规定了参与者如何发现彼此。发现后,参与者使用EDP交换有关其端点的信息。不同的供应商可以实现多种发现协议,但是,为了确保互操作性,所有供应商都必须实现一个PDP和一个EDP。这些发现协议称为“简单”

发现模块的完整描述可以在规范文档中找到。但是,此发现机制的最重要特征是,它允许简单的即插即用连接,而无需用户进行任何配置。

参考

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

其他笔记 - 关于Fast DDS 和rtps的介绍 的相关文章

  • 进程的几种状态

    进程 xff1a 进程 xff08 Process xff09 是计算机中的程序关于某数据集合上的一次运行活动 xff0c 是系统进行资源分配和调度的基本单位 进程状态 xff1a 一个进程的生命周期可以划分为一组状态 xff0c 这些状态
  • 超声波纳米材料乳化分散震动棒设计

    超声波纳米材料乳化分散震动棒利用超声波的超声空化作用来分散团聚的颗粒 它是将所需处理的颗粒悬浮液 xff08 液态 xff09 放入超强声场中 xff0c 用适当的超声振幅和作用时间加以处理 由于粉体颗粒团聚的固有特征 xff0c 对于一些
  • noVNC+VNCserver实现远程访问Docker容器桌面

    一 实验环境 主机 xff1a Ubuntu16 04 目标机 xff1a docker容器 说明 xff1a 在主机Ubuntu16 04中安装docker xff0c 并虚拟出一台Ubuntu容器 xff0c 将该容器作为要远程访问的目
  • 本地项目(vscode)和码云建立连接,及常用git命令

    本地Git和线上关联 xff1a 权限设置 G码云 设置 SSH公钥 公钥管理电脑桌面点击右键进入Git Bash Here对照链接输入指令绑定邮箱 xff1a https gitee com help articles 4181 arti
  • 解决android studio 控制台乱码

    双击shift键 xff0c 输入vmoption xff0c 选择Edit Custom CM Options 如果没有配置过 xff0c 就会弹出窗口问是否创建配置文件 xff0c 点击Create xff0c 输入 Dfile enc
  • 无人机学习笔记

    硬件 首先从硬件开始说起把 xff0c 气压计 陀螺仪 磁力计 xff0c 这三个不用说肯定是必备的 xff0c 后面由于开发的需要还添加了激光测距 xff0c 以及光流 但是在开发过程中遇到了很多问题 xff0c 一个一个来说 气压计 气
  • 解决KEIL中ARM编译器不能编译的问题

    keil编译器出现问题 xff0c 根据提示意思就是ARM编译器选择不对的问题 Target 39 Printf 39 uses ARM Compiler 39 V5 06 update 6 build 750 39 which is no
  • linux 内核中strstr函数 功能

    在内核代码中看到strstr函数 xff1a mode 61 strstr boot command line 34 D 34 应该是一个字符串处理函数 xff0c 使用man命令查看下给出如下解释 xff1a SYNOPSIS inclu
  • KPI异常检测资料汇总

    文章目录 0 综述类1 KPI异常检测1 1 经典模型1 1 1 Donut 基于VAE的周期性无监督KPI异常检测1 1 1 1 论文解读1 1 1 2 源码分析 1 12 MAD 基于GANs的时间序列数据多元异常检测 1 2 行业落地
  • jupyter notebook:使用argparse包存在的问题及解决

    argparse模块 argparse是python用于解析命令行参数和选项的标准模块 导入argparse包 span class hljs keyword import span argparse 遇到的问题 parser 61 arg
  • Qt C++和Java相互调用

    Qt C 43 43 和Java相互调用 1 C 43 43 调用Java Test h span class token keyword class span span class token class name Test span s
  • 单片机HAL库使用HAL_UART_Receive_IT

    前言 由于本人第一次尝试开发单片机 xff0c 要实现的功能是信息转发 xff0c 需要调用HAL库方法 xff0c 中断接受信息转发给FPGA xff0c 这里没有用到DMA方式所以不做赘述 xff0c 特此记录分享希望帮到你们 发送信息
  • VLC播放gstreamer pipeline rtp流

    一 xff1a Gstreamer 下载gstreamer 编译等自行百度 pipeline命令 硬编码输出rtp gst launch 1 0 e videotestsrc 34 video x raw format 61 I420 wi
  • 【unity】Multiple plugins with the same name '...'解决方案

    Multiple plugins with the same name 39 ulua 39 found at 39 Assets Plugins uLua 1 22 x86 64 ulua dll 39 and 39 Assets Plu
  • CMAKE 环境变量

    CMAKE CXX FLAGS CMAKE C FLAGS 在cmake脚本中 xff0c 设置编译选项有两种方式 xff1a 1 1 add compile options命令 add compile options命令添加的编译选项是针
  • Gstreamer常见pipeline命令 - 持续更新中

    解码 xff1a xff08 根据码流类型自适应创建相应解码器 xff09 gst launch 1 0 filesrc location 61 home user DCIM Camera VID 20201001 103749 mov q
  • ubuntu18.04 安装包提示没有可安装候选

    sudo apt get install gcc 正在读取软件包列表 完成 正在分析软件包的依赖关系树 正在读取状态信息 完成 没有可用的软件包 gcc xff0c 但是它被其它的软件包引用了 这可能意味着这个缺失的软件包可能已被废弃 xf
  • D435在ROS下的使用

    本人电脑Ubuntu16 04 Ros 为kinetic D435可以用的ros源码下载地址 https github com intel ros realsense releases一定要仔细查看每一个版本基于的sdk的版本号 D435的
  • 在ros下使用D435出现问题ResourceNotFound: realsense2_camera

    在launch的文件内运行roslaunch rs rgbd launch出现错误 xff1a ResourceNotFound realsense2 camera 或运行 roslaunch realsense2 camera rs rg
  • 在ROS中发布IMU数据

    本文主要是来发布sensor msgs Imu类型的消息 xff0c 其中 xff29 xff2d xff55 的数据为虚拟的 xff11 xff0e 在自己的工作空间中创建ros程序包 这个包依靠std msgs roscpp rospy

随机推荐

  • 控制理论学习资料

    DR CAN 傅里叶分析之掐死教程 xff08 完整版 xff09 更新于2014 06 06
  • 卡尔曼滤波原理二:扩展卡尔曼

    1 理论部分 上一篇介绍了线性卡尔曼滤波器 xff0c 当系统为线性高斯模型时 xff0c 滤波器能给出最优的估计 xff0c 但是实际系统总是存在不同程度的非线性 xff0c 如平方 三角关系 开方等 对于非线性系统 xff0c 可以采用
  • PIXHAWK添加自定义消息存储到SD卡

    四旋翼调试阶段总会出现很多难以预见的现象 xff0c 这时为了找到所出问题的原因 xff0c 就需要获得原始相关数据进行分析 xff0c pixhawk代码提供了记录飞行日志的功能 xff0c 能够将飞行中的重要数据存入SD卡中 xff0c
  • reStructuredText介绍

    文档格式编辑 xff0c 目前主流最强大的要是latex xff0c 但是语法太复杂 xff0c 环境要求也多 xff0c 有的时候也是写文档往往选择markdown xff0c 常常怀疑文档编辑的markdown不是亲生的 xff0c 很
  • ROS2—自定义话题及服务消息类型

    1 source ROS 2 环境 source ROS 2的基础工作空间可以使用下面的命令 xff1a source opt ros foxy setup bash 2 创建一个新的文件夹 执行类似下面的命令 xff1a mkdir p
  • 用VSCode编译运行C++(2022最新教程)以及会遇到的两个问题

    这玩意我弄了一下午 xff0c 发现网上很多教程都过时了 xff0c 现在自己整理一下造福后人 目录 第一步 xff0c 下载和配置mingw64 xff0c 即C C 43 43 编译器GCC的Windows版本 第二步 xff0c 下载
  • 从零开始学USB(一、基础知识1)

    1 什么是USB USB是Universal Serial Bus的缩写 xff0c 中文译为通用串行总线 正如USB的第一个单词表述的那样 xff0c 为了通用 那么我们看一下 xff0c 还有哪些总线不是串行的 xff0c 哪些是不通用
  • 5,树莓派3B+ 使用 Frp 实现内网穿透,公网访问web服务器,设置自动启动,后台运行。 (新人向)

    内网穿透 就是让没有固定公网 ip 的内网的服务器 xff0c 暴露在公网之上 xff0c 从而在外网可以访问 基于这个工具 xff0c 不但可以让外部网络访问内网的web服务器 xff0c 也可以访问我们自建的NAS服务器 xff08 私
  • 关于编程学习上的一些感悟——不忘初心

    序 今天无意中看到以前一起开发过的同学写的技术文章 xff0c 了解到了更多在blog和github以及一些技术交流论坛上面非常活跃 回过头来看看自己 xff0c 好像依然停留在以前的样子 xff0c 似乎与真正在踏实学技术差距好像很大了
  • uORB笔记整理

    其实是对自己看过的文章中讲uORB的部分进行了记录 uORB Micro Object Request Broker 微对象请求代理器 是PX4 Pixhawk系统中非常重要且关键的一个模块 xff0c 它肩负了整个系统的数据传输任务 xf
  • 因子图-gtsam

    闲着写下关于gtsam的内容 更新中
  • 1+11+111+1111+11111+……+11……11(2009个1)的和有多少个1?

    直接贴代码了 lt span style 61 34 font family Courier New 34 gt include lt stdio h gt define SIZE 10 int main void int i int co
  • uC/OS-ii 学习步骤及书籍推荐

    第一步 嵌入式实时操作系统 COS II原理及应用 任哲编著 首选任哲的这本书 我建议先把这本书看一遍 xff0c 弄清楚ucos是怎么回事 xff0c 至于操作系统里面的具体代码实现 xff0c 大概了解就行 xff0c 可以暂且不去细究
  • 利用 Docker 编译 OpenWrt

    原文链接 xff1a 利用 Docker 编译 OpenWrt 五十风的个人博客 由于网络原因编译openwrt时经常下载失败 xff0c 搭建编译环境也很复杂 xff0c 因此想到利用阿里云 Github action等远程构建docke
  • Ubuntu20.04安装ROS Neotic修复依赖问题过程记录

    出现的问题 xff1a 下列软件包有未满足的依赖关系 xff1a ros noetic desktop full 依赖 ros noetic desktop 但是它将不会被安装 依赖 ros noetic perception 但是它将不会
  • ROS-学习笔记-03-(Ubuntu20.04 Noetic运行Web上位机和Nav2d)

    Ubuntu20 04 ROS Noetic 编译运行Nav2d 前言 Ubuntu20 04 Noetic 下的利用rosbridge roslib和ros2d等库实现的网页端Js Widget xff0c 以及运行PR2 Navigat
  • STL的确很好用

    STL的确很好用 以前只听过没用过 用了几次后 xff0c 发现的确方便 现在会自觉不自觉地用到 边用边学吧 map insert 返回 pair multimap insert 返回 iterator 来自 ITPUB博客 xff0c 链
  • ROS-学习笔记-04-( Ubuntu20.04编译ecto,boost1.7环境)

    目录 Ubuntu20 04编译ecto xff08 boost1 7环境 xff09 编译ecto简介1 下载源码安装依赖2 修改源码BuildInstall 参考 Ubuntu20 04编译ecto xff08 boost1 7环境 x
  • Windows设置SSH出错,Permission denied (publickey),Error connecting to agent

    最近在设置nginx配置 xff0c 由于云服务器是密钥登陆的 xff0c 所以有一些问题 前置环境 xff1a 安装Chocolatey 以管理员权限打开PowerShell运行Set ExecutionPolicy AllSigned
  • 其他笔记 - 关于Fast DDS 和rtps的介绍

    简述 分布式实时数据分发服务中间件协议Data Distribution Service xff08 DDS xff09 是OMG于2003年发布并于2007年修订的开放标准 该标准定义了用于分布式系统的 发布 订阅 通信中间件的API规范