首页 > 其他分享 >fastdds学习之1——开始

fastdds学习之1——开始

时间:2023-04-15 19:23:54浏览次数:51  
标签:DCPS 订阅 DDS 开始 fastdds 通信 学习 RTPS RTPSWriter

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

标签:DCPS,订阅,DDS,开始,fastdds,通信,学习,RTPS,RTPSWriter
From: https://www.cnblogs.com/xingyuchen/p/17321676.html

相关文章

  • Wordpress学习
    WordPress大学-WordPress快速入门篇_哔哩哔哩_bilibili Wordpress教程-Elementor设计与布局_哔哩哔哩_bilibili ......
  • fastdds学习之0——简介
    1、fastdds文档eProsimaFastDDS是DDS(DataDistributionService)协议的一个C++语言实现版本,该协议由ObjectManagementGroup(OMG)组织定义。eProsimaFastDDS库既提供了一个应用编程接口(API),又提供了一种通信协议,使用这种通信协议可以部署以数据为中心的发布者-订阅......
  • Markdown 学习
    Markdown学习 标题操作:井号#加空格加标题名字一个#一级标题,两个#二级标题,最多六个 字体Hello,World!Hello,World!Hello,World!Hello,World!操作:两边两个*,黑体两边一个*,斜体两边三个*,斜体加粗两边两个~,横线删除线 引用狂神说Java操作:大于号>加空......
  • 【学习笔记】动态树 Link Cut Tree
    算法简介动态树(LinkCutTree)简称lct,可以维护动态的联通结构和动态链上信息维护问题,高妙数据结构。算法流程talkischeap,showmethecode.洛谷模板题代码。#include<bits/stdc++.h>usingnamespacestd;inlineintrd(){ intf=1,j=0; charw=getchar(); while(!isdi......
  • 7、后端学习规划:PHP学习 - 学习规划系列文章
          PHP在其阵营中被称为世界上最好的编程语言。笔者在学习了其一些框架后也有一定的经验,当时主要根据其框架进行的开发。对于PHP来说,在编程排行榜上也是有名的存在,现在还有一些网站应用也是用的PHP进行的开发,还是占有一定的席位的。 1、简介;PHP(PHP:Hypert......
  • [深度学习]服务器推送信息到手机
    效果原理微信服务号是可以推送模板类消息到个人账号的,gpu服务器在训练的时候,把重要信息通过post请求发到服务号的服务器,然后以模板消息推送给微信。但只有企业或者个人经营企业才能注册服务号,所以我使用第三方的服务。一个是autoDL的推送,一个是server酱。本来以为不在autoDL机......
  • 6、后端学习规划:Java学习 - 学习规划系列文章
          Java语言在现在的编程语言排行榜上也是前5的存在。经过这么些年的发展,Java的发展没有C#这么大,但是在编程领域,因为有MVC架构,以及Spring框架的支持,以及微服务架构等等,Java这些年也是风生水起,笔者认为Java在Web端倒是非常适合的,特别是企业应用等业务系统方面。 1......
  • 跟姥爷深度学习2 TensorFlow的基本用法
    一、前言前面我们浅用TensorFlow做了个天气预测,虽然效果不咋样,但算是将整个流程跑通了。这一篇我们在之前基础上对TensorFlow的一些参数进行简单介绍,在接口文件的基础上了解各参数的简单含义和用法。二、再次构建模型我们先将之前的冗余代码都删除,做个简单的模型训练和预测。......
  • 阳间数据结构学习笔记
    \[\text{orzlxlsto}\]CodechefDGCD(Weaker)/AcWing246给定一个长度为\(n\)的数列\(A=(a_1,a_2,\dots,a_n)\),支持两种操作:CLRd:将\(a_L,a_{L+1},\dots,a_R\)都加上\(d\)。QLR:查询\(\gcd(a_L,a_{L+1},\dots,a_R)\)。\(1\leqn\leq50......
  • 跟姥爷深度学习1 浅用tensorflow做个天气预测
    一、前言最近人工智能、深度学习又火了,我感觉还是有必要研究一下。三年前浅学了一下原理没深入研究框架,三年后感觉各种框架都成熟了,现成的教程也丰富了,所以我继续边学边写。原教程链接:https://www.bilibili.com/video/BV1CW4y1r7Q7?p=1&vd_source=e8c67158ee12f84a27ae1bb40bb27......