深入浅出 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?

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写入程序在其历史记录中注册这些更改,历史记录是一种数据结构,用作最近更改的缓存。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值