Fast DDS 介绍

news2024/11/24 6:08:02

前面已经简要介绍过DDS协议规范了,接下来我们来看一个它的C++实现----Fast DDS。

eProsima Fast-DDS是eprosima对于DDS的C++实现,这是一个免费开源软件,遵循Apache License 2.0。eProsima Fast DDS在性能,功能和对最新版本RTPS标准(RTPS 2.2)的遵守方面均处于领先地位。它最为被大家知道的可能是因为被ROS2设定为默认的消息中间件。Fast DDS由以下几部分组成:
1.DDS API接口实现;
2.Fast DDS-Gen工具,用于将类型化接口与中间件实现桥接的生成工具。
3.底层RTPS协议实现。

DDS API

DDS采用的通信模型是一种多对多的单向数据交换,生产数据的应用程序将数据发布给应用本地缓存的订阅者,订阅者消费数据。信息流由负责数据交换的实体之间建立的服务质量(QoS)策略来调节。

作为一个以数据为中心的模型,DDS建立在所有感兴趣的应用程序都可以访问“全局数据空间”的概念之上。提供数据的应用程序成为发布者,而希望访问部分数据空间的应用程序成为订阅者。每当发布者将新数据发布到此空间时,中间件将信息传播给所有感兴趣的订阅者。

通信是跨域进行的,抽象的平面连接所有能够相互通信的分布式应用程序。只有属于同一个域的实体才能进行交互,订阅数据的实体和发布数据的实体之间的匹配是通过主题进行匹配的。主题是将域中唯一的名称与数据类型和一组附加的特定于数据的QoS相关联的明确标识符。

下图是信息如何在DDS域中流动的概念图,只有属于同一域的实体才能通过匹配主题相互发现,从而在发布者和订阅者之间交换数据。
在这里插入图片描述

Fast DDS-Gen

依赖于接口意味着需要一个生成工具,将类型描述转换为适当的实现,以填补接口和中间件之间的空白。此任务由专用的生成工具Fast DDS-Gen执行,Fast DDS-Gen是一个Java应用程序,它使用在接口定义语言(IDL)文件中定义的数据类型生成源代码。

RTPS Wire Protocol

eProsima Fast DDS用于在标准网络上交换消息的协议是实时发布-订阅协议(RTPS),这是一种由OMG联盟定义和维护的互操作性协议。该协议通过TCP/UDP/IP等传输协议提供发布者-订阅者通信,并保证不同DDS实现之间的兼容性。

考虑到RTPS协议的发布-订阅设计的目的及其为满足DDS应用程序域处理的相同需求而设计的规范,RTPS协议许多概念和DDS都是对应的,因此是DDS实现理所当然的选择。所有RTPS核心实体都与一个RTPS端点匹配的隔离通信平面的域相关联,而RTPS核心实体又与DDS实体一一对应,从而同一域的DDS实体间可以通信。

主要特点

  • 两个API层。eProsima Fast DDS包括一个关注可用性的高级DDS兼容层和一个提供对RTPS协议更好访问的低级RTPS兼容层。
  • 实时行为。eProsima Fast DDS可以配置为提供实时功能,保证在指定的时间限制内响应。
  • 内置的发现服务器。eProsima Fast DDS基于对现有发布者和订阅者的动态发现,并且不需要联系或设置任何服务器就可以连续执行此任务。但是,还可以配置Client-Server发现以及其他发现范式。
  • 同步和异步发布模式。eProsima Fast DDS同时支持同步和异步数据发布。
  • 尽力的和可靠的沟通。eProsima Fast DDS支持一种可选的可靠通信范式,超过UDP等最佳努力通信协议。此外,另一种设置可靠通信的方法是使用我们的TCP传输。
  • 传输层。eProsima Fast DDS实现了可插拔传输的体系结构。当前版本实现了五种传输:UDPv4、UDPv6、TCPv4、TCPv6和SHM(共享内存)。
  • 安全。eProsima Fast DDS可以配置为提供安全通信。为此,它在三个级别上实现了可插拔安全性:远程参与者的身份验证、实体的访问控制和数据加密。
  • 统计模块。可以配置eProsima Fast DDS来收集和提供关于用户应用程序正在交换的数据的信息。
  • 流控制器。我们支持用户可配置的流量控制器,可用于限制在特定条件下要发送的数据量。
  • 即插即用连接。新的应用程序和服务被自动发现,并且可以在任何时候加入和离开网络,而不需要重新配置。
  • 可伸缩性和灵活性。DDS构建在全局数据空间的概念之上。中间件负责在发布者和订阅者之间传播信息。这保证了分布式网络能够适应重新配置,并可扩展到大量的实体。
  • 应用程序的可移植性。DDS规范包括到IDL的特定于平台的映射,允许使用DDS的应用程序只需要重新编译就可以在DDS实现之间切换。
  • 可扩展性。eProsima Fast DDS允许使用新的服务对协议进行扩展和增强,而不会破坏向后兼容性和互操作性。
  • 可配置性和模块化。eProsima Fast DDS提供了一种通过代码或XML概要进行配置的直观方式。模块化允许简单的设备实现协议的一个子集,同时仍然参与网络。
  • 高性能。eProsima Fast DDS使用了一个静态的低级序列化库Fast CDR,这是一个c++库,根据RTPS规范中定义的标准CDR序列化机制进行序列化。
  • 资源消耗低。允许预分配资源,最大限度地减少动态资源分配。避免使用无限资源。最大限度地减少复制数据的需要。
  • 多平台。操作系统依赖项被视为可插拔模块。用户可以在目标平台上使用eProsima Fast DDS库轻松实现平台模块。默认情况下,该项目可以在Linux、Windows和MacOS上运行。
  • 免费和开源。Fast DDS库、底层RTPS库、生成器工具、内部依赖项(如eProsima Fast CDR)和外部依赖项(如foonathan库)都是免费和开源的。

后续,会一起看下Fast DDS在不同平台的部署,欢迎关注。

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

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

相关文章

Day17-对象

文章目录一 函数作业讲解二 函数版图书管理系统三 对象一 引入思考二 对象的创建和使用案例1案例2案例3案例4案例5-描述手机案例6-描述一组手机案例7-把对象作为函数的参数一 函数作业讲解 <script>//1编写函数&#xff0c;计算圆的面积和周长&#xff0c;在函数外由用户…

俄罗斯电商平台ozon的崛起,卖家可以使用测评补单方式打造爆款吗?

OZON俗称俄罗斯亚马逊&#xff0c;1998年成立&#xff0c;是俄罗斯唯一的多品类综合B2C电商平台&#xff0c;也是目前欧洲第四大电商市场。 作为俄罗斯互联网公司五强的OZON平台&#xff0c;拥有庞大的消费者群体&#xff0c;从2018年仅为480万人&#xff0c;到2021年就增长到…

【C++进阶】Makefile基础(一)

文章目录1. 环境2. 规则3. 原理4. 伪目标Makefile 其实只是一个指示 make 程序&#xff08;后面简称 make 或有时称之为 make 命令&#xff09;如何为我们工作的命令文件&#xff0c;我们说 Makefile 其实是在说 make&#xff0c;这一点要有很清晰的认识。而对于我们的项目来说…

21-CSS

目录 1.CSS是什么&#xff1f; 2.CSS基本语法 3.CSS类型 3.1.行内样式&#xff08;适用范围最小&#xff09; 3.2.内部样式&#xff08;适用范围适中&#xff09; 3.3.外部样式&#xff08;适用范围最大&#xff09; PS&#xff1a;关于缓存 3.4.多种样式优先级 4.代码…

浅析Linux Socket套接字编程中的 5 个隐患

隐患 1&#xff0e;忽略返回状态 第一个隐患很明显&#xff0c;但它是开发新手最容易犯的一个错误。如果您忽略函数的返回状态&#xff0c;当它们失败或部分成功的时候&#xff0c;您也许会迷失。反过来&#xff0c;这可能传播错误&#xff0c;使定位问题的源头变得困难。 捕…

XTDrone PX4 仿真平台|Ubuntu20.04 环境搭建失败记录

XTDrone PX4 仿真平台|Ubuntu20.04 环境搭建失败记录仿真环境搭建依赖安装ROS安装Gazebo安装MAVROS安装PX4配置仿真环境搭建 依赖安装 在使用apt安装的过程中&#xff08;包括之后ROS的安装&#xff09;&#xff0c;如果出现难以解决的依赖问题&#xff0c;可以使用aptitude …

Revit净高分析的三种方法

关于净高分析&#xff0c;就是在revit绘制模型到一定程度后&#xff0c;需要对构件的空间位置进行分析&#xff0c;如结构层高、管线净高、地下室是否满足人员车辆进出、地上部分是否满足正常的人员设备活动空间、净高是否满足设备进场安装等&#xff0c;它可以让我们提前发现不…

Codepipeline 跨账号访问 Codecommit

背景 大型企业中代码仓库通常存放在各部门开发账户中&#xff0c;而流水线则位于独立 DevOps 账户中。 本文我们将介绍如何创建跨账号访问 Codecommit 代码仓库的 Codepipeline 流水线&#xff0c;即 CodePipeline 调用另一个账号中的 Codecommit 代码仓库。 亚马逊云科技开发…

【Python_Scrapy学习笔记(十二)】基于Scrapy框架实现POST请求爬虫

基于Scrapy框架实现POST请求爬虫 前言 本文中介绍 如何基于 Scrapy 框架实现 POST 请求爬虫&#xff0c;并以抓取指定城市的 KFC 门店信息为例进行展示 正文 1、Scrapy框架处理POST请求方法 Scrapy框架 提供了 FormRequest() 方法来发送 POST 请求&#xff1b; FormReques…

阿里云ECS大测评【免费领阿里云套餐~】

送福利&#xff01;阿里云热门产品免费领&#xff08;含ECS&#xff09;&#xff0c;点击进入&#xff1a;https://click.aliyun.com/m/1000370359/ 本篇博客参与阿里云 ECS实例测评&#xff0c;这里采用阿里的C5.large计算型实例 本次对云服务器ECS产品能力的体验和建议&…

【2023最新】超详细图文保姆级教程:App开发新手入门(4)

之前章节我们已经完成了一个应用项目的导入、代码更新和代码提交和应用打包编译&#xff0c;本章继续讲述一下&#xff0c;如何在开发过程中进行代码的同步联机调试。 7 代码真机调试 7.1 纯静态CSS页面样式查看 代码调试有多种方式&#xff0c;如果是查看纯粹的静态样式&am…

价值迭代求解马尔可夫决策过程

Value Iteration Algorithm 其算法思想是: 在每一个状态s下&#xff0c; 之迭代算法流程如下&#xff1a; 初始化状态价值state value&#xff0c;即对每个状态的价值都赋一个初始值&#xff0c;一般是0 计算每一个状态-动作对的 动作价值函数&#xff0c;通常通过创建一个二维…

项目管理(PMP)考试:易混淆知识点汇总

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; PMP考试中经常出现&#xff0c;但容易混淆的一些内容&#xff0c;包含15个会议、40个分析、6个矩阵、5个清单、5个审计、5个报告、4个分解结构、4个评估、3个日志…

谷歌人机验证Google reCAPTCHA

reCAPTCHA是Google公司推出的一项验证服务&#xff0c;使用十分方便快捷&#xff0c;在国外许多网站上均有使用。它与许多其他的人机验证方式不同&#xff0c;它极少需要用户进行各种识图验证。 它的使用方式如下如所示&#xff0c;只需勾选复选框即可通过人机验证。 虽然简单…

Python项目之中国数据可视化

文章目录关键词一、做什么二、怎么做1、获取数据&&处理数据2、数据库设计&&存储数据3、开发后端接口4、前端页面编写三、效果展示四、总结关键词 PythonDjangoPython网络爬虫echarts可视化阅读者&#xff08;Python基础、Django基础、H5基础&#xff09; 一、…

Linux学习笔记——UDP协议

文章目录UDP协议端格式UDP的特点面向数据报UDP的缓冲区基于UDP的应用层协议UDP使用注意事项16位的UDP校验和的校验原理UDP协议端格式 16位源端口号&#xff1a;数据从哪一个端口发出来的&#xff0c;也就是数据从哪一个进程发送出来的。在编写应用层代码的时候&#xff0c;用ui…

Git安装使用教程

Git - Downloadshttps://git-scm.com/downloads 安装 Git。可以在 Git 官网上下载安装包并按照提示进行安装。 GitHub或Gitee官网上注册一个账号&#xff0c;注册好后&#xff0c;桌面右键选择Git Bash&#xff0c;进行账号配置&#xff0c;命令如下&#xff1a; # 配置用户名…

spark第八章:Pyspark

系列文章目录 spark第一章&#xff1a;环境安装 spark第二章&#xff1a;sparkcore实例 spark第三章&#xff1a;工程化代码 spark第四章&#xff1a;SparkSQL基本操作 spark第五章&#xff1a;SparkSQL实例 spark第六章&#xff1a;SparkStreaming基本操作 spark第七章&#…

带隙基准基本原理

目录 负温度系数电压 正温度系数电压 带隙基准 小结 如何产生一个不受温度变化&#xff0c;保持恒定的电压基准呢&#xff1f; 我们假设&#xff0c;如果将两个具有相反温度系数&#xff08;TC&#xff09;的量以适当的权重相加&#xff0c;那么结果就会成为零温度系数&am…

MIT6.824 lab2C2D实验总结

2C 就是持久化一些变量&#xff0c;日志&#xff0c;任期&#xff0c;投票给谁&#xff0c;2D(lastincludeterm, lastincludeindex, snapshot)。同时最难受的是Figure8Unreliable这个测试点&#xff0c;总是几百次出现一两个错误。最后发现是对论文一句话的歧义。这里讲解一下…