中间件的类别
首先我们理解一下中间件和通信中间件,中间件的定义是介于应用系统和系统软件之间的一种软件,它使用系统软件所提供的基础服务功能,衔接网络上应用系统的各个部分和不同应用,达到资源共享,共享功能的一些目的。
这个定义比较抽象,提炼一下就是它是介于应用和系统软件之间,最终目的就是要达到资源共享和功能共享。
整个系统主要的层级架构如下图所示:
上图中从下往上依次为:1. 硬件2. 操作系统3.主机、设施、Middleware 中间件4.分配的中间件5. 通用化组件服务6. 专业领域相关的服务中间件7. 应用程序
对于车载领域:我们不需要这么复杂的一个中间件,在操作系统上尽量是围绕主机、设施、中间件和发布分配数据的文件做一个设计。在这个层面从上图中可以看到有些 ROS、AP AUTOSAR 等中间件。
关于通信情景,本身数据的发布需要对各个节点做一些数据的发布,这个过程就相当于通信中间件要做一个数据发布应用,怎么样通过一些途径去取得另一个应用提供的一些数据。
本文分享的DDS 是以数据为中心的,数据分享的一个服务。
像 ROS、 AP AUTOSAR 它其实不仅仅只提供通信中间件。ROS 来源于机器人项目,它提供了一些执行器、传感器,一些库,Lib,方便上层开发机器人的用户设计 Application。
中间肯定也用到了数据发布的一个作用。在这块上,它也可以用 DDS 去实现这部分的一个功能。
上图最右侧是 AP AUTOSAR 的架构概览图,AP 中有一个提供数据通信的 ara::com 模块,还有 Persitency,执行管理,时间同步、健康管理等模块,这些都是 AP 这个中间件定义的,它是要去使用平台的资源和功能,通过这些模块作为中间件给上层应用程序提供功能。
然在 AP 的 ara::com 模块中,从网络绑定的角度来看,可以使用 DDS 或 SOME/IP。
DDS 组件
本文主要分享一下 DDS,从组件的层面,DDS 是一个通信中间件层,如下图所示。
上图中,中间一层是 DDS 的一个核心的组件,下面是传输层相关的协议,DDS 是基于以太网的,所以下方一些标准的以太网协议。
上图右下角列的 Share Memory ,实际上是在一个 SOC 里面,它的物理通道Share Memory 可以更快地使用 DDS 数据发布服务,它不需要走传输层,可以节约不少传输时间。
在各个组件层面它有一些 DDS 的标准协议,比如说上图最上方有 DDS C API、C++ API 。当然也可以有相应的 Java 的 API 。
C++ 现在用的比较多,核心的 DDS 协议叫 DCPS Data Centratic Publish and Subscribe,本文后面比较详细解释它到底协议里面去做哪些标准化的定义。
DDS 中还包含一个针对于数据传输层来线上传输的一些协议,叫Real Time Publish Subscribe,大家先留个印象。
OMG DDS Standards
OMG 制定了 DDS 相关的标准如下:
核心内容
DDS v1.4:DDS规范描述了分布式应用通信和集成的以数据为中心的发布-订阅(DCPS)模型。
DDSI-RTPS v2.3:定义了实时发布-订阅协议(RTPS)DDS互操作性线协议。
DDS-XTypes v1.3:定义了DDS类型系统和DDS数据的序列化表示。
DDS-Security v1.1:为兼容的DDS实现定义了安全模型和服务插件接口(SPI)架构。
类型语法和语言映射(IDL)
IDL4(接口定义语言)v4.2:定义了 IDL,一种用于定义数据类型和接口的语言,其方式独立于编程语言。这不是一个 DDS 标准,但 DDS 依赖于它。
其他:
API: DDS C++ API, DDS Java API
扩展: DDS-RPC v1.0, DDS-XML v1.0, DDS-JSON v1.0
网关: DDS-WEB v1.0, DDS-OPCUA v1.0, DDS-XRCE v1.0
DDS Automotive 应用示例
为了让大家直观一些,举个例子如下图所示:
未完待续。。。
1. 扫码或各大应用商店下载 "搞一下汽车电子"APP2. 图文板块直接搜
客服活动