自动驾驶软件架构之:中间件与SOA(一)
2021年11月10日 09:53浏览:3096
自动驾驶软件架构之:中间件与SOA,共计56759字,分成三篇文章推送,对文章有兴趣者,请收藏本文并持续跟进。
在此,也对未动科技肖猛肖总表示由衷的感谢!感谢您为大家呈现如此优质的内容!
前言
中间件基础概念
1.1 典型的中间件产品的介绍
1.1.1 CORBA 及其衍生物
-
使用接口定义语言(IDL)进行规范化的通讯协议描述,让应用开发者关注通讯内容的业务语意,不需要去定义协议报文的细节。 -
以本地函数调用的方式对远程对象进行操作,中间件对应用层屏蔽具体通讯的细节。
1.1.2 互联网时代的企业级中间件
1.1.3 轻量级的 RPC 框架
1.1.4 消息中间件
1.2 中间件的产品概念
图中红色边框的部分,是本文讨论的内容范围,这些在自动驾驶相关的中间件技术中都会涉及到。
1.2.1最小核心与两个应用领域
1.2.2 Web应用领域
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.2.3 车载应用领域
中间件的关键技术
2.1泛化的RPC概念模型
2.2接口定义语言
2.2.1 IDL示例
2.2.2 数据类型支持能力
2.2.3 接口描述能力
2.2.4 广播与属性
2.2.5 高级特性
2.3 通讯通道与通讯协议的可替换性
2.4 SOME/IP协议
-
以太网 -
SOA 通讯
-
为什么需要SOME/IP协议,或者说需要它解决什么问题 -
SOME/IP 是什么,不是什么,或者说它定义了什么,没有定义什么 -
SOME/IP 与以太网的关系 -
SOME/IP 如何支持SOA服务进行通讯
2.4.1 为什么需要SOME/IP协议
-
速度低,普通Can <500kbps, 高速Can 1Mbps, Can FD 5Mbps -
有效数据载荷之外的额外开销大,甚至超过50% -
报文有效数据长度太小,普通Can 8字节,Can FD 64 字节
-
速度提高:基于以太网,典型车载以太网有100Mbps,1000Mbps的以太网也很常见,尤其是在智能座舱和智能驾驶的域控制器中,千兆以太网是标配。将来随着光纤以太网的应用,速度达到1G~10Gbps 也不会太远。 -
报文长度扩大:基于UDP协议 时 ,SOME/IP 报文的长度最大可以有1400字节,超过1400字节,可以使用TCP协议。Classic AutoSAR 有一个 SOME/IP TransportProtocol [18] ,这个协议支持对超过1400字节的报文进行分隔传输。 -
SOME/IP 协议的设计上引入了面向服务的概念,有利于各种车载应用的模块化设计和互操作。
-
每个协议有一个报文格式,SOME/IP-SD的报文格式是基于SOME/IP报文格式 -
跟报文格式相关的数据交换的内容和时序的约定
2.4.3 SOME/IP 不是什么
-
没有定义数据序列化机制 -
没有定义接口定义语言形式 -
没有定义数据传输的连接管理机制(对TCP) -
没有定义中间件“运行时”应该以怎样的方式调度RPC请求 -
没有定义应用软件的编程接口
2.4.4 SOME/IP与以太网
UDP 还是 TCP
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
TCP 有一个连接建立的时间,根据请求和接收端的距离,服务器负载情况,网络负载情况,时间不定,从零点几毫秒到几百毫秒不等。如果每次“请求/响应”动作不能共享同一个连接,就每次都要新建一个连接。
-
TCP数据传输时,有一个“慢启动”的过程。因为TCP协议栈不知道当前物理通道的实际带宽是多少,它会以一个较低的速度发送数据,如果丢包率很低就逐步提高速度,当丢包率提高,确认时间变长就再降低速度,最后稳定到一个合适的传输速率。
-
TCP 只能一对一连接。SOME/IP 协议中有 Event 和 Field 消息类型。请求者可以要求订阅 Event消息 或 Field 的变化。如果使用TCP,要实现这个要求就需要服务提供者向多个订阅客户端每个都发起一条TCP连接,数据也要发送多次。
-
不用建立连接,直接发送数据 -
发送速率没有约束,但是接收方收不到会丢弃,需要发送方选择一个合适的发送速率 -
不保证顺序,那就让SOME/IP 报文不超过一个UDP报文的有效载荷大小,就不用把SOME/IP数据在UDP层拆成多个包。 -
UDP不保证可靠到达,那就要在SOME/IP 的协议实现层来做错误处理,比如重新发送SOME/IP请求 -
UDP 可以支持广播或多播,适合用来支持 Event 和 Field 类型的数据传输。
关于UDP数据包长度
TCP/UDP 之外的其它选择
-
支持在一个连接上同时进行多个数据流程的传递(TCP只允许一个),这可以让 SOME/IP通过一条连接在多个流上同时发起并发的请求。 -
以数据块为单位传输的(TCP是以字节为单位),让 SOME/IP把一次 RPC调用包装在一条数据块中
-
简化了连接的建立过程,加快了连接的速度 -
支持一个连接中多个传输流 -
多种手段改进了拥塞控制算法,
2.4.5 SOME/IP 与RPC
我们结合 SOME/IP 的协议来看它对 RPC的支持。报文格式如下:
define org.genivi.commonapi.someip.deployment for interfacecommonapi.examples.HelloWorld {
2.4.6 SOME/IP 与消息通讯
2.5 共享内存及零拷贝
2.5.1 共享内存加速的必要性
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.5.2 具体技术问题及冰羚(iceoryx)介绍
进程地址空间与共享内存
多帧数据缓存、流控、发布订阅
-
“环视拼接算法”需要将4个摄像头的画面进行畸变矫正后拼接成一个顶视图画面,为了人观看流畅,需要至少30fps 帧率 -
“障碍物检测算法”需要检测画面中的障碍物,因为是低速场景,要求15fps的帧率 -
“停车位检测算法”需要检测画面中的划线停车位,需要10fps 的帧率 -
“行车记录仪”将画面编码保存为视频数据,需要20fps 的帧率。
-
产生的数据是连续的多帧 -
有多个消费者 -
多个消费者的帧率不同
零拷贝
2.5.3工程上的其它难题
2.6 数据的序列化
2.7 异步IO与任务调度
2.8 QoS
可靠性(Reliability)
截止时间(Deadline)
重试次数(RetryCount)
2.9 多语言支持
关于未动科技
作者简介
肖猛,现任未动科技研发VP,负责高性能高安全自动驾驶系统软件的研发。拥有二十年计算机软件体系架构设计经验。曾在载人航天,通讯,汽车等领域基于异构嵌入式平台上实现了高可靠性的软件架构。主导了多个从嵌入式到云端多个大型商业项目的开发实施。
技术邻APP
工程师必备
工程师必备
- 项目客服
- 培训客服
- 平台客服
TOP




















