Fast DDS 介绍与使用

汽车电子与软件 2021-05-04 00:00

在上一篇中,我们介绍了DDS,eProsima的Fast DDS是DDS规范的C++实现,Fast DDS的前称是Fast RTPS,目前ROS2将Fast DDS作为默认的DDS中间件实现。Fast DDS主要包括以下内容:

DDS API

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

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

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

DDS实体被建模为类或类型化接口,后者意味着更有效的资源处理,因为在执行前了解数据类型允许提前分配内存,而不是动态分配。

Fast DDS-Gen
依赖接口意味着需要一个生成工具,将类型描述转换为适当的实现,以填补接口和中间件之间的空白。这个任务由生成工具Fast DDS-Gen完成,这是一个Java应用程序,它使用接口定义语言(IDL)文件中定义的数据类型生成源代码。
RTPS Wire Protocol
Fast DDS在标准网络上交换消息所使用的协议是实时发布-订阅协议(RTPS),这是由OMG联盟定义和维护的用于DDS的互操作性有线协议,参考上一篇介绍。该协议通过TCP/UDP/IP等传输协议提供发布者-订阅者通信,并保证不同DDS实现之间的兼容性。
由于RTPS协议的发布-订阅和它的规范是为满足DDS应用程序域所解决的相同需求而设计的,因此RTPS协议映射到许多DDS概念。所有RTPS核心实体都与一个RTPS域相关联,该域表示一个端点匹配的隔离通信平面。RTPS协议中指定的实体与DDS实体一一对应,因此允许通信发生。
Fast DDS的主要特点如下:
  • 两层API:提供上层DDS和下层RTPS;
  • 实时性:提供可配置的实时功能,保证在指定的时间限制内响应;
  • 服务发现:内置基于对现有发布者和订阅者的动态发现,并且不需要联系或设置任何服务器就可以持续执行此任务,同时也支持配置其他发现机制;
  • 支持同步和异步数据发布模式;
  • 传输层:实现了可插拔的体系结构,当前版本支持五种传输:UDPv4, UDPv6, TCPv4, TCPv6和SHM(共享内存);
  • 安全性:提供可配置的安全通信,实现了可插拔的安全配置,包括:远程参与者的身份验证、实体的访问控制和数据加密;
  • 流量控制:支持可配置的吞吐量控制,可限制在特定条件下发送的数据量;
  • 即插即用连接:新的应用程序和服务能够自动发现,可以在任何时候加入或离开网络,而不需要重新配置;
  • 可伸缩性和灵活性:DDS建立在全局数据空间的概念之上,中间件负责在发布者和订阅者之间传播信息,这使得分布式网络可以适应重新配置,并可扩展大量实体;
  • 可移植性:DDS规范包括到IDL的特定平台映射,允许使用DDS的应用程序只需重新编译就可以在DDS实现之间切换;
  • 可扩展性:允许使用新的服务扩展和增强协议,不会破坏向后兼容性和互操作性;
  • 可配置性和模块化:提供了一种通过代码或XML配置文件进行配置的直观方 式。模块化允许简单设备实现协议的子集,同时仍然参与网络;
  • 高性能序列化:基于eProsima的Fast Buffers序列化,官网说其性能要高于Protocol Buffers和Thrift:
  • 低资源的消耗:允许预分配资源,减少动态资源分配,避免无限制使用资源,最小化数据复制的需要
  • 多平台:默认情况下,该项目可以在Linux、Windows和MacOS上运行;
  • 免费和开源:Fast DDS库、Fast RTPS库、Fast DDS-Gen、内部依赖项(如Fast CDR)和外部依赖项(如foonathan库)都是免费和开源的。
以上大部分内容都是官网翻译+一点自己理解,下面我来具体讲一下如何使用Fast DDS。其实,Fast DDS对开发者非常友好,不仅有框架文档、API文档,还自带了丰富的示例代码,不止HelloWorld那么简单,基本上所有主要的功能点都能在示例代码中找到,可以说很容易上手。
但是,我还是决定从零跑个HelloWorld看看,事实上,真的也碰到了一些问题,所以呀,绝知此事还是要躬行的。
关于下载和安装,还是写在了README里,回复“演示代码”就可以看到链接。官方的示例中已经用HelloWorld.idl生成了代码,而当我用Fast DDS-Gen,相同的idl,却生成了不一样的代码,而我并不知道官方代码是用了哪个版本的工具生成的,或者用的命令是不是不一样,这是我遇到的第一个问题。
一开始,当我使用如下命令:
fastddsgen HelloWorld.idl
只生成了四个文件,比官方少了好几个:
    
├── HelloWorld.cxx --> 实际存储数据的结构 ├── HelloWorld.h ├── HelloWorldPubSubTypes.cxx --> 继承自eprosima::fastrtps::TopicDataType └── HelloWorldPubSubTypes.h
后来发现,可以通过“-example”选择生成某一个平台下的示例代码:
    
fastddsgen -example CMake HelloWorld.idl
这样就生成了更多的代码文件:
    
├── CMakeLists.txt ├── HelloWorld.cxx ├── HelloWorld.h ├── HelloWorldPublisher.cxx --> 发布者的实现 ├── HelloWorldPublisher.h ├── HelloWorldPubSubMain.cxx --> 主程序 ├── HelloWorldPubSubTypes.cxx ├── HelloWorldPubSubTypes.h ├── HelloWorldSubscriber.cxx --> 订阅者的实现 └── HelloWorldSubscriber.h
但这仍然和官方示例看起来不大一样,事实上,发布者和订阅者的实现真的就不一样!而且,即使改了CMakeLists,编译能过,运行时还是会crash,查了问题发现,用老一点版本的工具生成的就和官方示例差不多了,猜测官方示例并不是用最新工具生成的,所以我觉得保险的做法是只生成前面四个文件,可以参考官方示例实现发布者和订阅者。
其实我理解在实际项目应用中,发布者和订阅者的实现部分本来也是要自已写的。前几天在后台收到了一条小伙伴的消息,说想了解如何使用Fast DDS的Log,其实代码可以参考:test/unittest/logging/LogTests.cpp,但是我还是想在HelloWorld中简单尝试了一下,结果发现即使设置了日志级别,Info日志还是没显示出来:
查了源码和文档,发现需要在编译阶段,打开Debug模式和关闭LOG_NO_INFO开关,才可以显示Info级别的日志(前方预警:Log会多到你怀疑人生,个人感觉这种方式并不是很合理,因为我想要的其实只是第一句而已):
最后,结合个人体会和网上各路大神的回答(比如: 知乎&Stack Overflow),对比一下SomeIP和DDS:
特性
SomeIP
DDS



通信模式
请求/响应+订阅发布
订阅发布
架构风格
面向服务
以数据为中心
传输协议
TCP/UDP
默认为UDP,也支持TCP、共享内存
动态发现


Qos策略
依赖于TCP/UDP
提供丰富的Qos策略
AUTOSAR
支持CP、AP
CP 占用较大资源,支持AP
云端
不支持
需要DDS Web转换
安全性
TLS
DDS Security安全规范,支持细粒度的安全规则,也支持TLS
应用领域
汽车
工业、航空、汽车等
抛开具体场景去谈哪个好,没有什么意义,从个人学习的角度,我觉得DDS有更多新颖的东西可以学习,Fast DDS的实现也非常值得开发者深入研究。



END

相关活动:汽车以太网技术论坛

投稿合作:18918250345(微信)

汽车电子与软件 主要介绍汽车电子软件设计相关内容,每天分享一篇技术文章!
评论
  • 嘿,咱来聊聊RISC-V MCU技术哈。 这RISC-V MCU技术呢,简单来说就是基于一个叫RISC-V的指令集架构做出的微控制器技术。RISC-V这个啊,2010年的时候,是加州大学伯克利分校的研究团队弄出来的,目的就是想搞个新的、开放的指令集架构,能跟上现代计算的需要。到了2015年,专门成立了个RISC-V基金会,让这个架构更标准,也更好地推广开了。这几年啊,这个RISC-V的生态系统发展得可快了,好多公司和机构都加入了RISC-V International,还推出了不少RISC-V
    丙丁先生 2025-01-21 12:10 1017浏览
  • 2024年是很平淡的一年,能保住饭碗就是万幸了,公司业绩不好,跳槽又不敢跳,还有一个原因就是老板对我们这些员工还是很好的,碍于人情也不能在公司困难时去雪上加霜。在工作其间遇到的大问题没有,小问题还是有不少,这里就举一两个来说一下。第一个就是,先看下下面的这个封装,你能猜出它的引脚间距是多少吗?这种排线座比较常规的是0.6mm间距(即排线是0.3mm间距)的,而这个规格也是我们用得最多的,所以我们按惯性思维来看的话,就会认为这个座子就是0.6mm间距的,这样往往就不会去细看规格书了,所以这次的运气
    wuliangu 2025-01-21 00:15 477浏览
  • 书接上回:【2022年终总结】阳光总在风雨后,启航2023-面包板社区  https://mbb.eet-china.com/blog/468701-438244.html 总结2019,松山湖有个欧洲小镇-面包板社区  https://mbb.eet-china.com/blog/468701-413397.html        2025年该是总结下2024年的喜怒哀乐,有个好的开始,才能更好的面对2025年即将
    liweicheng 2025-01-24 23:18 107浏览
  • 数字隔离芯片是一种实现电气隔离功能的集成电路,在工业自动化、汽车电子、光伏储能与电力通信等领域的电气系统中发挥着至关重要的作用。其不仅可令高、低压系统之间相互独立,提高低压系统的抗干扰能力,同时还可确保高、低压系统之间的安全交互,使系统稳定工作,并避免操作者遭受来自高压系统的电击伤害。典型数字隔离芯片的简化原理图值得一提的是,数字隔离芯片历经多年发展,其应用范围已十分广泛,凡涉及到在高、低压系统之间进行信号传输的场景中基本都需要应用到此种芯片。那么,电气工程师在进行电路设计时到底该如何评估选择一
    华普微HOPERF 2025-01-20 16:50 163浏览
  • 临近春节,各方社交及应酬也变得多起来了,甚至一月份就排满了各式约见。有的是关系好的专业朋友的周末“恳谈会”,基本是关于2025年经济预判的话题,以及如何稳定工作等话题;但更多的预约是来自几个客户老板及副总裁们的见面,他们为今年的经济预判与企业发展焦虑而来。在聊天过程中,我发现今年的聊天有个很有意思的“点”,挺多人尤其关心我到底是怎么成长成现在的多领域风格的,还能掌握一些经济趋势的分析能力,到底学过哪些专业、在企业管过哪些具体事情?单单就这个一个月内,我就重复了数次“为什么”,再辅以我上次写的:《
    牛言喵语 2025-01-22 17:10 276浏览
  • 前篇文章中『服务器散热效能不佳有解吗?』提到气冷式的服务器其散热效能对于系统稳定度是非常重要的关键因素,同时也说明了百佳泰对于散热效能能提供的协助与服务。本篇将为您延伸说明我们如何进行评估,同时也会举例在测试过程中发现的问题及改善后的数据。AI服务器的散热架构三大重点:GPU导风罩:尝试不同的GPU导风罩架构,用以集中服务器进风量,加强对GPU的降温效果。GPU托盘:改动GPU托盘架构,验证出风面积大小对GPU散热的影想程度。CPU导风罩:尝试封闭CPU导风罩间隙,集中风流,验证CPU降温效果。
    百佳泰测试实验室 2025-01-24 16:58 57浏览
  • 随着AI大模型训练和推理对计算能力的需求呈指数级增长,AI数据中心的网络带宽需求大幅提升,推动了高速光模块的发展。光模块作为数据中心和高性能计算系统中的关键器件,主要用于提供高速和大容量的数据传输服务。 光模块提升带宽的方法有两种:1)提高每个通道的比特速率,如直接提升波特率,或者保持波特率不变,使用复杂的调制解调方式(如PAM4);2)增加通道数,如提升并行光纤数量,或采用波分复用(CWDM、LWDM)。按照传输模式,光模块可分为并行和波分两种类型,其中并行方案主要应用在中短距传输场景中成本
    hycsystembella 2025-01-25 17:24 73浏览
  •     IPC-2581是基于ODB++标准、结合PCB行业特点而指定的PCB加工文件规范。    IPC-2581旨在替代CAM350格式,成为PCB加工行业的新的工业规范。    有一些免费软件,可以查看(不可修改)IPC-2581数据文件。这些软件典型用途是工艺校核。    1. Vu2581        出品:Downstream     
    电子知识打边炉 2025-01-22 11:12 211浏览
  • 故障现象 一辆2007款日产天籁车,搭载VQ23发动机(气缸编号如图1所示,点火顺序为1-2-3-4-5-6),累计行驶里程约为21万km。车主反映,该车起步加速时偶尔抖动,且行驶中加速无力。 图1 VQ23发动机的气缸编号 故障诊断接车后试车,发动机怠速运转平稳,但只要换挡起步,稍微踩下一点加速踏板,就能感觉到车身明显抖动。用故障检测仪检测,发动机控制模块(ECM)无故障代码存储,且无失火数据流。用虹科Pico汽车示波器测量气缸1点火信号(COP点火信号)和曲轴位置传感器信
    虹科Pico汽车示波器 2025-01-23 10:46 143浏览
  •  万万没想到!科幻电影中的人形机器人,正在一步步走进我们人类的日常生活中来了。1月17日,乐聚将第100台全尺寸人形机器人交付北汽越野车,再次吹响了人形机器人疯狂进厂打工的号角。无独有尔,银河通用机器人作为一家成立不到两年时间的创业公司,在短短一年多时间内推出革命性的第一代产品Galbot G1,这是一款轮式、双臂、身体可折叠的人形机器人,得到了美团战投、经纬创投、IDG资本等众多投资方的认可。作为一家成立仅仅只有两年多时间的企业,智元机器人也把机器人从梦想带进了现实。2024年8月1
    刘旷 2025-01-21 11:15 820浏览
  • 项目展示①正面、反面②左侧、右侧项目源码:https://mbb.eet-china.com/download/316656.html前言为什么想到要做这个小玩意呢,作为一个死宅,懒得看手机,但又想要抬头就能看见时间和天气信息,于是就做个这么个小东西,放在示波器上面正好(示波器外壳有个小槽,刚好可以卡住)功能主要有,获取国家气象局的天气信息,还有实时的温湿度,主控采用ESP32,所以后续还可以开放更多奇奇怪怪的功能,比如油价信息、股票信息之类的,反正能联网可操作性就大多了原理图、PCB、面板设计
    小恶魔owo 2025-01-25 22:09 138浏览
  • 不让汽车专美于前,近年来哈雷(Harley-Davidson)和本田(Honda)等大型重型机车大厂的旗下车款皆已陆续配备车载娱乐系统与语音助理,在路上也有越来越多的普通机车车主开始使用安全帽麦克风,在骑车时透过蓝牙连线执行语音搜寻地点导航、音乐播放控制或免持拨打接听电话等各种「机车语音助理」功能。客户背景与面临的挑战以本次分享的客户个案为例,该客户是一个跨国车用语音软件供货商,过往是与车厂合作开发前装车机为主,且有着多年的「汽车语音助理」产品经验。由于客户这次是首度跨足「机车语音助理」产品,因
    百佳泰测试实验室 2025-01-24 17:00 61浏览
  • 现在为止,我们已经完成了Purple Pi OH主板的串口调试和部分配件的连接,接下来,让我们趁热打铁,完成剩余配件的连接!注:配件连接前请断开主板所有供电,避免敏感电路损坏!1.1 耳机接口主板有一路OTMP 标准四节耳机座J6,具备进行音频输出及录音功能,接入耳机后声音将优先从耳机输出,如下图所示:1.21.2 相机接口MIPI CSI 接口如上图所示,支持OV5648 和OV8858 摄像头模组。接入摄像头模组后,使用系统相机软件打开相机拍照和录像,如下图所示:1.3 以太网接口主板有一路
    Industio_触觉智能 2025-01-20 11:04 217浏览
  • 高速先生成员--黄刚这不马上就要过年了嘛,高速先生就不打算给大家上难度了,整一篇简单但很实用的文章给大伙瞧瞧好了。相信这个标题一出来,尤其对于PCB设计工程师来说,心就立马凉了半截。他们辛辛苦苦进行PCB的过孔设计,高速先生居然说设计多大的过孔他们不关心!另外估计这时候就跳出很多“挑刺”的粉丝了哈,因为翻看很多以往的文章,高速先生都表达了过孔孔径对高速性能的影响是很大的哦!咋滴,今天居然说孔径不关心了?别,别急哈,听高速先生在这篇文章中娓娓道来。首先还是要对各位设计工程师的设计表示肯定,毕竟像我
    一博科技 2025-01-21 16:17 195浏览
  • 飞凌嵌入式基于瑞芯微RK3562系列处理器打造的FET3562J-C全国产核心板,是一款专为工业自动化及消费类电子设备设计的产品,凭借其强大的功能和灵活性,自上市以来得到了各行业客户的广泛关注。本文将详细介绍如何启动并测试RK3562J处理器的MCU,通过实际操作步骤,帮助各位工程师朋友更好地了解这款芯片。1、RK3562J处理器概述RK3562J处理器采用了4*Cortex-A53@1.8GHz+Cortex-M0@200MHz架构。其中,4个Cortex-A53核心作为主要核心,负责处理复杂
    飞凌嵌入式 2025-01-24 11:21 159浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦