车载通信架构 —— DDS协议介绍
车载通信架构 —— DDS协议介绍
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。
老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:
屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。
本文主要
-> 1、标准及发展简介
-> 2、概念介绍
-> 3、应用场景及价值意义
一、标准及发展简介
DDS 的全称为 Data Distribution Service(数据分发服务 ),是由OMG联盟在2004年发布的中间件协议和应用程序接口标准。采用发布 / 订阅模型,提供丰富的 QoS(Quality of Service)服务质量策略,可满足各种分布式系统实时通信的低延迟、高可靠性、可扩展性的需求。DDS 被广泛应用在航空航天、船舶、军事、工业、医疗、交通、能源等领域中。
在分布式系统中,DDS 中间件是处于操作系统和用户应用程序之间的软件层,如图 4.5-12 所示。它将应用程序从操作系统,网络传输和低级数据格式的详细信息中抽象出来,以接口定义语言模式提供了支持多种编程语言 API,从而使应用在不同的操作系统、编程语言和处理器体系架构之间交换信息。DDS中间件管理了数据格式、发现、连接、可靠性、协议、传输选择、QoS、安全性等底层细节。
随着SOA在汽车领域的发展和运用,面向服务的通信中间件SOME/IP标准协议被引入到基础软件架构标准中。随着基础软件软硬解耦、软软解耦的发展,应用和服务之间除了服务能力的提供,还出现数据共享的需求。DDS正是以数据为中心的通信中间件,用Topic为单元实现数据的共享,按照用户定义的方式存储、发布和订阅数据,支持运行在不同系统上,不同开发语言的应用可以分布式的互相收发数据。
二、概念介绍
DDS 在软件框架中的模型如下图所示。DDS 通信的要素包括:
->(Domain)代表一个通信平面,由Domain ID唯一标识,只有在同一个域内的通信实体才可以通信;如果考虑车内通信,可以只划分1个Domain,也可以按照交互规则或其他规则,定义多个Domain;
-> 域参与者(Domain Participant)代表域内通信的应用程序的本地成员身份,简单来说,就是说明同一数据域内的通信成员;
-> 主题(Topic)是数据的抽象概念,由TopicName标识,关联相应数据的数据类型(DataType),如果把车内所涉及的所有Topic集合在一起,这样就形成一个虚拟的全局数据空间“Global Data Space”,进一步弱化了节点的概念,所以域参与者已经不是节点的概念了;
-> 发布者(Publisher)发布者,发布主题数据,至少与1个DataWriter关联,通过调用DataWriter的相关函数将数据发出去;
-> 订阅者(Subscriber)订阅者,订阅主题数据,至少与1个DataReader关联。当数据到达时,应用程序可能忙于执行其他操作或应用程序只是等待该消息时,这样就会存在两种情况,同步访问和异步通知;
-> 数据写入者(Data Writer)数据写入者,类似缓存,把需要发布的主题数据从应用层写入到DataWriter中;;
-> 数据读取者(Data Reader)数据读取者,同样可以理解为一种缓存,从订阅者得到主题数据,随之传给应用层。
详细内容可参见如下示意图:
DDS软件框架模型
DDS软件框架模型
DCPS(Data-Centric Publish-Subscribe )模型中的4个基础的概念:
-> 1、Publisher:它是负责创建和配置其实现的 DataWriters 的 DCPS 实体。 DataWriter 是负责实际发布消息的实体。每个 DataWriter 都有一个分配的 Topic,在该 Topic 下发布消息。
-> 2、Subscriber:它负责接收在其订阅的 Topic 下发布的数据。它为一个或多个 DataReader 对象提供服务,这些对象负责将新数据的可用性传达给应用程序。
-> 3、Topic:它是绑定发布和订阅的实体,在 DDS 域中是唯一的。通过 TopicDescription,它允许发布和订阅数据类型的统一。
-> 4、Domain:它用于链接所有发布者和订阅者,属于一个或多个应用程序,它们在不同主题下交换数据。这些参与域的单个应用程序称为 DomainParticipant,DDS域由Domain ID 标识。DomainParticipant通过定义Domain ID 以指定它所属的DDS域。具有不同Domain ID 的两个 DomainParticipants不知道彼此在网络中的存在。因此,可以创建多个通信通道。这适用于涉及多个DDS应用程序的场景,它们各自的 DomainParticipants相互通信,但这些应用程序不得干扰。DomainParticipant 充当其他 DCPS 实体的容器,充当发布者、订阅者和主题实体的工厂,并在域中提供管理服务。
三、应用场景及价值意义
作为AP中中间件协议的常用协议,DDS还广泛应用于如下地方:
-> 军事&航空航天
NASA Launch Control System,NASA 发射控制系统,DDS用于超过40万个控制点 , 能够智能地分发来自数千个传感器的数据,并允许在控制室进行数据的存储和查看。
另外,Next Generation Navy System基于DDS标准的、高性能的中间件促进系统更好地实现互操作性,并作为未来架构设计的基础。
-> 智能能源
Large Scale Fusion Reactor System,该系统是DDS用于聚变能源中心的远程控制系统的数据监控和采集。SIEMENS WIND POWER也使用DDS可用于控制多个分布式的风力涡轮机,通过数据的交互和采集提高发电效率。
-> 医疗设备&健康卫生系统
用于集成医院的医药诊断系统。DDS将设备、服务连接在一起,以支持实时的显示。DDS 可用于支持需要高效控制大规模数据流传输的系统,如CT成像系统等。
-> 仿真&测试系统
飞行员训练模拟器。CAE用DDS进行高效的数据分发,并作为下一代飞行模拟器的架构.
-> 汽车领域(敲重点)
用于 Hardware-in-the-loop(HIL)仿真,Audi使用DDS中间件实现测试系统中数百个设备的数据的实时交互。
DDS用于大众智能车的驾驶辅助及综合安全系统,用于结合来自雷达、激光测距仪和视频的数据,来协助安全操作,比如能够检测驾驶员的睡意,还能够检测车道偏离等。
Baidu Apollo系统中集成了DDS。
AUTOSAR 的AP平台在 R18-03 版本开始支持DDS,CP平台也已经开始规划支持DDS。
部分自动驾驶的SoC芯片预留了DDS接口,ROS2、Cyber RT 等操作系统也集成了开源DDS。
而对于面向服务的通信协议,DDS与SOME/IP各自的优劣?DDS能否替换SOME/IP等问题不在本文讨论。
搁笔分享完毕!
愿你我相信时间的力量
做一个长期主义者!
相关文章:

车载通信架构 —— DDS协议介绍
车载通信架构 —— DDS协议介绍 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和…...

nginx根据不同的客户端设备进行转发请求——筑梦之路
这里主要介绍七层负载方式实现。 环境说明: pc端 web-1 苹果ios端 web-2 安卓Android端 web-3 负载均衡 web-lb 配置示例: pc端: server {listen 9000; #监听9000server_name pc.xxx.com;charset utf-8;location / {root /…...

增强LLM:使用搜索引擎缓解大模型幻觉问题
论文题目:FRESHLLMS:REFRESHING LARGE LANGUAGE MODELS WITH SEARCH ENGINE AUGMENTATION 论文地址:https://arxiv.org/pdf/2310.03214.pdf 论文由Google、University of Massachusetts Amherst、OpenAI联合发布。 大部分大语言模型只会训练一次&#…...

WPF向Avalonia迁移(一、一些通用迁移项目)
通用变更 WPF:Visibility 其他参考文档 WPF: <TextBlock Visibility"Visible"/><TextBlock Visibility"Collapsed"/><TextBlock Visibility"Hidden"/>Avalonia : <TextBlock IsVisib…...

lua学习笔记
单行注释: 多行注释: 命名: Lua不支持下划线大写字母,比如:_ABC 但支持:_abc 关键字: 全局变量: 直接变量名 内容就是全局 局部变量: 加上local即可 nil࿱…...

修改 ModelScope 默认缓存路径
修改 ModelScope 默认缓存路径 设置 MODELSCOPE_CACHE 和 MODELSCOPE_MODULES_CACHE 两个环境变量。 export MODELSCOPE_CACHE<your_favourite_path>/hub export MODELSCOPE_MODULES_CACHE<your_favourite_path>/modelscope_modules完结!...

【ES实战】索引别名的使用说明
索引别名 文章目录 索引别名带有过滤器的别名RoutingWrite Index REST单一添加一个别名示例: 索引创建是增加别名删除别名检索现有别名示例: 索引别名可以通过API的方式进行操作一个索引别名可以映射到一个或一个以上的索引索引名和索引别名不能重复,在集群中都是唯…...

QT信号与槽机制 和 常用控件介绍
QT信号与槽机制 1、信号(signal): 所谓信号槽 (观察者模式)信号本质是事件。信号展现方式就是函数。当某一个事件发生之后,则发出一个信号(signal). 2、槽(slot): 就是对信号响应的函数,槽就是一个函数。槽函数与普通函数区别槽函数可以与一个信号关联&…...

【css-banner图片自适应】
<picture><source media"(max-width: 480px)" srcset"图片地址"><source media"(min-width: 481px)" srcset"图片地址"><img src"图片地址" id"homebanner"></picture>img{height:…...

【k8s管理操作】
k8s管理操作 一、k8s管理操作1.陈述式资源管理2.声明式资源管理 二、k8s基础信息常看(命令)增删改查项目的生命周期:创建-->发布-->更新-->回滚-->删除 headless clusterIP 无头模式 金丝雀发布(Canary Release&#…...

【java基础学习】之DOS命令
#java基础学习 1.常用的DOS命令: dir:列出当前目录下的文件以及文件夹 md: 创建目录 rd:删除目录cd:进入指定目录 cd.. :退回到上级目录 cd\ : 退回到根目录 del:删除文件 exit:退出dos命令行 1.dir:列出当前目录下的文件以及文件夹 2.md: 创建目录 …...

学习记录——StyleGAN2+SA-UNet
SA-UNet for Retinal Vessel improvment using StyleGAN2 作者提出了一种改进视网膜图像分割的方法,通过创建图像及其相应的分割地图来实现。作者的解决方案包括使用DRIVE数据集1对StylGAN2进行训练,并使用目前在分割DRIVE图像方面取得最先进结果的SA-UNet模型对新合成的图像…...

JVM222
文章目录 JVM222运行时数据区的内部结构线程程序计数器(PC寄存器)虚拟机栈 JVM222 运行时数据区的内部结构 概述 本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载器加载完成后的阶段,如下图: …...

C语言 指针
含义 从根本上看,指针是一个值为内存地址的变量(或数据对象)。指针变量的值是地址。 要创建指针变量,先要声明指针变量的类型 作用 1.实现复杂的数据结构,例如数组、链表、队列和堆栈等; 2.能方便地表…...

YOLOv8血细胞检测(7):小目标大目标一网打尽,轻骨干重Neck的轻量级GFPN | 阿里ICLR2022 GiraffeDet
💡💡💡本文改进:小目标大目标一网打尽GFPN,提升大小目标检测性能 GFPN | 亲测在血细胞检测项目中涨点,map@0.5 从原始0.895提升至0.904 收录专栏: 💡💡💡YOLO医学影像检测:http://t.csdnimg.cn/N4zBP ✨✨✨实战医学影像检测项目,通过创新点验证涨点可…...

广度优先(BFS)(例子:迷宫)
广度优先搜索算法(BFS)是一种用于图形和树数据结构的搜索算法。该算法从根节点开始搜索,然后依次访问每个相邻节点。在搜索过程中,每个节点都标记为已访问,以避免重复访问。BFS算法适用于寻找最短路径的问题࿰…...

【安卓源码】安卓Watchdog 机制
在Android系统中,也设计了一个软件层面Watchdog,用于保护一些重要的系统服务,比如:AMS、WMS、PMS等,由于以上核心服务运行在system_server进程里面,所以当以上服务出现异常时,通常会将system_se…...

inscode连接不上gpu,持续8小时,为了数据不丢失续费了6小时,我只想知道什么时候可以连接
并且给我相应的补偿...

QT位置相关函数
Qt(Qt Framework)是一个流行的C应用程序开发框架,提供了丰富的位置相关函数和类,用于处理窗口、窗口小部件和图形的位置和几何操作。以下是一些常用的Qt位置相关函数和类: QPoint:QPoint类表示一个二维点的…...

vulnhub靶场 Kioptrix-level-1
简介: vulnhub是一个提供靶场环境的平台。而Kioptrix-level-1就是一个对新手比较友好的靶场。初学渗透的同学可以做做试试看,项目地址如下。 项目地址:Kioptrix: Level 1 (#1) ~ VulnHub 信息收集 查看本机IP,靶机跟kali都是使用…...

全网最细,真实企业性能测试落地实施,一文带你快速打通...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、什么是性能测试…...

三十一、【进阶】B+树的演变过程
1、B树简单介绍 (1)介绍:B树也属于B树,是B树的变种 (2)特点:所有的数据都位于叶子节点上,叶子节点上的所有元素形成了一个单项链表 (3)图示: 2…...

算法通过村第十三关-术数|白银笔记|术数高频问题
文章目录 前言数组实现加法专题数组实现整数加法字符串加法二进制加法 幂运算专题求2的次幂求3的次幂求4的次幂 总结 前言 提示:人心本易趋死寂,苦难之后,焕然重建,激荡一阵,又趋麻木。 --苏枕书《有鹿来》 我们继续看…...

Java 线程的生命周期
🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,…...

Vue页面监听键盘按键的多种方法
在Vue页面中,可以使用多种方法来监听键盘按键。以下是至少五种常用的方法: 使用keydown或keyup指令来绑定键盘按键事件。 <template><div><input type"text" keydown.enter"handleEnterKey" /></div> <…...

解析硬件连通性测试的重要性及测试方法
在现代科技世界中,硬件设备的复杂性和多样性已经达到了前所未有的水平。无论是计算机、智能手机、物联网设备还是嵌入式系统,各种硬件组件的协同工作对于设备的正常运行至关重要。硬件连通性测试是确保这些组件相互配合无误的重要步骤。 一、硬件连通性测…...

Hive窗口函数回顾
1.语法 1.1 基于行的窗口函数 Hive的窗口函数分为两种类型,一种是基于行的窗口函数,即将某个字段的多行限定为一个范围,对范围内的字段值进行计算,最后将形成的字段拼接在该表上。 注意:在进行窗口函数计算之前&#…...

flink自定义窗口分配器
背景 我们知道处理常用的滑动窗口分配器,滚动窗口分配器,全局窗口分配器,会话窗口分配器外,我们可以实现自己的自定义窗口分配器,以实现我们的自己的窗口逻辑 自定义窗口分配器的实现 package wikiedits.assigner;i…...

iOS CGRect CGPoint NSRange等结构体的NSLog打印输出
iOS的UIKit里提供了UIGeometry.h内有各结构体转换成NSString的方法,可用于打印输出; UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UIKIT_EXTERN NSString *NSStringFromCGVector(CGVector vector); UIKIT_EXTERN NSString *NSStringFr…...

Viper FTP Mac/ftp管理工具
Viper FTP 是一个用于文件传输和管理的 Mac 应用程序。它允许用户上传、下载和管理远程服务器上的文件,以及在不同本地文件夹之间传输文件。 Viper FTP 支持广泛的文件传输协议,包括 FTP、SFTP、WebDav、Amazon S3、Google Drive 等。它还包括文件同步、…...