车载通信与DDS标准解读系列(2):DDS标准

2024-04-01 10:52

本文主要是介绍车载通信与DDS标准解读系列(2):DDS标准,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

▎汽车智能化与车载通信

在这个汽车智能化迅猛发展的时代,特别是智能驾驶技术的快速迭代,对车载通信的需求也越来越高,传统的通信方案开始无法满足通信系统的多样性需求。为了适应这一趋势的发展,我们需要一种灵活、可靠、低延迟且具有高安全性的通信方案。DDS作为一种高效、可靠的数据通信技术,正逐渐在汽车行业中崭露头角。

在接下来的篇章中,我们将认识DSS,探讨基本概念和原理,弄清楚DDS为什么可以适应当前车载通信的需求。之后会带领大家打开DDS标准一探究竟,更好地理解DDS在车载通信系统中的优势和价值。

▎什么是DDS

DDS (Data Distribution Service) 即数据分发服务,是一种中间件标准,中间件是指位于操作系统和应用程序之间的软件层,用于协调和管理不同软件组件之间的通信和交互。它提供了统一的接口和通信机制,使不同应用程序可以在不同的环境中进行互操作。DDS为分布式数据通信提供解决方案,以便不同的应用程序可以相互交流和协作,目的是支持高性能、实时和可靠的数据传输。

DDS具备以下几个特点:

  • 以数据为中心的发布订阅模型:DDS基于数据为中心,可以实现高效的数据传输和共享。数据发布者将数据发布到DDS网络中,订阅者可以选择订阅感兴趣的数据,并接收到相应的数据更新。
  • 支持多种QoS(Quality of Service)策略:DDS支持多达22种QoS策略,用于定义数据传输的质量要求。可以根据具体应用需求进行配置和调整,以满足不同的性能和可靠性要求。
  • 大规模的可扩展性:DDS具备大规模的可扩展性,能够适应复杂的分布式系统和大量的数据交换。它支持灵活的拓扑结构和节点间的动态发现,可以方便地扩展和集成新的节点和功能。
  • 较好的安全性:DDS提供了一系列的安全机制,用于保护数据的传输和存储。它支持数据加密、身份验证、访问控制等安全特性,可以有效地防止数据泄露和未经授权的访问。

DDS与专门用于车载通信系统的SOME/IP有所不同。DDS最初由OMG(Object Management Group)组织于2003年发布,目的是为了满足现代实时系统的需求,在物联网、工业自动化、航空航天、国防等多个领域均得到广泛应用。随着汽车电子系统对车内通信传输性能、安全性和灵活性提出更高要求,越来越多的OEM开始采用DDS作为通信解决方案。

▎打开DDS标准

了解了DDS是什么,有什么特点之后,我们深入了解一下DDS标准到底介绍了什么?

从OMG组织2003年发布的DDS v1.0版本至今,DDS标准经历了多次迭代和内容拓展。目前,DDS标准可以分为4个部分:核心标准、扩展标准、网关标准和API标准。其中,核心标准包括了4个协议:

  • DDS:主要描述了DCPS模型和QoS策略
  • DDSI-RTPS:定义了DDS基于有线传输的通信行为、报文格式等内容
  • DDS-XTYPES:描述了数据的序列化表示及TypeSystem
  • DDS-SECURITY:描述了四类security策略,如认证、数据加密等

在这里插入图片描述
除了核心协议之外,扩展标准中的DDS-RPC对车载通信应用来说同样是非常重要的内容,其定义了如何使用DDS实现RPC通信。此外,正在开发中的DDS标准DDS-TSN也备受关注。这些标准的开发旨在进一步完善DDS协议,使其适用于更广泛的实时系统应用场景。

本次我们会重点介绍核心协议中的DDS标准。它涵盖了两个主要部分:

  1. DCPS(Data-Centric Publish-Subscribe)模型:是DDS的核心模型,它定义了数据发布者和订阅者之间的交互方式。
  2. QoS(Quality of Service)策略:它为数据传输提供了质量服务。DDS的QoS策略非常丰富,包括实时性、可靠性、带宽控制等。通过配置和调整这些QoS策略,实现不同的通信要求。

DCPS模型

DCPS(Data-Centric Publish-Subscribe)模型定义了应用程序在DDS中发布和订阅数据对象的功能。发布和订阅很容易理解,"Publisher"发布者将"Topic"主题发布出来,"Subscriber"订阅者则对感兴趣的主题进行订阅。"Topic"主题是DDS中定义的一个抽象概念,它代表了一类数据的集合,用于标识一组相关的数据。那么当我们要发布或订阅内容时,这些数据从何而来,又该去向何处?

这个问题的答案同样在DCPS基本概念里,我们需要了解"DataWriter"和"DataReader"。在发布信息时,数据通过"DataWriter"传递给"Publisher"。对于"Subscriber",当订阅数据后,需要通过"DataReader"来访问和接收具体的数据。这里需要注意的是,一个"DataWriter"/“DataReader"只能对应一个"Publisher”/“Subscriber”,也可以理解成前者是由后者创造的,而一个"Publisher"/“Subscriber"可以创造多个"DataWriter”/“DataReader”。当我们想发布不同的"Topic"时,可以使用不同的"DataWriter"来向发布者传递数据。

在这里插入图片描述
至此我们知道了DCPS的几个基础概念:

  • Publisher/Subscriber(发布者/订阅者):发布者负责将数据发布到特定的主题(Topic)中,而订阅者则通过订阅相关主题来接收所需的数据。
  • DataWriter/DataReader(数据写入者/数据读取者):DataWriter负责将数据写入到特定的主题中,而DataReader负责从主题中读取相应的数据。
  • Topic(主题):主题是DCPS中定义数据传输的逻辑分类和组织单元。它可以看作是一种数据的标签,用于区分不同类型的数据。

当我们理解了几个基础概念后,再将视野放大一些,如果有非常多的"Publisher", “Subscriber”, "Topic"该如何处理?

DCPS模型通过引入全局数据空间(Global Data Space)来解决这个问题。全局数据空间是一个集中存储和管理所有数据对象的共享空间。一个全局数据空间即一个DDS域(DDS Domain),DDS域是一个逻辑上的容器,它将所有的"Publisher", “Subscriber”, “Topic"集中在一个空间中,用于组织和管理相关的数据对象。在DDS域中,有一个关键的概念"Domain Participant"域参与者。域参与者是一个抽象的实体,主要负责创建和管理"Publisher”, “Subscriber”, “Topic”。

需要注意的是,不同的Domain之间是相互独立的,它们不能直接进行通信或访问对方的数据。每个Domain都被分配一个唯一的Domain ID(域标识),通过该ID可以唯一地识别一个Domain。应用程序可以通过指定特定的Domain ID来创建Domain Participant(域参与者),以获取相应Domain的访问权限。

现在我们又了解到了DCPS宏观上的两个新的概念:

  • Domain(域):域是一个逻辑上的概念,基于不同的应用需求、安全性要求或其他特定的业务需求将不同的数据通信划分为不同的区域。在同一个域内,数据的发布者和订阅者可以进行数据的交换和共享。
  • Domain Participant(域参与者):域参与者表示在特定域中的一个实体。它是数据的发布者、订阅者和Topic的创造者及管理者,负责管理DDS中的实体对象和通信配置。

在这里插入图片描述
除了上述这些概念之外,DCPS提供了多种策略来满足不同的发布和订阅需求。对于订阅方来说,DDS提供了以下两种基础策略:

  • Listen(监听):订阅者可以使用监听方式来接收数据。它会一直等待,直到接收到数据为止。这种方式是阻塞型的,即订阅者在接收到数据之前会一直等待。
  • StatusCondition(状态条件):使用Condition和Waitset(条件和等待集),订阅者可以实现异步数据访问。可以为一个或多个条件对象设置条件,然后等待条件满足或特定事件发生。这种方式是非阻塞的,订阅者可以继续执行其他操作,而不必一直等待。

通过选择适当的策略,订阅者可以根据不同的需求进行数据访问和处理。监听方式适用于需要及时响应并处理数据的场景,而条件和等待集方式适用于需要异步处理数据或等待特定条件发生的场景。

QoS服务质量

QoS(Quality of Service)是一种用于确定通信系统中信息传输质量的策略。QoS策略用于满足不同应用场景下对信息交互的特殊需求。与SOME/IP相比,DDS的QoS数量可谓相当丰富。目前,DDS提供了22种不同的QoS策略,它们可以独立或组合使用。通过定义和配置一系列QoS参数和策略,能够在数据传输过程中实现对带宽、延迟、可靠性和安全性等的控制和优化。

当定义一个QoS策略时,我们首先要了解他的含义和Value(配置值)的定义,需要注意的是QoS必须定义一个默认值。除此之外还有以下三点需要定义:

  • Concerns: 表示QoS可为哪些实体配置,包括:Topic, DataWriter, DataReader, Publisher, Subscriber, and DomainParticipant。
  • RxO: 兼容设置。YES即表示通信两端要求兼容,NO表示可独立配置,N/A表示该Qos只能在一端配置。
  • Changeable: Entity创建后是否可改变QoS配置,YES/NO。

在这里插入图片描述
由于DDS提供了较多的QoS策略,我们以其中三个重要的QoS为例来介绍:

Durability(持久性):该策略用于确定数据的持久性存储方式。它可以设置为"VOLATILE"数据不进行永久储存,"TRANSIENT"数据保留在内存中,"TRANSIENT_LOCAL"数据保留在DataWriter的内存中,"PERSISTENT"数据将保存在永久存储中。在车载通信系统中,Durability可以确保重要数据在异常情况下不会丢失。同时,持久性存储还可以支持数据的历史记录和回放,为数据分析、故障排查等提供有力支持。根据具体应用场景和需求来灵活配置Durability,以实现最佳的持久性存储效果。

在这里插入图片描述
Reliability(可靠性):该策略用于确保数据传输的可靠性。它可以设置为"BEST_EFFORT"或"RELIABLE",前者表示尽力而为的传输,不保证可靠传输,数据可能会丢失或重复,适用于某些实时性要求较高的应用场景。后者表示数据以可靠的方式发送,保证数据的传输和接收的可靠性。数据不会丢失,确保所有订阅者都可以接收到相同的数据。我们可以依据对延时和可靠性的实际需求来进行选择。

在这里插入图片描述
Partition(分区):该策略通过一组字符串来定义发布者和订阅者的分区。分区是一种逻辑上的划分,用于将数据发布者和数据订阅者按照一定的规则进行分组。当发布者和订阅者使用相同的分区标识符时,它们将进行匹配并允许进行数据交互。这样可以实现对数据的精确过滤,实现灵活的数据管理。

在这里插入图片描述
以上仅是几个常见的QoS策略示例,DDS还提供了其他许多策略,通过配置和组合这些策略,以满足不同应用对网络通信服务质量的需求。

▎结语

由于车载通信领域的发展对通信方案提出了更高的要求,DDS作为一种灵活、可靠、低延迟且具有高安全性的通信方案,逐渐成为汽车通信系统的选择。

经过对DDS的首要核心标准的解析,我们已经了解到DDS基于数据为核心的发布-订阅的DCPS模型以及多种QoS策略。通过DDS的合理模型设计和策略配置,能够实现高效的数据传输,并满足车载通信中不同应用场景的需求。那么,在车载系统中,我们应该如何通过DDS来实现通讯,又如何通过网络协议进行数据传输呢?对于这些问题,将会在对DDS标准的下一份核心协议《DDSI-RTPS》的解读中找到答案,敬请期待。

了解更多:请致电 010-64840808转6115或发邮件至market_dept@hirain.com(联系时请说明来自CSDN平台)

这篇关于车载通信与DDS标准解读系列(2):DDS标准的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/866977

相关文章

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

SpringCloud负载均衡spring-cloud-starter-loadbalancer解读

《SpringCloud负载均衡spring-cloud-starter-loadbalancer解读》:本文主要介绍SpringCloud负载均衡spring-cloud-starter-loa... 目录简述主要特点使用负载均衡算法1. 轮询负载均衡策略(Round Robin)2. 随机负载均衡策略(

解读spring.factories文件配置详情

《解读spring.factories文件配置详情》:本文主要介绍解读spring.factories文件配置详情,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录使用场景作用内部原理机制SPI机制Spring Factories 实现原理用法及配置spring.f

Spring MVC使用视图解析的问题解读

《SpringMVC使用视图解析的问题解读》:本文主要介绍SpringMVC使用视图解析的问题解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC使用视图解析1. 会使用视图解析的情况2. 不会使用视图解析的情况总结Spring MVC使用视图

Linux中的进程间通信之匿名管道解读

《Linux中的进程间通信之匿名管道解读》:本文主要介绍Linux中的进程间通信之匿名管道解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基本概念二、管道1、温故知新2、实现方式3、匿名管道(一)管道中的四种情况(二)管道的特性总结一、基本概念我们知道多

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

C++ Primer 标准库vector示例详解

《C++Primer标准库vector示例详解》该文章主要介绍了C++标准库中的vector类型,包括其定义、初始化、成员函数以及常见操作,文章详细解释了如何使用vector来存储和操作对象集合,... 目录3.3标准库Vector定义和初始化vector对象通列表初始化vector对象创建指定数量的元素值

解读docker运行时-itd参数是什么意思

《解读docker运行时-itd参数是什么意思》在Docker中,-itd参数组合用于在后台运行一个交互式容器,同时保持标准输入和分配伪终端,这种方式适合需要在后台运行容器并保持交互能力的场景... 目录docker运行时-itd参数是什么意思1. -i(或 --interactive)2. -t(或 --

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告: