在现代分布式计算架构下,中间件在应用系统结构中居于各类应用与操作系统之间,是一种为分布式计算环境提供通信服务、交换服务、语义互操作服务等系统之间协同集成服务,解决系统之间互连互通问题,帮助用户灵活、高效地开发和集成应用软件的基础型软件。中间件可以分为消息中间件(解决多个子系统间的消息通信问题)、交易中间件(用于实现不同软件之间相互调用和交互操作)、应用服务器中间件(位于客户浏览器和数据库之间,为应用程序提供业务逻辑的代码)。
中间件产品是伴随分布式计算架构由两层结构向三层结构扩展而逐步演化而来的。随着计算机和网络技术的飞速发展,许多软件需要在不同厂家的硬件平台、网络协议异构环境下运行,应用的规模从局域网发展到广域网,传统的"客户端/服务器"的两层结构已无法适应需求,因此以中间件软件为基础框架的三层应用模式应运而生。在三层结构中,通过在中间层部署中间件,解决了二层结构下的诸多缺陷:1)共性凝练和复用,应对海量访问;2)屏蔽异构性,实现互操作;3)加密传输,提高系统安全性。
对于汽车工业领域而言,根据每一种操作系统会有不同的通信中间件适配,中间件组件是新一代分布式实时通信中间件协议,主要采用发布/订阅(CS)体系架构,强调以数据为中心,通过丰富的QoS服务质量策略,以保障数据进行实时、高效、灵活地分发,可满足各种分布式实时通信应用需求。
本质上,中间件可以被认为是一种广义操作系统,不同于QNX、Linux、Vxworks这些底层OS内核,它是介于上层应用和底层系统之间的一套软件框架,是对软硬件资源进行管理、分配和调度的平台,充当着软件和硬件解耦的关键角色。同时,能为上层的应用软件提供开发和运行所需的环境,方便开发者快速、高效、灵活地开发和集成自动驾驶软件。因此,中间件是实现下一代面向服务SOA的重要单元。在一定程度上决定了未来自动驾驶系统能否实现最佳效能。
当前,很多公司所涉及的操作系统自研能力实际都是指的对操作系统内核做补充开发中间件或裁减应用软件。而主机厂与Tier1在开发能力上的差异性往往体现在其所开发底层操作系统研发的整体框架上,而框架又取决于OS的中间件组合。比如基于QNX内核做开发时,由于底层OS内核不可被更改,主机厂或tier1只能通过叠加自己定制的上层算法来完成中间件的设计。而基于Linux内核开发时,则是先参照自身需求对底层OS内核做软件裁减配置,再上层适配不同的中间层算法,显然Linux难度要大得多。
借助于中间件平台,插拔式设计可以将主机厂的不同硬件配置进行统一定制化开发,整个自动驾驶系统方案,在开发时可以根据需求进行不同拓展,而这里的不同拓展,既可以体现为适配不同的传感器、芯片、车辆平台等硬件,也体现为选配不同的软件算法模块,实现不同级别的自动驾驶功能。同时,中间件的应用也能确保开发后可以快速高效地进行软件迭代。
对于中间件的开发而言,需要在底层系统层面,打通OSI(开放式系统互联)接口,对不同系统的接口进行封装。具体将以自下而上的自动驾驶系统算法处理模式来说明整个中间件的开发过程。
1、感知数据前端处理
自动驾驶的感知数据前端处理包括对世界模型的相关数据结构进行定义和描述,中间件将传感器数据解析成世界模型中的数据表示,分离传感器数据接入方式和数据解析。
2、数据采集
这里需要在基础平台库中,开发和配置自动驾驶系统应用的基础组件,包括日志、配置、通讯、资源隔离、线程池、内存池、无损队列,以上功能的开发可以实现传感器数据抽取、同步等操作。
3、系统功能模块
中间件需要提供了关于数据整合的执行管理、状态管理、时间同步、通讯、诊断、监控以及一些其他的模块。从而确保平台系统、应用功能、系统资源按照正确的配置运行,并且状态得到高效管理,模块间可以实现及时有效的通讯,出现问题时可以实现随时诊断。