首页 > 其他分享 >fastdds学习之0——简介

fastdds学习之0——简介

时间:2023-04-15 17:55:21浏览次数:55  
标签:DDS 简介 fastdds 通信 Fast 学习 RTPS 数据 FastDDS

1、fastdds文档

eProsima Fast DDS 是 DDS (Data Distribution Service) 协议的一个C++语言实现版本,该协议由 Object Management Group (OMG) 组织定义。
eProsima Fast DDS 库既提供了一个应用编程接口(API),又提供了一种通信协议,使用这种通信协议可以部署以数据为中心的发布者-订阅者模型。这些模型的目的是为实时系统建立高效可靠的数据分发功能。
eProsima Fast DDS 在资源处理方面是可预测,可扩展,灵活以及高效的。
为了实现这些功能,它使用了类型接口,并且依赖多对多的分布式网络范式,这些使得进行通信的发布者与订阅者可以分离解耦。

eProsima Fast DDS 包含:
(1)DDS API 实现。
(2)Fast DDS-Gen, 一个代码生成工具,用来将类型化接口和中间件实现连接起来。
(3)下层的 RTPS 协议实现。

由于有上述特性, eProsima FastDDS 目前已经被选为ROS2系统的默认中间件,百度发布的cyberRt也使用Fast DDS作为其底层通信技术的实现之一。

2、dds API

DDS采用的通信模型是多对多单项数据交换,生产数据的应用程序发布数据到消费者应用程序的本地缓存中。 数据流由负责数据交换的实体根据QOS来进行调节。

作为一个以数据为中心的模型,DDS建立在“全局数据空间“(”global data space”)的概念上,该数据空间是所有对数据有兴趣的应用都可以访问的。想要发布数据的应用需要声明它们的意图,以便成为数据的发布者。同时,想要获取全局空间数据的应用也需要声明意图,用于成为数据的订阅者。每当发布者发布一个新的数据到这个数据空间,中间件会将这个数据传递给所有对该数据感兴趣的订阅者。

数据交换是在域内进行的,域是一个隔离的抽象平面,它把所有能够相互通信的分布式应用程序连接在一起。只有属于同一个域的实体才能够互相通信,发布数据的实体和订阅数据的实体是通过主题来进行匹配的。

topic有明确的标识符,并将一个名称和一种数据类型和一组附加的数据特定的QoS。

DDS实体是一个类,或者一个类型接口。类型化接口意味着更高效的资源处理,因为其能够获取数据的类型的特点可以在处理数据前就提前分配存储空间,而不是处理时动态分配存储空间。
image

上面的示意图解释了在DDS域之间信息如何流转。只有属于同一个域的实体可以通过匹配主题的方式发现对方,从而可以在发布者和订阅者之间交换数据。

3、fastdds-en

对接口的依赖意味着需要有一种生成工具,这种生成工具可以将类型描述翻译成合适的代码实现,这个工具可以填补接口定义和中间件之间的空缺。这个任务由一个专用的生成工具来执行——Fast DDS-Gen, 一个java应用程序,它根据IDL (Interface Definition Language) 文件中的数据类型定义生成源代码。

4、RTPS Wire Protocol

eProsima Fast DDS 通过标准网络进行数据交换所使用的协议是RTPS,一个由OMG定义并且维护的DDS互操作有线协议。这个协议提供了基于TCP/UDP/IP传输的发布订阅通信功能,并且使得FastDDS和其他的DDS实现之间保持兼容。

鉴于发布-订阅根节点、以及为了满足DDS应用程序域所要解决的相同的需求而设计的规范, RTPS协议映射到了许多DDS概念,因此其是DDS实现的自然选择。所有的RTPS核心实体通过RTPS域被连接在一起,RTPS域代表了隔离的通信平面,在这个通信平面可以让各个通信端点进行匹配。RTPS协议中的实体和DDS实体一对一的对应,从而完成相互的数据通信。

5、Main Features

  • 两层API(Two API Layers). FastDDS 由一个高层的DDS兼容层和一个底层的RTPS兼容层组成,高层dds层关注的可用性,低层的dds层可以更好的访问rtps协议。

  • 实时性能表现(Real-Time behaviour). FastDDS 可以通过配置来提供特定时间约束下的实时性保证。

  • 内建的发现服务器(Built-in Discovery Server). FastDDS 是建立在对于已存在的发布者和订阅者的动态发现机制上,这套机制并不需要设定任何服务器。尽管如此,FastDDS也是可以被设置为客户端-服务器模式的。

  • 同步和异步的发布模式(Sync and Async publication modes). FastDDS 支持同步和异步两种数据发布模式。

  • 更好并且更可靠的通信(Best effort and reliable communication). FastDDS 中可以选择基于类似UDP传输协议的可靠通信模式。此外,可以设置基于TCP传输协议的可靠通信模式。

  • 传输层(Transport layers). FastDDS 实现了一个插件化的传输层架构,当前的版本实现了五种传输层协议:UDPv4, UDPv6, TCPv4, TCPv6 and SHM (shared memory).

  • 安全(Security). FastDDS 通过配置,可以提供安全的通信。为了实现安全通信, 它在三个方面实现了可配置的安全性:远程参与者的验证,实体的访问控制,数据的加密。

  • 统计模块. FastDDS 可以配置拥有能够统计通信数据量。

  • 流量控制(Flow controllers). FastDDS支持用户配置流量控制,用户可以手动配置在特定环境下的数据发送量(吞吐量)。

  • 即插即用的连接(Plug-and-play Connectivity). 新的应用和服务可以自动的被发现,可以在任意时刻加入或者离开离开通信网络。发现,加入和退出,这些操作都不需要事先进行配置。

  • 可扩展性和灵活性(Scalability and Flexibility). DDS建立了全局数据空间的概念。中间件负责在发布者和订阅者之间传送信息。这保证了分布式网络能够适应重新配置以及拓展更多的实体。

  • 应用可移植性(Application Portability). DDS规范可以将IDL映射到特定平台,允许使用DDS的应用可以在不修改代码的情况下,仅仅重新编译即可切换不同的DDS实现(例如RTPS)。

  • 可拓展性(Extensibility). eProsima Fast DDS 允许新的服务在不改变兼容和互操作性的前提下拓展和增强协议。

  • 配置和模块化(Configurability and Modularity). FastDDS 提供了直观的方式让用户进行配置,可以通过代码或者xml配置文件来进行配置。而模块化使得运行协议简单子集的设备也可以加入分布式网络中。

  • 高性能(High performance). eProsima Fast DDS 使用静态的底层序列化库FastCDR ,一个C++库,根据标准CDR序列机制对数据进行序列化操作。CDR序列化在RTPS Specification中定义.

  • 易用性(Easy to use). 项目中自带了开箱的范例程序, DDSHelloWorld (参阅 Getting Started) 中有一个发布者和一个订阅者之间的通信范例,展示了FastDDS应该如何部署使用。此外,一个交互的示例ShapesDemo也可以帮助开发者进入dds世界。DDS层和RTPS层在 DDS Layer 和RTPS Layer两章节中也做了详细解释。

  • 低开销(Low resources consumption). FastDDS:

  1. 预先分配资源,最小化动态资源分配
  2. 避免使用没有边界的资源
  3. 将数据拷贝降到最低,基本不需要数据拷贝
  • 多平台(Multi-platform). OS依赖部分设置为可插拔的模块。用户可以轻易的使用基于目标系统平台的FastDDS库来实现平台模块,默认情况,应用可以运行在 Linux, Windows 和MacOS.

  • 开源。

感谢纵一苇整理
转载:https://www.cnblogs.com/zhangzl419/p/17144188.html

标签:DDS,简介,fastdds,通信,Fast,学习,RTPS,数据,FastDDS
From: https://www.cnblogs.com/xingyuchen/p/17321534.html

相关文章

  • 存储引擎-简介
    存储引擎简介:是存储数据,建立索引,更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也被成为表类型 ......
  • 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......