当前位置: 首页 > news >正文

深入浅出 Fast DDS网络协议(入门篇)

如果你是机器人领域的学者,那一定听说过ROS1和ROS2,但这两个有什么区别呢?
ROS1作为一个通信中间件,在两两节点建立TCP/UDP连接之前,通过发布者和订阅者通过xmlRPC和master进行数据交换和查询,待匹配到相同的需求(topic)时,Master向订阅者提供发布者的地址和信息,然后两者再通过xmlRPC进行建立TCP/UDP的连接。
但是,在ROS1在工业领域并不能满足实时、安全、认证、可靠。所以在ROS2中引入了Fast
DDS网络协议。我们知道其实ROS最重要的便是通信架构方式,也就是说是如何对两两节点(进程)进行数据交互的。
我们就一起来了解一下Fast DDS网络协议。

在汽车电子领域中,通信中间件网络协议当前最火热的无非就两种:SOME/IP、DDS,而Fast DDS只是众多DDS网络协议开源的标准实现之一。所以我们先来讲解一下DDS是什么?

文章目录

  • 1. 协议和模型
    • 1.1 What is DDS?
    • 1.2 The DCPS conceptual model
  • 2. 协议和模型实现
    • 2.1 What is Fast DDS?
    • 2.2 Real-Time Publish Subscribe (RTPS)

1. 协议和模型

1.1 What is DDS?

DDS采用的通信模式是多对多的单向数据交流,由产生数据的应用发布到消耗数据的应用本地缓存中。信息流是由数据交换的实体之间建立的质量服务Quality of Service(QoS)来管理的。

作为一个以数据为中心的模型,DDS建立在一个所有感兴趣的应用程序都可以访问“全局数据空间”的概念之上。想要贡献数据的应用程序声明成发布者,想要消耗数据的应用程序声明为订阅者。每次发布者发布新的数据时,中间件会通知所有对该数据感兴趣的订阅者。

数据通信发生在多个域之间,也就是说将所有需要相关通信的分布式应用程序孤立抽象平面中,只有属于同一域的实体才能进行交互,订阅数据的实体和发布数据的实体之间的匹配由主题(topic)来中介。主题是明确的标识符,它将域中唯一的名称与数据类型和一组附加的数据特定QoS相关联。

DDS实体被建模为类或类型化接口,后者意味着更有效的资源处理,因为在执行前了解数据类型允许提前分配内存,而不是动态分配。

DDS是一个以**Data-Centric Publish Subscribe (DCPS)**数据为中心的发布、订阅模型,在此模型中,有三个实体:

  1. publication entities(发布实体):定义消息生成对象及相关属性
  2. ubscription entities(订阅实体):定义消息消费对象及相关属性
  3. configuration entities(配置实体): 定义传输相关的属性如 Topic 类型,通信的 QoS(服务质量)

DDS 使用 QoS 来定义 DDS 实体的行为特征。 QoS 由单独的 QoS 策略(源自 QoSPolicy 的类型的对象)组成。

1.2 The DCPS conceptual model

在DCPS模型中,为通信应用程序系统的开发定义了四个基本元素。

  • Publisher:负责创建和配置其实现的 DataWriters 的 DCPS 实体。 DataWriter 是负责实际发布消息的实体。每个消息都将有一个指定的主题,在该主题下发布消息。
  • Subscriber:负责接收在其订阅的主题下发布的数据。它为一个或多个DataReader对象提供服务,这些对象负责将新数据的可用性传达给应用程序。
  • Topic:它是绑定发布和订阅的实体。它在DDS域中是唯一的。通过TopicDescription,它允许发布和订阅的数据类型保持一致。
  • Domain:这是一个用于链接属于一个或多个应用程序的所有发布者和订阅者的概念,这些应用程序在不同的主题下交换数据。这些参与域的单独应用程序称为DomainParticipant。DDS域由域ID标识。DomainParticipant定义域ID以指定其所属的DDS域。具有不同ID的两个DomainParticipants不知道对方在网络中的存在。因此,可以创建几个通信信道。这适用于涉及多个DDS应用程序的场景,它们各自的DomainParticipants相互通信,但这些应用程序不得干扰。DomainParticipant充当其他DCPS实体的容器,充当发布服务器、订阅服务器和主题实体的工厂,并在域中提供管理服务。
    如下图所示:
    在这里插入图片描述

2. 协议和模型实现

2.1 What is Fast DDS?

Fast DDS就是DDS协议的开源实现,具体由ePromise发布和维护。

2.2 Real-Time Publish Subscribe (RTPS)

为支持DDS应用程序而开发的实时发布-订阅(RTPS)协议是一种通过UDP/IP等尽力传输的发布-订阅通信中间件。此外,Fast DDS还提供了对TCP和共享内存(SHM)传输的支持。

它被设计为同时支持单播和多播通信。

在继承自DDS的RTPS的顶部,可以找到Domain,它定义了一个单独的通信平面。多个域可以同时独立共存。域包含任意数量的RTPSP参与者,即能够发送和接收数据的元素。为此,RTPSP参与者使用他们的终点:

  • RTPSWriter: 能够发送数据的 EndPoint 端点。

  • RTPSReader: 能够接收数据的 EndPoint 端点。

在这里插入图片描述
通信围绕主题展开,主题定义并标记正在交换的数据。这些主题不属于特定的参与者。参与者通过RTPS编写器对主题下发布的数据进行更改,并通过RTPS阅读器接收与其订阅的主题相关联的数据。通信单元被称为Change,它表示在Topic下写入的数据的更新。RTPS阅读器/RTPS写入程序在其历史记录中注册这些更改,历史记录是一种数据结构,用作最近更改的缓存。

相关文章:

  • 【简陋Web应用2】人脸检测——基于Flask和PaddleHub
  • 基于springboot实现数码论坛系统设计与实现演示【附项目源码+论文说明】
  • 深入理解NLP中的文本匹配任务
  • 关于uview2.0计步器最大值赋值问题
  • Spring cloud 限流的多种方式
  • 面试时被问:为什么裁员只裁你,不裁别人,该怎么回答?
  • openEuler21.10部署nextcloud15,mariadb版本5.5.68,php版本7.0.33
  • 用户界面图形和各种插图网站 UI Graphics
  • 五分钟学会Nacos
  • 从零开始的AI绘画:MidJourney带你掌握AI绘画的基础和高级技巧
  • 封装,继承
  • 【前端架构】Angular,React,Vue那个是2023的最佳选择?
  • 特斯拉的操作系统是用什么语言编写的?
  • 自主HttpServer实现(C++实战项目)
  • 【数据库】什么是 PostgreSQL?开源数据库系统
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【Linux系统编程】快速查找errno错误码信息
  •  D - 粉碎叛乱F - 其他起义
  • Electron入门介绍
  • ES6语法详解(一)
  • extract-text-webpack-plugin用法
  • js操作时间(持续更新)
  • SpriteKit 技巧之添加背景图片
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 初识MongoDB分片
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 京东美团研发面经
  • 区块链将重新定义世界
  • 数组大概知多少
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • # C++之functional库用法整理
  • ###项目技术发展史
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $.ajax,axios,fetch三种ajax请求的区别
  • (¥1011)-(一千零一拾一元整)输出
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (五)网络优化与超参数选择--九五小庞
  • (转) Face-Resources
  • (转) 深度模型优化性能 调参
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)Google的Objective-C编码规范
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转)重识new
  • **CI中自动类加载的用法总结
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)