FastDDS-0.简介

news2024/11/18 7:30:37


FastDDS简介

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

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

由于有上述特性, eProsima Fast DDS 目前已经被选为ROS2系统的默认中间件。



DDSAPI

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

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

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

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

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


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



Fast DDS-Gen

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



RTPS Wire Protocol

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

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



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:

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

  • 开源。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/375507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt——自定义Model

众所周知,Qt提供了一套Model/View框架供开发者使用,Model用来提供数据, View则用来提供视觉层的显示。实际上这是一套遵循MVC设计模式的GUI框架,因为Qt还提供了默认的Delegate作为Controller来作为控制器。 MVC的好处这里就不多说…

关于Ubuntu18.04 root账户登录的问题

关于Ubuntu18.04 root账户登录的问题一、 Ubuntu 18.04添加root用户登录1. 设置root用户2. 修改/root/.profile3. 修改/etc/pam.d目录下的gdm-autologin和gdm-password4. 修改50-ubuntu.conf5. 登录root账户二、Ubuntu18.04不能远程使用root账户登录的问题1. 修改sshd_config2.…

叠氮试剂79598-53-1,6-Azidohexanoic Acid,6-叠氮基己酸,末端羧酸可与伯胺基反应

●中文名:6-叠氮基己酸●英文名:6-Azidohexanoic Acid,6-Azidohexanoic COOH●外观以及性质:西安凯新生物科技有限公司供应的6-Azidohexanoic Acid浅黄色或者无色油状,叠氮化物可使用铜催化的Click化学与末端炔烃共轭&…

【深度探讨】如何利用区块链改善公共服务

发表时间:2022年5月4日 信息来源:bsvblockchain.org BSV区块链协会全力支持符合企业和政府对于节能降耗和合法合规等相关要求的区块链生态系统。 然而,虽然监管机构负责其监管范围内的技术服务的性质、目的和影响,但他们并不是全…

金三银四了,只能每天整理一下软件测试面试题给大家多多学习了,祝大家金三银四升职加薪,奥利给!

最近有童鞋和我抱怨,说网上很难搜到那些全面又合适的自动化测试面试题,这里根据我个人的经验以及收集整理的: 我还在文章最后面准备了一套视频,是关于简历和面试题方面的,真心建议现在在准备面试的兄弟去看看&#xf…

YB菜菜的毫米波雷达自学之路(四)——浅谈角度模糊

YB菜菜的毫米波雷达自学之路(四)——浅谈角度模糊前提说明主要内容:1. 一维平面天线阵列模糊函数及相关阐述1.1角度模糊函数定义1.2角度模糊函数案例与分析1.2.1 雷达阵列信息1.2.2 基础参数分析1.2.3 模糊函数图与波束方向图的关系探索与疑问…

华为OD机试模拟题 用 C++ 实现 - 简易压缩算法(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明简易压缩算法题目输入输出示例一输入输出说明示例二输入输出说明示例三输入输出说明

②【Java 组】蓝桥杯省赛真题解析 [振兴中华] [三部排序] 持续更新中...

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 蓝桥杯真题--持续更新中...一、振兴中华二、三…

【无标题】(2019)NOC编程猫创新编程复赛小学组真题含参考

(2019)NOC编程猫创新编程复赛小学组最后6道大题。前10道是选择填空题 略。 这道题是绘图题,没什么难度,大家绘制这2个正十边形要注意:一是不要超出舞台;二是这2个正十边形不要相交。 这里就不给出具体程序了…

RPC异步化原理

深入RPC,更好使用RPC,须从RPC框架整体性能考虑问题。得知道如何提升RPC框架的性能、稳定性、安全性、吞吐量及如何在分布式下快速定位问题。RPC框架如何压榨单机吞吐量? 1 前言 TPS一直上不去,压测时CPU压到40%~50%就…

Windows离线安装rust

目前rust安装常用的方式就是通过Rustup安装,此安装方式需要访问互联网。在生产环境中由于网络限制,不能直接访问互联网或者不能访问目标网站,这时候需要用离线安装的方式,本文将详细介绍离线安装步骤,并给出了vscode如…

记一次java.lang.ClassNotFoundException问题排查过程

记一次java.lang.ClassNotFoundException问题排查过程 同事提供一个or-simulation-engine.jar包(非maven项目,内部依赖很多其他jar,这个包是手动打出来的)给我,我集成到我的springboot项目中,在本地IDEA启…

网上招聘系统

技术:Java、JSP等摘要:当今,人类社会已经进入信息全球化和全球信息化、网络化的高速发展阶段。丰富的网络信息已经成为人们工作、生活、学习中不可缺少的一部分。人们正在逐步适应和习惯于网上贸易、网上购物、网上支付、网上服务和网上娱乐等…

C#多窗口切换

多窗口切换【功能目标】1、实现多窗口切换(Panel)2、动态生成窗口内文本框以及标签(重点)3、改变文本框内容【效果图】【代码详解】1、多窗口切换如要实现多窗口切换,需要用到Panel,对于这个控件不熟悉的可…

正演(1): 二维声波正演模拟程序(中心差分)Python实现

目录 1、原理: 1)二维声波波动方程: ​编辑 2)收敛条件(不是很明白) 3)雷克子波 4)二维空间衰减函数 5)边界吸收条件 (不是很明白。。) 2、编程实现 1)参数设置&…

RNN相关知识总结

目录RNN结构与原理1.模型总览2.反向传播LSTM结构与原理1.模型总览2.如何解决RNN梯度消失/爆炸问题?GRU结构及原理1.模型总览LSTM与GRU的区别RNN结构与原理 1.模型总览 上图是RNN的展开结构图,由输入层、隐藏层和输出层组成。当前时间步t 的隐藏状态hth_…

Spark 分析计算连续三周登录的用户数

前言:本文用到了窗口函数 range between,可以参考这篇博客进行了解——窗口函数rows between 、range between的使用 创建数据环境 在 MySQL 中创建数据测试表 log_data: create table if not exists log_data( log_id varchar(200) comm…

能在软路由docker给部署搭建teamsperk服务器么?并且设置好ddns

参考链接(4条消息) 【个人学习总结】使用docker搭建Teamspeak服务器_blcurtain的博客-CSDN博客_teamspeak3 docker(⊙﹏⊙)哎呀,崩溃啦! (tdeh.top)TeamSpeak服务器搭建与使用 - 缘梦の镇 (cmsboy.cn)Openwrt X86 docker运行甜糖-软路由,x86系统,openwrt…

(四)K8S 安装 Nginx Ingress Controller

ingress-nginx 是 Kubernetes 的入口控制器,使用NGINX作为反向代理和负载均衡器 版本介绍 版本1:Ingress NGINX Controller(k8s社区的ingres-nginx) 以 NGINX 开源技术为基础(kubernetes.io),可在GitHub的 kubernet…

如何创建并管理一个刷题小组?

“如何收回用户对题库的使用权”,这是一个大多数题库创建人都会碰到的管理问题,也是日常咨询频繁的问题。土著刷题在v1.10版本已经上线了小组模块功能,小组拥有丰富的用户管理功能,可以管理组员对于题库的使用权进行有效的管理。咱…