无人驾驶软件分为车辆端和云端2个部分,其中车辆端运行操作系统和无人驾驶系统,云端提供无人驾驶所需要的各种服务。操作系统主要负责无人车硬件资源(包括
传感器、系统
总线、网络等)的管理以及计算资源的调度。
对无人驾驶来说,操作系统的实时性非常重要,操作系统要保证任务能够在规定的时间内得到响应。无人驾驶系统实现了无人驾驶所需要的各种算法,包括定位、环境感知、路径规划和控制等,无人驾驶系统是无人驾驶软件的部分。云平台提供了无人驾驶所需要的各种基础服务,共同构成了整个无人驾驶软件。
图源 CSDN况祥彬博客
自动驾驶操作系统
构建自动驾驶汽车是一项挑战,构建自动驾驶汽车操作系统则更具挑战性。
让汽车更智能、更安全比建造今天在我们的街道上行驶的任何汽车都要困难得多。自动驾驶汽车操作系统也是如此。选择汽车操作系统是一件大事,因为它需要控制汽车的功能,同时保证乘客和驾驶环境的安全。操作系统是指控制和管理整个计算系统的硬件和软件资源,并合理地组织调度计算机的工作和资源,以提供给用户和其它软件方便的接口和环境的程序集合。
而自动驾驶的操作系统较之
手机电脑的操作系统,显得更加地复杂,对安全性要求也更高。由于无人车的软件算法都运行在操作系统之上,对操作系统主要的要求是稳定性和实时性。稳定性体现在操作系统占用的资源少,出现故障之后系统不会奔溃,能够长时间运行。而实时性要求系统能够及时响应控制指令,工业设备、汽车
电子、航空航天等领域都要求采用实时操作系统,因为在这些领域操作系统如果不能及时响应控制指令,会产生很严重的后果。试想一下在驾驶过程中发出了紧急刹车指令,而操作系统没有及时响应,会导致严重的交通事故。
自动驾驶系统
前面介绍了实时操作系统,在实时操作系统之上运行的就是无人驾驶中重要的算法实现。算法实现有2种不同的架构,一种是模块化的软件架构,这是目前无人驾驶系统的主流方案,世界上的2个无人驾驶开源社区Apollo和Autoware都是采用这种架构。
另一种是端到端的软件架构,和模块化的思路不同,端到端的自动驾驶直接采用传感器(
摄像头等)的数据作为输入,通过深度学习模型,直接输出控制信号(油门、刹车、方向转角)控制汽车的行驶。端到端的自动驾驶结构非常简单,但性能高效。由于深度学习模型不能安全硬编码,并且具有不可解释性,目前端到端的自动驾驶更多的只是作为研究手段。
现如今自动驾驶系统一般将的算法模块化划分为感知层、定位层、预测层、决策规划层以及控制层,这一套系统的划分经历过大量的实验及时间检验,可以说是目前无人车中运用广泛的系统之一。模块化划分的好处就是各个模块各司其职,只用专心处理这一层所需要处理的数据,将输出尽可能稳定地传给下一层,使其完美完成自动驾驶操作的闭环,但同时,模块间的信息交互、接口制定、互相配合的难度也是极大的,也造成了目前自动驾驶领域中部分难题难以划定为某一模块的劣势。
而端到端的自动驾驶方法和人类的驾驶方式很相似,结构简单高效,并不依赖高精度地图,但用于生产实践具有可解释性差的问题,由于自动驾驶过程中的感知、决策和规划都是通过深度学习模型完成的,出现故障后,没法分析具体的原因。并且也不能硬编码安全规则。在算法失控的时候,不能保证安全,而这一条足以使其无法应用于实际的工程应用之中。
再根据无人车是否联网,可以将无人驾驶车分为单车智能和网联智能,单车智能强调车本身的智能,即使在没有网络的情况下,也具备完全自动驾驶能力。而网联车则强调车和车、车和环境的交互,通过整个车联网来实现更的智能,车本身可以具备自动驾驶能力,也可以只具备部分自动驾驶能力,通过网络获取更的智能。从目前的发展趋势来看,无人驾驶车要更快的落地,单车智能和网联智能二者需要互相融合,共同发展。
自动驾驶云服务
云服务是自动驾驶不可或缺的一环,自动驾驶相关的高精度地图、数据存储、模型训练、自动驾驶仿真等都依赖于云服务。目前已经宣布能提供自动驾驶服务的云平台有百度Apollo、亚马逊AWS和华为Octopus,提供的主要功能包括:数据采集和存储、数据Pipeline、模型训练部署以及自动驾驶仿真。
讲到云服务,首先提到的是数据存储。数据存储首先需要的是一个分布式的文件系统,大数据时代已经被广泛证明了分布式文件系统的好处,主要的好处是容量可以水平扩展,而且可靠性高。自动驾驶每天产生的大量数据都可以通过分布式文件系统保存下来。
其次是数据处理,深度学习模型训练、高精度地图生成以及自动驾驶仿真等都需要进行数据处理。自动驾驶的数据处理流程包括:收集、清洗、标注、训练和部署。用于自动驾驶模型训练的数据首先需要人工标注,然后再进行模型训练,才能得到能够识别车辆和行人的深度学习模型。数据的自动化标注是很大的挑战,通过工程的方法尽量减少人工标注,可以大幅度提高标注效率。数据处理的另一个挑战是大规模并行处理数据,由于数据量巨大,如何快速的处理数据是瓶颈。
有很多的分布式计算框架,其中Apache Spark可以构建大规模集群并发执行多个任务,在大规模数据处理中有非常好的实践。能够快速高效的处理数据,是自动驾驶数据处理的竞争力。
便是地图服务,云端应该实时提供自动驾驶所需要的地图服务。地图包括道路信息和动态信息,道路信息不用再过多介绍,就是传统的道路信息,动态信息是地图上出现堵车或交通管制等需要实时动态更新的信息。在这之中,高精度地图的维护是目前面临的问题,因为涉及到整个地图的采集、加工和标注,实时维护大体量的高精度地图目前来说成本高昂,一些高精度地图服务提供商提出采用众包的方式更新高精度地图。
总结
以上便是自动驾驶中软件系统整体框架的全部内容,可以看到,作为目前前沿、火热的技术,自动驾驶中囊括了太多目前的科技,也不难理解为何如此多的人才涌入进该行业中。而要实现真正的无人驾驶,显然也有很长的路需要走,也需要以上的各个方向,都能取得革命性的突破,才能使得自动驾驶不再有短板,也变得越来越安全。