深入浅出 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实体的容器,充当发布服务器、订阅服务器和主题实体的工厂,并在域中提供管理服务。
    如下图所示:
    深入浅出 Fast DDS网络协议(入门篇)_第1张图片

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 端点。

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

你可能感兴趣的:(网络协议,网络协议)