fastdds学习之1——开始

发布时间 2023-04-15 19:14:28作者: 星星星星yu

1、开始

这一节定义了DDS和RTPS的概念,也提供了一个逐步讲解的教程,这个教程中讲解了如何开发一个简单的FastDDS发布订阅应用程序。

2、什么是DDS

DDS是一个以数据为中心的通信一些,主要用在分布式软件的通信领域。它定义了应用程序的通信API和通信语义,这使得数据提供者和数据消费者之间通信成为可能。

因为它是一个DCPS(Data-Centric Publish-Subscribe)模型,DDS的实现中定义了3个关键的应用实体:发布实体、订阅实体、配置实体(它定义了消息类型、创建带有QoS的发布者和订阅者,用来确保发布者和订阅者之间正确的数据传输)。

DDS使用QoS开定义DDS实体之间的行为特征,QoS是由单个的QoS策略组成的(QoSPolicy类的子类的对象),这些都在Policy一节进行了详细定义。

2.1 DCPS的概念模型

DCPS(Data-Centric Publish-Subscribe)是DDS(Data Distribution Service)规范中定义的一种数据中心发布-订阅模型。它是DDS的核心和基础,提供了数据分发、数据持久性、数据过滤等重要服务。

DCPS模型由两个层次组成:DLRL(Data Local Reconstruction Layer)和DCPS层。DLRL层是DDS的底层实现,用于数据在节点之间的传输,提供了面向连接的通信机制,并支持流量控制、超时处理等功能。而DCPS层则是DDS的应用层实现,它建立在DLRL层之上,为应用程序提供了一种灵活、高效、可靠的数据发布和订阅机制。

在DCPS模型中,应用程序通过创建和管理DomainParticipant对象来加入DDS域。每个DomainParticipant对象代表一个逻辑域,包含了一组相关的数据类型、主题和订阅者/发布者。发布者将数据写入主题,而订阅者则从主题中读取数据。DCPS层通过一些机制(如数据策略、QoS等)来确保数据的可靠性、安全性和效率。

在DCPS的模型中,为了开发一个通信系统,有以下4个基本的元素。

  • Publisher. 它是负责创建和配置DataWriter的实体。DataWriter是负责实际发布消息的实体。每个DataWriter都被指定了一个Topic,而消息就是通过这个Topic进行发布的。从Publisher这一节会详细讲解。
  • Subscriber. 它是负责接收自己订阅的topic中的消息的实体。它服务于一个或者多个DataReader对象,DataReader对象是负责为应用程序读取数据的。在Subscriber这一节会详细解释。
  • Topic. 它将发布和订阅连接起来,在一个domain中它是唯一的。通过TopicDescription,可以让发布和订阅的数据统一。在topic一节详细讲解。
  • Domain. 这是把所有的publisher和subscriber连接起来的概念,属于一个或者多个应用程序,这些应用程序在多个topic下交换数据。这些处在一个domain中的应用程序被称为DomainParticipant.Domain是被domainid唯一标识的。DomainParticipant通过定义domainId来指定dds域。两个不同的domainparticipant即时在同一个网络中,也是不知道彼此的。因此,多个通信通道都可以被创建。domainparicipant是其他dcps实体的容器,是publisher、subscriber和topc等实体的创建者,而且在domain中提供管理服务。在domain一节进行详细了解。
    这些元素在下图中详细展示:
    image

2、什么是RTPS

RTPS协议开发出来是为了支撑DDS应用程序,它是一个发布订阅通信中间件,构建在尽力交付的运输层UDP/IP之上。而且,FastDDS也支持TCP和共享内存(SHM Shared Memory)运输层。

RTPS既可以支持单播通信,也可以支持多播通信。

在RTPS的上层,可以看到有Domain,这个domain是从dds继承而来的,它定义了一个隔离的通信平面。同一时刻多个domain可以独立存在。一个domain中可以包含任意数量的RTPSParticipant,RTPSParticipant是能够发送和接收数据的元素。为此,RTPSParticipant使用它们的Endpoint:

  • RTPSWriter:发送数据的节点。
  • RTPSReader:接收数据的节点。

一个RTPSParticipant可以包含任意多个writer和reader节点。
image
通信围绕topic进行,topic中定义了数据。topc是不属于任何一个具体的participant的。参与者通过RTPSWriter对主题下发布的数据进行更改,并通过RTPSReader接收与其订阅的主题相关的数据。通信单元称为Change,它表示在Topic下写入的数据的更新。RTPSReader/RTPSWriter在其历史记录History中注册这些更改,历史记录是一种数据结构,用作最近更改的缓存。

在eProsima Fast DDS的默认配置中,当您通过RTPSWriter端点发布更改时,会在幕后执行以下步骤:

  • Change将添加到RTPSWriter的历史缓存中
  • RTPSWriter将更改发送给它知道的任何RTPSReader。
  • 接收到数据后,RTPSReader将使用新的Change更新其历史缓存。

但是,Fast DDS支持多种配置,允许您更改RTPSWriter/RTPSReader的行为。修改RTPS实体的默认配置意味着RTPSWriter和RTPSReader之间的数据交换流发生了变化。此外,通过选择服务质量(QoS)策略,可以以多种方式影响这些历史缓存的管理方式,但通信循环保持不变。您可以继续阅读RTPS层一节,以了解有关快速DDS中RTPS协议实现的更多信息。

转载自:https://www.cnblogs.com/zhangzl419/p/17144706.html