一文读懂自动驾驶的“中间件”
或许很多小伙伴会纳闷,自动驾驶的中间件是什么?可能大家听得最多的就是深不可测的人工智能算法,各种感知融合,各类路径规划……但是,再高深的智能决策算法,如果没有底层操作系统的支持,那么自动驾驶汽车的一切都将是空谈。
而目前关于自动驾驶“中间件”的文章少之又少,小编将近日阅读的自动驾驶中间件的相关文献进行如下总结,方便各位快速了解。
01 什么是自动驾驶“中间件”
中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务,衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。
自动驾驶的中间件,也属于广义上的操作系统,但是它和QNX、Linux这些底层系统并不一样。本质上它是介于上层应用和底层系统之间的一套软件框架,是对软硬件资源进行管理、分配和调度的平台,充当着软件和硬件解耦的关键角色。它为上层的应用软件提供开发和运行所需的环境,方便开发者快速、高效、灵活地开发和集成自动驾驶软件。
中间件的主要任务是负责各类应用软件模块之间的通信以及对系统资源的调度。它的优点,是可以大大降低应用层软件的开发难度,使研发工程师可以完全把注意力集中到功能算法的开发上。
总的来说,中间件是整个软件架构的核心组成部分。
02 为什么要“中间件”
众所周知,在智能汽车、机器人等领域,各个软件系统的不同部分之间需要传输大量数据。在过去的几十年中,由最初的发动机控制系统,发展到当下热门的辅助驾驶/自动驾驶等等,汽车电子技术有了革命性的发展。
而现代基本的软件设计原则是模块化。模块化可以提高可维护性、代码重用性并隔离故障。在现代操作系统中,将单个模块映射到软件进程非常方便,这些进程可以位于相同的计算设备上,也可以位于物理上独立的计算设备上。
模块化为开发提供了便利,但也引入了对通信中间件的需求。因为模块设计人员必须仔细考虑在模块之间共享哪些信息,如何将这些信息封送编码到消息中,如何将封送的消息从一个模块传递到另一个模块,以及如何在接收到消息后解码。
通信中间件的引入整体上可以帮助开发人员提高工作效率。尽管消息传递系统引入了复杂性,但它也提供了分析和内省的机会。特别是,可以通过专门设计用于帮助系统开发的模块捕获和分析消息。这些模块可以将消息记录到磁盘,提供关于带宽、消息速率等方面的统计信息。
具体来说,中间件通常对传感器、计算平台等资源进行抽象,对算法、子系统、功能采取模块化的管理,通过提供的统一接口,让开发人员能够专注于各自业务层面的开发,而无需了解无关的细节。这样最直接的好处就是,整个系统的开发效率得到提高,软件部署得以简化,整体的扩展性也获得了提升。
03 “中间件”平台如何服务自动驾驶
开发自动驾驶的中间件,就像是修公路一样,如果修得宽、修得好,那它能通行的车也会越多,通行的速度也会更快。如果中间件能打下一个好的基础,那么整个自动驾驶方案开发和应用的质量、效率也都会有不错的保障。
自动驾驶需要接收不同的传感器信号,然后进行感知、规划和控制,并由转向、油门和制动这些硬件系统来完成整个过程。所以自动驾驶的中间件会涉及到ECU管理、传感器管理、车辆模型管理、通信管理、任务管理、数据管理、安全管理、诊断管理、OTA管理、可视化管理。
自动驾驶的应用有着高可靠、高性能、高并发以及模块化的需求特征,而实时、安全、开放的自动驾驶中间件平台是实现这些的关键之一,同时也是推动“软件定义汽车”的重要基础。
不同车厂的硬件配置存在巨大差异,而同一车厂内的不同品牌、不同车型也会存在不同。借助于中间件平台,插拔式设计便成为可能,这使得在开发时可以根据需求进行不同拓展,开发后也可以快速高效地进行软件迭代。
而这里的不同拓展,既可以体现为适配不同的传感器、芯片、车辆平台等硬件,也体现为选配不同的软件算法模块,实现不同级别的自动驾驶功能。对于主流的嵌入式平台、深度学习框架以及底层系统,中间件平台相当于连接它们的润滑剂。
同冯诺依曼瓶颈有些相似的是,无论顶层应用算法多么优秀,一个低效的中间件都会在开发的过程中演变为一个巨大的瓶颈,进而会慢慢地拖垮整个系统的运行。因此,在以后的研发中,自动驾驶中间件应同智能的算法和可靠的硬件设备一样得到重视。