不谈硬件,不谈软件,谈谈自动驾驶的中间件
2021-03-26 博客文章

本文作者为Nullmax纽劢科技系统平台总监苗乾坤博士,首发于汽车电子产业联盟主办的《智驾电子》刊物第8期,原标题为:浅析自动驾驶中间件。


对于大多数关注自动驾驶的人来说,听得最多的是各种各样的上层应用软件和算法,以及芯片、传感器和转向、制动这样的新老硬件,中间件是一个少人问津的名词。

但中间件却也是极为重要的一环,它一定程度上决定了自动驾驶这件事“能不能做好”。尤其是随着自动驾驶产业化进程的深入,量产纷纷提上各家日程,越来越多人意识到中间件的重要性和必要性。

在早期开发中,中间件可以化整为零,将巨大的软件工程分解成若干小任务,分散解决。在后期应用时,它又可以化零为整,像拼积木一样,根据需求将一个个模块组合成一个整体,严丝合缝。

中间件的作用不胜枚举,贯穿自动驾驶开发和应用的始终。如果将它的特点淋漓尽致地发挥出来,对于自动驾驶的量产将会大有裨益。


一、智能化浪潮的“新基建”

我们可以看到当前汽车发展的很多趋势,比如“软件定义汽车”。借助于强大的软件和算法,很多新功能被开发出来,软件升级赋予了汽车“常用常新”的可能,软件订阅开始出现,OTA成为了“新常态”。

同时,汽车硬件的发展也日新月异。芯片算力大幅增长,摄像头像素呈翻倍之势,激光雷达出现在更多新车规划上……没有谁能够断言车上的传感器应该有多少,又或者是将来的汽车还会增加哪些硬件,但所有人都知道硬件的变化将会来得更加猛烈。

所以我们也可以看到,汽车对软硬件架构的要求也越来越高,既要能满足当下的需求,还要具备相当的前瞻性、兼容性和扩展性,能够实现接下来软硬件升级换代、增减模块的需求。

对于这些,开发者最直观的感受就是,软件系统日益庞大,代码行数快速增长;硬件的类型、数量和规格明显提升,电子系统的复杂性成倍增加;软件、硬件组合在一起所需克服的挑战,也像做乘法一样地被急剧放大。

可是,自动驾驶并非空中楼阁,要满足所有的这些需求和变化,一个好的基础至关重要。这就像一片荒地很难满足所有的种植需求,但是拥有环境控制系统,可以按需调整温度、湿度、光照、供水、肥料等变量的现代温室,能够培育任何的农作物。

而自动驾驶的中间件,就正是这样一个可以按需调整、满足各样需求的现代温室。它为上层的应用软件提供开发和运行所需的环境,方便开发者快速、高效、灵活地开发和集成自动驾驶软件。

所以某种程度上来说,中间件就是自动驾驶应用背景下的一项“新基建”。


二、软硬通吃的不二之选

自动驾驶的中间件,也属于广义上的操作系统,但是它和QNX、Linux这些底层系统并不一样。本质上它是介于上层应用和底层系统之间的一套软件框架,是对软硬件资源进行管理、分配和调度的平台,充当着软件和硬件解耦的关键角色。


纽劢科技的MaxOS中间件实现模块化的管理和应用

具体来说,中间件通常对传感器、计算平台等资源进行抽象,对算法、子系统、功能采取模块化的管理,通过提供的统一接口,让开发人员能够专注于各自业务层面的开发,而无需了解无关的细节。

这样最直接的好处就是,整个系统的开发效率得到提高,软件部署得以简化,整体的扩展性也获得了提升。

常规的计算机操作系统对计算机的硬件和软件进行管理,会涉及处理器管理、存储管理、设备管理、文件管理、进程管理,比如Android、iOS、Windows、Linux,就是其中的典型代表。那自动驾驶中间件,对于软硬件的管理又会有哪些内容呢?

自动驾驶需要接收不同的传感器信号,然后进行感知、规划和控制,并由转向、油门和制动这些硬件系统来完成整个过程。所以自动驾驶的中间件会涉及到ECU管理、传感器管理、车辆模型管理、通信管理、任务管理、数据管理、安全管理、诊断管理、OTA管理、可视化管理。

在我们看来,自动驾驶的应用有着高可靠、高性能、高并发以及模块化的需求特征,而实时、安全、开放的自动驾驶平台是实现这些的关键之一,同时也是推动“软件定义汽车”的重要基础。


三、量产应用之中露峥嵘

复杂的大型软件,尤其是自动驾驶,对开发和应用有着一系列的要求。所以行业内外,都不乏一些实力深厚的公司,根据自身的业务特点开发相应的中间件平台。

作为一家专注实现大规模量产应用的自动驾驶科技公司,纽劢科技也根据自动驾驶的特点专门开发了自动驾驶中间件——MaxOS平台。在实际的开发和应用过程中,中间件的作用已经得到了充分验证。


MaxOS中间件在系统中的作用

典型的例子就是,不同车厂的硬件配置存在巨大差异,而同一车厂内的不同品牌、不同车型也会存在不同。借助于中间件平台,插拔式设计便成为可能,我们的整个自动驾驶系统方案,在开发时可以根据需求进行不同拓展,开发后也可以快速高效地进行软件迭代。

而这里的不同拓展,既可以体现为适配不同的传感器、芯片、车辆平台等硬件,也体现为选配不同的软件算法模块,实现不同级别的自动驾驶功能。对于主流的嵌入式平台、深度学习框架以及底层系统,我们的方案都可以支持,并且能够提供不同的优化方案,而不依赖任何第三方的组件。

开发自动驾驶的中间件,就像是修公路一样,如果修得宽、修得好,那它能通行的车也会越多,通行的速度也会更快。如果中间件能打下一个好的基础,那么整个自动驾驶方案开发和应用的质量、效率也都会有不错的保障。

因此,我们也尽量将MaxOS平台做到实时、安全和开放。MaxOS可以提供全局任务调度、实时性考量、数据流同步这些实时的调度,同时也通过高可靠通信、安全冗余设计、监控和诊断为应用保驾护航。除此之外,抽象出的接口也让上层应用和整个方案都具备高可移植性,第三方的支持可以通过开放协议来接入,而面向服务的架构(SOA)也为模块的拆分和调用提供了绝佳的基础。


四、中间件平台的“自我修养”

虽然说来轻巧,但是想要真正地做好这样一个中间件,并不轻巧。我们可以谈一些纽劢科技开发MaxOS平台的细节。

在底层系统层面,我们打通了OSI(开放式系统互联)接口,对不同系统的接口进行封装。同时,对世界模型的相关数据结构进行定义和描述,将传感器数据解析成世界模型中的数据表示,分离传感器数据接入方式和数据解析。

在MaxOS平台的库中,我们开发和配置了自动驾驶系统应用的基础组件,包括日志、配置、通讯、资源隔离、线程池、内存池、无损队列等等。自动驾驶所需的相关算法,比如数值计算、密码学算法、坐标系转换算法、视觉算法等等,也都一应俱全。

在系统功能模块方面,我们提供了执行管理、状态管理、时间同步、通讯、诊断、监控以及一些其他的模块。这能确保平台系统、应用功能、系统资源按照正确的配置运行,并且状态得到高效管理,模块间的通讯畅通无阻,出现的问题能第一时间诊断。


执行和状态模块示意

这些功能模块,不是对常规计算机系统、中间件平台的照搬和沿用,而是根据自动驾驶需求进行的开发和创新。比如,通讯的接口,支持基于话题发布-订阅的通讯方式。在ECU之间的通信节点,支持建立TCP长连接的方式进行通信,提高了通讯系统的扩展性。在ECU内部的通信节点,支持共享内存的通讯方式,通过传递共享内存指针的方式,让数据可以做到零拷贝从而提升了通信系统的吞吐量和速度。


通信模块示

尤其是考虑到升级需求、安全需求,我们开发了相应的OTA模块、身份认证和访问控制模块。同样还有工具箱,我们目前已经针对空工程创建、图像处理、性能分析、标定、通讯的需求开发了二十项工具。


OTA模块示意

在这些库和功能模块的基础上,无论是视觉、雷达这些感知的模块,还是GPS、IMU的信号接入模块,又或者导航、融合、规划、控制等等模块,在定义好接口协议的情况下,都能通过MaxOS平台结合在一起。

我们从基础平台功能、自动驾驶功能、性能水平、灵活性、安全性五个维度对MaxOS平台做了评估,它的表现非常不错,即使对比一些主流的中间件平台也优势明显,可以充分满足自动驾驶的应用需求。


结语

在过去,汽车的软件化程度不高,所以中间件的需求相对不大,但是面向自动驾驶这样的超级应用,中间件的优点已经逐步显现出来。自动驾驶是一片广阔天地,而中间件在其中一定会大有作为。