首页 > 其他分享 >fastdds学习之3——库概览

fastdds学习之3——库概览

时间:2023-04-15 21:56:23浏览次数:38  
标签:DomainParticipant DataReader DDS fastdds 实体 概览 Fast 学习 RTPS

Fast DDS(前身为Fast RTPS)是DDS规范的高效高性能实现,DDS规范是一种用于分布式应用软件的以数据为中心的通信中间件(DCPS)。本节回顾Fast DDS的体系结构、操作和关键特性。

1、架构

Fast DDS的架构如下图所示,其中可以看到具有以下不同环境的层模型。

  • Application Layer:使用Fast DDS API在分布式系统中实现通信的用户应用程序。
  • Fast DDS Layer:DDS通信中间件的稳健实现。它允许部署一个或多个DDS域,在这些域中,同一域中的域参与者通过在域主题下发布/订阅来交换消息。
  • RTPS Layer:实时发布订阅(RTPS)协议的实现,以实现与DDS应用程序的互操作性。该层充当传输层的抽象层。
  • Transport Layer:fastDDS可用于各种传输协议,udp、tcp和SHM等。

image

1.1 DDS层

在DDS层中定义了通信的几个关键元素。用户将在其应用程序中创建这些元素,从而合并DDS应用程序元素并创建以数据为中心的通信系统。Fast DDS遵循DDS规范,将通信中涉及的这些元素定义为实体。DDS实体是支持服务质量配置(QoS)并实现侦听器的任何对象。

  • QoS:定义每个实体行为的机制。

  • Listener:向实体通知应用程序执行期间可能发生的事件的机制。

下面列出了DDS实体及其描述和功能。有关每个实体、其QoS及其侦听器的更详细说明,请参阅DDS层部分。

Domain:标识DDS域的正整数。每个DomainParticipant都将分配一个DDS域,以便同一域中的DomainParticipants可以进行通信,并隔离DDS域之间的通信。此值必须由应用程序开发人员在创建DomainParticipant时提供。

  • DomainParticipant:包含其他DDS实体(如发布者、订阅者、主题和多主题)的对象。它可以创建包含在自己中的实体以及实体的配置。

  • Publisher:发布服务器使用DataWriter发布主题下的数据,DataWriter将数据写入传输。它是创建和配置其包含的DataWriter实体的实体,并且可能包含一个或多个DataWriter实体。

  • DataWriter:它是负责发布消息的实体。用户在创建此实体时必须提供一个主题,该主题将是发布数据的主题。发布是通过将数据对象作为更改写入DataWriterHistory来完成的。

  • DataWriterHistory:这是对数据对象的更改列表。当DataWriter继续发布特定主题下的数据时,它实际上会对该数据进行更改。历史记录中记录的正是这一更改。然后将这些更改发送到订阅该特定主题的DataReader。

  • Subscriber:订阅服务器使用DataReader订阅主题,DataReader从传输中读取数据。它是创建和配置其包含的DataReader实体的实体,可以包含一个或多个DataReader实体。

  • DataReader:它是订阅出版物接收主题的实体。创建此实体时,用户必须提供订阅主题。DataReader接收消息作为其HistoryDataReader中的更改。

  • DataReaderHistory:它包含DataReader由于订阅某个主题而接收的数据对象中的更改。

  • Topic:将发布服务器的DataWriter与订阅服务器的DataReader绑定的实体。

1.2 RTPS层

如上所述,Fast DDS中的RTPS协议允许从传输层抽象DDS应用实体。根据上面显示的图表,RTPS层有四个主要实体。

  • RTPSDomain:它是RTPS协议对DDS域的扩展。

  • RTPSParticipant:包含其他RTPS实体的实体。它允许配置和创建包含的实体。

  • RTPSWriter:消息的来源。它读取写入DataWriterHistory中的更改,并将其传输到先前匹配的所有RTPSReader。

  • RTPSReader:消息的接收实体。它将RTPSWriter报告的更改写入DataReaderHistory。

有关每个实体、其属性和侦听器的更详细说明,请参阅RTPS层部分。

1.3 Transport层

Fast DDS支持通过各种传输协议实现应用程序。这些是UDPv4、UDPv6、TCPv4、TCPv6和共享内存传输(SHM)。默认情况下,DomainParticipant实现UDPv4和SHM传输协议。传输层部分详细介绍了所有支持的传输协议的配置。

2、 编程和执行模型

Fast DDS是并发的和基于事件的。以下说明了控制Fast DDS操作的多线程模型以及可能的事件。

2.1 并发和多线程

Fast DDS实现了一个并发多线程系统。每个DomainParticipant都产生一组线程来处理后台任务,如日志记录、消息接收和异步通信。这不会影响您使用库的方式,即Fast DDS API是线程安全的,因此您可以从不同的线程调用同一DomainParticipant上的任何方法。但是,当外部函数访问由库内部运行的线程修改的资源时,必须考虑此多线程实现。这方面的一个例子是实体侦听器回调中修改的资源。以下是Fast DDS多线程调度工作原理的简要概述:

  • Main thread: 有应用程序管理。

  • Event thread: 每个DomainParticipant都拥有其中一个。它处理周期性和触发的时间事件。

  • Asynchronous writer thread: 此线程管理所有DomainParticipant的异步写入。即使对于同步写入程序,某些形式的通信也必须在后台启动。

  • Reception threads: DomainParticipes为每个接收信道生成一个线程,其中信道的概念取决于传输层(例如UDP端口)。

2.2 事件驱动架构

Fast DDS的事件驱动原理是基于回调函数的。当某个事件(如数据到达)发生时,系统会触发相应的回调函数来执行相应的处理逻辑。Fast DDS依赖于Boost ASIO库来实现事件驱动,采用异步I/O机制,使得Fast DDS能够高效地进行数据传输和交换。

标签:DomainParticipant,DataReader,DDS,fastdds,实体,概览,Fast,学习,RTPS
From: https://www.cnblogs.com/xingyuchen/p/17321998.html

相关文章

  • 使用 TensorFlow 构建机器学习项目:1~5
    原文:BuildingMachineLearningProjectswithTensorFlow协议:CCBY-NC-SA4.0译者:飞龙本文来自【ApacheCN深度学习译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。不要担心自己的形象,只关心如何实现目标。——《原则》,生活原则2.3.c一、探索和转换数据TensorFlow是......
  • 使用 TensorFlow 构建机器学习项目:6~10
    原文:BuildingMachineLearningProjectswithTensorFlow协议:CCBY-NC-SA4.0译者:飞龙本文来自【ApacheCN深度学习译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。不要担心自己的形象,只关心如何实现目标。——《原则》,生活原则2.3.c六、卷积神经网络卷积神经网络是当......
  • CSS学习7()
    1.CSS三角1.普通三角制作<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>CSS三角制作</title><style>.box1{width:0;height:0;......
  • 【vim学习第一天记录】
    vim快捷操作复合命令等效的长命令Cc$sclS^CI^iA$aoA<CR>Oko......
  • 学习笔记8
    第15章实现上的问题II一、知识点归纳二、问题与解决过程三、实践内容与截图第16章时钟二、问题与解决过程三、实践内容与截图第17章密钥服务器二、问题与解决过程三、实践内容与截图......
  • RF robotframework学习
     安装和启动python3版本:Python3.7.16pip3installrobotframework==6.0.2pip3insatllrobotframewor-ride==2.0b3pip3installwxPython==4.1.1最终版本展示输入以下命令启动使用  ......
  • Rust语言 学习10 测试
    一、编写测试cargo创建测试项目使用Clion打开工程,lib.rs代码如下然后运行这个测试看看效果增加一个单测#[test]fnnew_test(){panic!("maketestfail");}......
  • fastdds学习之2——Helloworld Demo
    本节详细介绍了如何使用C++API一步一步地创建一个简单的FastDDS应用程序,其中包含发布者和订阅者。也可以使用eProsimaFastDDSGen工具自行生成与本节中实现的示例类似的示例。在构建发布/订阅应用程序中解释了这种额外的方法,本例程在eProsimaFastDDSGithub仓库中,环境搭建完成......
  • 尝试学习训练一个GPT-2对话模型
    一、GPT模型的背景知识GPT-1基础原理:https://www.cnblogs.com/LittleHann/p/17303550.html原始论文及相关文章:https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdfhttps://blog.openai.com/better-language-models/https://openai.com/rese......
  • 打着 multi-fidelity RL 旗号,然而幼稚监督学习 + 迁移学习
    文章名称:Multi-fidelityreinforcementlearningframeworkforshapeoptimization链接:https://www.sciencedirect.com/science/article/pii/S0021999123001134#se0020JournalofComputationalPhysics(JCP),计算力学领域国际三大顶刊之一。0abstract提出了一个受控的......