本文作者:极氪软件及电子核心-托地

随着国内外新权势车厂的疾速崛起,汽车智能化程度一直晋升。整车地方计算平台,主动驾驶域控制器继续走热。

谈起主动驾驶,可能更多的人想到的是AI技术、如Mobileye视觉感知、地图、各类布局算法、管制、大数据。目前越来越多的主机厂聚焦于数据如何更高效和精确的通信,随着主动驾驶等级从L2向L2++甚至L3/L4过渡,对于数据传输要求越来越高。中间件开发和利用一下子被推到了风口浪尖。

谈到中间件,咱们不得不先讲一下操作系统OS。

操作系统有狭义和广义之分。

广义的操作系统大家都比拟相熟,手机设施上的ios、Android、车载零碎中Linux、QNX都是广义的操作系统,通常包含内核、文件系统、驱动以及局部协定栈整合在内核中。

狭义的操作系统个别蕴含操作系统内核、硬件驱动层和中间件。在各家新能源车厂高谈软件定义汽车时代已到来时,真正能全面把握芯片、操作系统、中间件、算法以及罕用常新的利用能力走在技术最前沿。其中狭义操作系统是外围中的外围,已成为国内外主机厂自主研发比拼的方向。


图1 狭义和广义OS框图

回头再来谈谈中间件。中间件是什么,按字面意思翻译过去就是两头一层组件。理论是介于操作系统/底层软件和应用软件之间的桥梁。整个系统软件能够通过中间件在不同的处理器架构和芯片间共享数据。

一套成熟的中间件给开发带来的收益往往是指数级别的提高,大大缩短开发周期和零碎稳定度、屏蔽底层硬件差异性做到对立的API接口。


图2 主动驾驶中间件利用

那么主动驾驶须要怎么的中间件?低时延、高带宽和多并发。

从整车功能域角度登程,主动驾驶是收集内部传感器数据量最大的模块,为了继续探测到车身周围各种简单环境信息,须要毫米波、摄像头和激光雷达配合以达到360度无死角感知。并且为了保障平安,所有数据都须要靠近实时的速度解决,为了保障大量数据的实时处理,较低的数据提早须要由高性能的计算单元和高带宽的网络通信,数据可轻易在不同内核中共享。


图3 主动驾驶360度传感器感知示意图


表1 传感器典型带宽

从上表中能够晓得随着自驾性能一直降级,对于传感器的传输数据带宽和传输提早要求也在一直晋升。为了满足此需要,业界各家自驾公司也在开发本人的主动驾驶中间件以满足要求。

ICEORYX:

博世在量产ADAS畛域拆卸率长期占据市场前三的份额,他们对于如何将主动驾驶数据高效流转的需要更为迫切,为此在大神Michael Pöhnl率领下,专门为主动驾驶开发了一套中文名叫“冰羚”,英文名ICEORYX的中间件。

如下面所说,大量主动驾驶相干的感知数据须要在整个零碎内实现疾速的流转,这里就不得不提一下过程间通信(Inter Process Communication)这个概念。拿大家最罕用的Linux零碎举例,不同过程之间流传或替换信息,因为不同过程地址空间互相独立,传递数据时不停的来回拷贝数据,建设和开释堆栈,这个不生成任何价值的拷贝的过程节约和占有了大量系统资源并产生了不冀望的提早。


图3 过程间通信

ICEORYX为了解决下面的问题,设计了一种“零拷贝”的内存共享技术来优化之前ADAS量产我的项目中遇到的困扰。

这种“零拷贝”通过事先定义好的通用接口,将须要生产的数据(图片原始RGB或者激光点云数据)放入由ICEORYX申请好的内存空间,而后引入“记数器”这个概念,来记录内存空间中各块数据是否被调用还是开释,当计数器为0时,就示意该块数据能够被开释。这样所有的数据调用都产生在共用的内存区域中,免去了各过程将数据拷贝到本人公有存储内,大大提高了数据通信的效率。

上面套用一张博世官网介绍资料中的图,基于共享内存的拷贝其实并不是一种翻新的通信机制,但ICEORYX采纳了公布/订阅架构、服务发现、和计数器相结合的机制。通过增加防止复制的应用程序编程接口,实现了所说的真正的零拷贝——一种从发布者到订阅者的端到端的办法,而无需创立一个拷贝。


图4 零拷贝通信 (援用1)

发布者将数据写入事先申请好的内存块中,订阅者能够收到这些内存块的实时状态,并且晓得哪些内存块正在解决中,哪些内存块将被开释。发布者能够在订阅者读取数据块的时候同时再次写入而不收到任何工夫烦扰和提早,因为即便之前的内存块在被读取中,发布者也能够抉择之前曾经调配好的新的内存块中操作。

ICEORYX是开源的,听从Apache-2.0许可证。任何集体或者团队都能够收费应用源代码,但如果须要过ASIL-B或ASIL-D等级性能平安认证,那还须要从博世购买相干的平安服务。

目前对于ICEORYX这套中间件来说最大的挑战还是须要有主机厂疾速搭载量产车上市,来真正测验其价值。另外因为主动驾驶感知信息品种越来越多,激光点云数据、摄像头RGGB帧、3D毫米波雷达指标信息以及4D毫米波雷达点云信息,整车信号数据等,如何高效申请和分配内存块也是实现真正“零拷贝”的前提,这少不了在理论我的项目中一直打磨优化。

ROS2:

接下来咱们再来看一下赫赫有名的ROS2。

说到ROS2不得不先聊一下ROS(Robot Operating System), ROS2正是从ROS倒退降级过去的。ROS最早开发进去是去适配机器人的一套开源软件系统,外面蕴含3000多个根底库、灵便的过程间通信机制、底层驱动、硬件形象等。

如前文所述,主动驾驶是非常复杂并对安全性要求很高,它蕴含了车道线检测、指标物检测、障碍物检测、决策、管制模块等;须要将这些性能各异的模块集成到一起,造成一个端到端系统。所以要找到一个适宜的中间件框架很不容易,ROS在学术界和机器人届宽泛应用、音讯机制灵便开发以及丰盛调试工具恰好合乎主动驾驶开发的需要。咱们看到国内主动驾驶黄埔军校百度在晚期Apollo1.0/2.0版本中正是选用了ROS框架。

然而在理论开发利用中,开发人员发现了ROS适配主动驾驶的不足之处。比方ROS通信提早太大,数据从公布节点到订阅节点之间须要进行拷贝,在机器人设计中可能还不是一个Block点,但在主动驾驶零碎中很显然会大大影响数据的传输效率。另外ROS的单Master节点机制也是一个瓶颈,所有的子节点通信都须要借助繁多的通信主节点。万一主节点呈现故障,整个零碎也会受到影响。为了解决ROS的显著缺点,百度Apollo在3.5版本后公布了自研的Cyber RT框架来取代ROS。


图5 以Master为核心的ROS交互机制

ROS社区和组织也意识到了不足之处,并于2016年底正式公布了ROS2 beta版,新一代的ROS之中,带来了整体架构的变革以解决前一代的有余。
ROS底层基于DDS(Data Distribution Service)通信机制,勾销了ROS上Master模式。DDS听从公布和订阅模式,创立全局的数据块。而后每一个数据的公布或者订阅者都是数据的参与者,能够读写全局的数据。同时也保留了ROS中Topic数据结构概念。


图6 基于Topic话题的公布/订阅流程

另外DDS一个重要特质是反对QoS(Quality of Service),满足在不同场景对于不同数据传输的实时性要求。每个数据传输都能够通过QoS策略抉择不同的选项进行配置,ROS2中反对传输期限、可靠性传输、历史信息等策略。


图7 反对QoS策略的DDS机制

当然目前ROS2整体稳定度和利用案例还远不如ROS,但领有了以上个性的ROS2零碎,咱们刮目相待。

极氪软件和电子核心,秉承平等、多元、共成长的价值观,对产品继续极致谋求,为用户提供用心体验。从地方计算、智能区域控制器、整车OTA、智能车身管制、整车软件等畛域登程,打造行业顶级的电子电气架构,为智能电动车保驾护航。

目前咱们始终在开发地方计算和区控制器内高效IPC通信并利用在量产我的项目中,除了会蕴含下面提到的共享内存和DDS技术外,还会用到SOME/IP协定来增强不同服务数据之间的传输效率。


图8 极氪中间件框图

另外ZEEKR OS也正在热气腾腾的开发测试中,作为地方计算SoC外围中间件,将治理整车服务(反对主动驾驶、车身电子管制、底盘、三电和智能座舱等性能继续迭代)、提供根底平台、高度分层解耦、分布式治理。

搭载ZEEKR OS的下一代3.0地方计算平台将采纳全栈自研,专一打造一套高效稳固的整车软件中间件,为主动驾驶、SOA和整车OTA服务提供外围竞争力并继续赋能。

参考资料:

  1. Michael Pöhnl - Bosch https://www.eclipse.org/commu...
  2. Simon Hoinkis - Bosch https://fosdem.org/2020/sched...
  3. Cn-ROS Wiki - wiki.ros.org
  4. 百度开发者核心 - Apollo ROS有何不同
  5. Expolring the performance of ROS2 https://dl.acm.org/doi/pdf/10...