Advertisement

自动驾驶——软件和云服务介绍

阅读量:

本文介绍了自动驾驶领域的入门级知识,重点描述了无人驾驶软件的系统架构及实现原理。文章指出无人驾驶软件分为车辆端和云端2个部分,并强调了实时操作系统(如Linux)在保证任务响应及时性和系统稳定性的关键作用。此外,文章阐述了模块化软件架构(如Apollo)的优势及其与端到端自动驾驶方法的对比,并分析了云端服务在数据存储、处理与地图生成中的重要性。文章还提到高精度地图的复杂性及其维护挑战,并强调了仿真测试在降低开发成本和提高测试效率中的作用。

文章目录

  • 简介

  • 操作系统

    • Linux进程调度
    • 无人驾驶进程调度
  • 无人驾驶系统

    • 模块化软件架构
    • 端到端自动驾驶的原理
  • 云服务

    • 数据存储
    • 数据处理
    • 地图服务
    • 仿真

本文对自动驾驶领域所需的软件进行了全面归纳与分析,并旨在作为面向初学者的普及性文章进行发布。

简介

无人驾驶软件主要包含两大模块:一部分负责运行操作系统的相关程序与无人驾驶功能的实现;另一部分则为整个系统提供技术支撑,并保障各项核心功能的稳定运行。

操作系统的任务是承担无人车硬件资源(如传感器、系统总线和网络等)的管理和计算资源的调度工作。对于无人驾驶系统而言,操作系统的实时性能具有极端重要性。操作系统的任务必须在规定时间内得到及时处理。

该系统实现了实现无人驾驶所需的各种算法,
涉及定位、环境感知、路径规划以及控制,
在无人驾驶软件体系中占据核心地位的是
该系统的存在。
同时为实现无人驾驶功能提供了一系列基础服务,
共同构成了整个无人驾驶软件。
...

在这里插入图片描述

从整体上看,自动驾驶包括存储、计算和基础服务3个基本需求。

  • 存储包括车辆端存储和云端存储。车辆端的存储空间非常有限,只能存储少量数据,而云端存储的好处是大容量,能够存储海量数据。另外还需要考虑存储的效率,对数据的优先级、数据的保存格式以及数据库类型做区分。
  • 计算分为在线计算和离线计算。在线计算主要是运行无人驾驶所需要的各种算法,主要关注算法的鲁棒性,能否适应各种环境;同时还要关注算法的时效性,通常需要在100ms之内完成一次计算。离线计算主要是处理离线数据,要处理的数据量非常大,但对时效性的要求没那么高,可以通过并行分布式计算来提高效率。
  • 基础服务提供了自动驾驶所需要的各种基础能力,分为操作系统层面和软件服务层面。操作系统层面主要是提供自动驾驶系统运行的环境,提供系统调度,协调硬件资源等。软件服务包括高精度地图和模型训练等基础服务,同时上层软件还提供无人驾驶打车和物流等服务。

操作系统

这些无人车的软件算法均部署于操作系统平台,在实际应用中对其稳定性与实时性提出了较高要求。其稳定性特征主要表现在对系统资源占用量低以及发生故障时系统不会崩溃或陷入不可控状态的特点上,并能持续稳定地运行而不中断。

实时性要求决定了系统必须能够在指令发出后立即执行相应的操作流程。在工业自动化、汽车技术以及航空航天等多个领域都需要采用具备高实时性的操作系统。这些关键领域的实时操作系统若无法即时处理指令,则可能带来严重的问题。
例如,在驾驶过程中按下紧急制动按钮时, 若操作系统的反应延迟, 则可能导致严重的交通事故。

什么是实时操作系统?它是在规定时间内响应系统指令的软件系统,在自动驾驶领域中其重要性体现在对快速反应的需求上。例如,在Apollo 5.0项目中,所采用的操作系统的名称是Linux。但普通的Linux并不是实时操作系统;其特性在于需通过安装特定的补丁程序来实现这一功能。

那么如何保证系统任务的实时调度呢?接下来看Linux采取的调度策略。

Linux进程调度

操作系统的首要功能即为过程管理;而Linux系统中所采用的过程调度机制则基于完全公平 scheduler(CFS)算法实现;我们可以对比未调度状态与已调度状态之间的差异

在图3.2所示的单个CPU核心情境下,默认情况下左侧未实施进程调度。任务1在完成之后将对内存、硬盘等IO数据进行读取操作,在此期间CPU将处于空闲状态。右侧采用了进程调度策略,在CPU空闲时段 task1主动释放了 CPU资源 ,从而允许后续 task在其等待 IO 的过程中进行处理。综上所述 该调度机制有效提升了 CPU 的利用率 同时缩短了 overall task 完成时间

在这里插入图片描述

Linux kernel can be categorized into preemptive and non-preemptive variants. Non-preemptive kernel does not allow CPU to be taken away. Unless a task completes before it releases the CPU, unless the task proactively releases CPU access rights, it cannot be preempted by higher-priority tasks. allows a task to run uninterrupted until interrupted by higher-priority tasks. If a higher-priority task requests CPU, the current task will pause and switch to that higher-priority task immediately. Therefore, in terms of responsiveness, preemptive kernels demonstrate significant advantages.

CPU将各任务分配为时间段,并依次轮流使用这些时间段进行处理,在这段时间内看似同一时刻多线程运行的现象称为时间片轮转技术。从系统管理角度来看,在这段时间结束时若无其他作业等待就继续运行当前作业;若有其他作业等待,则会暂时中断当前作业并切换至其他作业进行处理;如此往复循环直至所有作业完成或中断请求停止为止

内核对进程进行了分类区分,并将其划分为交互式与脚本驱动型两大类。对于交互式进程而言,在实际应用中对其性能要求较高,但这种状态通常不会持续太久。具体表现为键盘端大多为闲置状态,在用户实际输入指令时才需迅速响应以避免操作体验上的延迟感。而脚本驱动型进程则始终处于后台运行状态,在对实时性要求相对较低的情况下能够维持较低的CPU利用率并无需立即响应用户的指令调用请求。基于Linux的操作系统采用抢占优先级机制对各任务进行调度管理,在这一机制下交互式进程被赋予更高的优先级排序权值因此能够在相应任务到来时抢占系统资源实现即时处理效果。值得注意的是还存在一类特殊任务类型即所谓的实时性最强类别的进程这类任务具有最高的优先权等级若任何此类任务出现系统必须立即执行而无须顾及其他正在运行的任务从而确保整体系统的稳定性和及时响应能力。

如果仅依据优先权基础,则可能导致低负载的任务长时间得不到处理;因此系统设计者必须引入一种更为公平合理的调度算法以解决这一问题。当某个进程中断时间过长时(即等待时间超过设定阈值),该进程中断一过就会提升其运行权限;反之则相反(即当某个进程中断很长时间后),该进程中断太久就会降低其运行权限)。这种机制的好处是确保低负载的任务不会长期被忽视(即被操作系统忽略),而高负载的任务也不会一直主导资源分配(即独占CPU)。Linux系统正是采用了CFS算法来实现这一目的。

在多核环境中处理任务时,在于每个处理器的核心拥有独立的任务队列。这会引起一个问题:当大量任务集中在某一特定CPU内核时(即该内核被过度负担),而其他所有CPUs的核心队列均处于空闲状态(即未被使用),这将导致整个系统的处理性能下降(即整体运行效率受到影响)。在这种情况下(即当出现资源分配不均的情况),系统会自动将这些任务迁移到当前空闲的所有CPUs的核心中(即平衡资源以缓解压力)。然而这种迁移操作本身会产生一定的开销(即带来额外资源消耗),因此有时我们会选择绑定特定的任务到某个特定的内核以减少这种开销(即避免频繁的操作系统干预)。

无人驾驶进程调度

参考Linux的进程调度,我们也思考下如何进行无人驾驶进程调度。

在无人驾驶系统中假设存在以下若干步骤:识别位置(定位)、环境探测(感知)、路径计算(规划)、动作执行(控制)、传感器设备、记录信息与地图数据 ,若 CPU 只配置 2 个处理内核,则应如何安排这些任务的优先顺序?

基于定位模块、感知机制以及规划算法的运行效率高于日志记录与地图生成的需求这一前提,在我们的设计中,默认将定位、感知、规划、控制以及传感器数据处理作为具有较高优先级的功能模块进行处理。

由于当前仅配置了2个CPU核心,在这种资源受限的情况下无法同时运行所有这些模块。因此必须采用时间片轮转机制来实现对高优先级任务的支持。如何设定时间片长度便成为了一个关键问题:若时间片设置过长会导致进程响应迟缓;若时间片设置过短则会导致频繁的进程切换开销。需要注意的是,在运行过程中如果感知型和规划型模块同时处于活动状态且尚未耗尽其时间片,则控制型模块不应立即抢占CPU资源;只有当某一个运行中的任务耗尽其预先分配的时间片后才会触发相应的调度行为。

无人驾驶对各功能块的算法复杂度也存在具体要求。若采用较高复杂度算法提升精度,则可能导致感知块消耗更多CPU资源。此时其他功能块需与之争夺有限资源(如CPU时长),从而使得整体运行效率将有所下降。具体而言,在本例中假设:①感知块运行时间为T_p=100ms;②控制块时间为T_c=100ms;③单次任务分配到各核心的时间片长度τ=50ms。则可计算出:①在满足精度需求的前提下感知块所需时长N_p=T_p/τ=2个时长;②控制块所需时长N_c=T_c/τ=2个时长;③总任务周期数N_total=N_p+N_c=4个时长;最终总运行时间为T_total=N_total×τ=4×50ms=20秒(注:此处数值单位应统一)。由此可见,在上述配置下完成该任务所需总时长为2秒(注:此处数值单位应统一)。

当感知模块为了提升效果时, 通过提升算法计算的复杂性, 其耗时达到200毫秒, 尽管如此仍能按期完成其职责范围内的任务, 因为该系统的整体响应时间为3秒(即3, 但是由于中央处理器(CPU)资源的竞争, 可能会导致控制层的任务完成时间延长至3秒。由此带来的主要问题是控制层的任务完成时延未能满足系统需求。解决方案包括: 首先, 可以采用多核处理器方案以增强计算能力; 另一种可行的方式则是优化各子系统的算法效率, 使每个子系统均尽可能高效地利用计算资源以减少占用时间。

系统的算法复杂度必须保持稳定状态,在任何情况下都不能迅速变化。例如,在某些情况下它可能很快达到50毫秒,在另一些情况下则会迅速升至200毫秒,并可能导致执行超时(这是最坏的情况)。如果各个模块的算法不够稳定,在系统面临极端情况时,每个模块所需时间都会显著增加,并且会导致系统的工作负载在短时间内急剧上升从而引发CPU响应迟缓的问题。

系统的算法复杂度必须保持稳定状态,在任何情况下都不能迅速变化。例如,在某些情况下它可能很快达到50毫秒,在另一些情况下则会迅速升至200毫秒,并可能导致执行超时(这是最坏的情况)。如果各个模块的算法不够稳定,在系统面临极端情况时,每个模块所需时间都会显著增加,并会导致系统的工作负载在短时间内急剧上升从而引发CPU响应迟缓的问题。

除了上述情况之外,在极端情况下系统的进程可能会导致系统崩溃或出现长时间占据CPU资源的状态

  • 无法找到最佳解决方案而导致系统运行异常的状态主要是由于进入死循环状态所引起。
    • 当系统出现堆栈溢出、内存泄漏或空指针异常时,则表明程序运行出现了严重的问题。
      • 堆栈溢出通常发生在函数调用链超出可用空间边界时;
      • 内存泄漏则指的是内存未被正确释放而残留的部分;
      • 空指针异常则是在访问未初始化的指针变量时所导致的。
    • 硬件层面的故障问题较为少见,在嵌入式系统中由于CPU具备冗余校正机制能够有效避免寄存器故障问题;
    • 而在普通家庭及服务器级系统中并未配备此类冗余校正功能,
    • 因此在这种情况下必须采取重启相关进程或硬件设备的方式来解决问题。

根据上述的思路,可以得到无人驾驶的进程调度策略:

在这里插入图片描述

将控制模块赋予最高优先权,并将其后的规划模块定为其次;而对于感知与定位模块仅获得较低的优先权。这是因为由于控制与规划两大任务须立即完成,在当前帧无法及时处理时,则会暂时丢失数据并转而处理下一帧;同时这些关键进程均需被指定为实时进程以保证系统的响应速度。此外,在高负载情况下非实时信息如地图与日志等也会被系统自动剥夺处理权限以确保资源的有效利用。

无人驾驶系统

在实时操作系统的基础上运行的是无人驾驶的核心算法实现。这些核心算法实现主要分为两种架构结构:其中一种采用模块化设计;而另一种则基于端到端的方法;模块化设计已经成为当前无人驾驶系统的主要方案;而 Apollo 和 Autoware 均基于这一架构开发;相比之下;基于深度学习模型的这类系统依赖于来自摄像头等传感器的数据来进行处理;从而生成油门、刹车以及转向角等控制指令来调节车辆运行;尽管这类系统结构较为简单;但其性能表现依然高效;值得注意的是这类系统依赖于深度学习模型来进行处理;因此多用于学术研究领域

基于车辆联网与否的不同特征,无人驾驶技术可划分为两种主要类型:单车智能与网联智能。在没有网络支持的情况下依然能够实现完全自动驾驶的能力是单车智能的核心特点。而网联型车辆则通过与周围车辆以及环境之间的交互来提升整体性能,在具备基础自动驾驶功能的同时还可在获取实时交通数据的基础上进一步提升智能化水平。从当前技术发展趋势来看推动无人驾驶技术快速落地势在必行只有当两者相辅相成才能实现更加完善的智能化目标

模块化软件架构

模块化的思想是将无人驾驶这个复杂问题划分为几个相对容易解决的子问题 ,这些子问题可以在机器人技术、计算机视觉和汽车动力学方面找到解决问题的思路,通过之前积累的经验来快速的解决问题。此外模块化的设计更加方便定界问题 ,修改一个模块的问题,不会影响到其它模块,这也是现代软件大量采用模块化设计的原因。
模块化设计的优点在于算法都是可控的 ,可以硬编码一些规则在系统中,确保算法出错的时候,无人车依然安全。模块化的设计方案是目前无人驾驶的主流方案,模块化的设计同时也存在一些问题。模块化的设计结构过于复杂,一个模块的错误会传导到其它模块,例如定位模块输出了错误的位置,会导致规划模块输出错误的行驶轨迹。

根据无人驾驶所需处理的任务类型划分,我们可以将无人驾驶系统划分为:detailed map: positioning system: perception module: planning algorithm: control unit: human-machine interface等共6个功能单元。

(1)相比传统地理信息系统而言,高精度地理信息系统所承载的信息量更为丰富。传统的地理信息系统主要记录道路信息及相关基础要素数据,在具体的城市路网场景中通常仅能提供道路中心线位置数据等基础要素的空间分布特征描述能力。相比于传统系统而言,在这种具体的应用场景下,高精度地理信息系统不仅包括道路信息的基础要素数据记录工作内容,并且还包括车道线位置数据、交通法规编码以及红绿灯安装位置坐标等细节要素的数据支持功能需求满足情况下的应用开发支持能力提升空间。为了实现无人驾驶车辆在城市道路中的安全导航需求,在实际应用开发中必须确保其定位精度达到厘米级别,并以此为前提条件来保证无人驾驶车辆在实际运行过程中的安全性和可靠性保障水平

定位模块专门针对无人车当前位置的问题设计,在运行过程中能够持续更新无人车在地图上的准确坐标,并将这些信息传递给规划和控制模块以辅助决策。

(3)感知模块主要负责收集无人驾驶汽车周围环境中的障碍物状态信息包括车辆行人以及非机动车等动态物体。同时该系统还具备识别交通信号灯实时跟踪并预测障碍物运动轨迹的能力 感知技术作为无人驾驶的核心技术难题之一具有重要的研究价值。

(4)规划系统划分为两大类:长期规划与短期规划。其中,
长期规划主要负责根据车辆当前位置及目标位置生成导航路线,
其功能与手机地图导航系统相仿。而短期规划则根据车辆当前状态
输出可行的行驶路径,
需综合考虑规避障碍物、遵循交通法规等多个因素。
需要注意的是,
长期规划类似于开车前查看地图进行导航操作;
而短期规划则是在实际驾驶中动态调整驾驶策略。

控制模块依据规划模块的输出,在满足汽车运动学和动力学模型的前提下,实现对汽车按规划线路的控制。

该交互界面支持人与车之间的操作流程。例如让乘客选择起点终点同时实时显示无人驾驶车辆运行状态。

在这里插入图片描述

端到端自动驾驶的原理

从端到端的自动驾驶方案与人类驾驶方式具有高度相似性。整体架构简洁高效,并未依赖于精确的地图数据。但在实际生产应用中仍需解决以下4个关键问题。

  • 全生命周期的自动驾驶系统需针对不同车型进行模型微调,在生产制造环节迁移升级的成本过高。
  • 即使车辆型号一致,在出厂前仍需对摄像头等传感器参数进行微调以优化性能。
  • 感知、决策与规划功能受限于现有数据集训练结果,在特殊情境下可能无法准确推断潜在风险。
  • 系统运行中若发生故障, 无法深入解析原因机制导致故障的根本原因。
  • 算法设计存在硬编码限制, 在运行异常情况下可能引发系统运行失控风险。

受限于端到端自动驾驶的技术瓶颈,在这一领域仍处于试验阶段。随着人工智能技术的进一步发展进步,神经进化与深度强化学习等创新技术的进步将加速推动这一领域的成熟与应用。

云服务

在自动驾驶领域中,云服务扮演着不可或缺的角色。具体而言,在这一技术栈中所涉及的关键技术要素包括高精度地图的构建、数据存储与管理以及模型训练与部署等核心环节,均需要依托于强大的云服务支持。目前已有百度Apollo平台(百度深度科技子公司)、亚马逊AWS以及华为Octopus等多家企业推出具备自动驾驶服务能力的云计算解决方案。其核心功能涵盖了从数据采集与存储到数据分析处理(DataPipeline)、模型训练部署以及实时仿真模拟等多个关键环节。

数据存储

一辆无人驾驶车配备了多种传感器设备包括摄像头激光雷达毫米波雷达GPS以及IMU等设备。每天产生的数据量达到4000GB这些数据需要被收集和存储起来以用于生成高精度地图并构建训练模型

构建高效的数据存储体系时,分布式文件系统是首要选择。在大数据时代背景下,分布式文件系统的优越性得到了充分验证。其显著优势在于能够实现横向扩展的同时具备极高的可靠度。在自动驾驶领域中每天产生的海量数据均得以借助分布式文件系统进行高效保存。

在数据库选择方面,在区分自动驾驶大数据应用场景与传统互联网的特点时需要特别注意两者在数据来源和规模上的显著差异。在传统互联网中,数据主要来源于数亿用户的日常使用行为,在这种模式下每位用户每天仅会产生少量的数据。这些零散的数据总量达到数Terabytes(TB)的规模。相比之下,在自动驾驶领域中,则一辆车辆每天产生的数据量显著提升至Terabytes级别。两者的数据生产模式存在显著差异

互联网通常会选择基于key-value结构的数据库来处理几亿级别的用户数据,并如HBase等分布式数据库为例。然而,在自动驾驶这样的复杂场景中直接应用HBase可能会遇到问题:由于单条数据最好控制在10MB以内以确保高效的读写性能;因此一种可行的方法是对大规模的数据集进行划分(即划分),并依据地理位置信息或时间维度将原始数据分割开来(即划分),其中地理位置信息或时间维度被用作键值对的唯一标识(即键),而对应的具体数据则被存储为相应的值(即值)。通过这种方式实施后:可以把一条大表分割成多个小表(即将一个大规模的数据表划分为多个小规模的关键-值对表)。

回顾一下互联网应用场景时,在互联网场景中通常使用用户的唯一标识符(ID)作为键值对进行查询操作。当频繁命中相邻的ID时会引发所谓的"单点问题"现象,在这种情况下会导致资源分配不均,并进而影响系统的扩展能力。为了避免这个问题带来的系统性能瓶颈,在实时计算领域人们尝试了多种方法:一种是根据地理位置或时间进行分段处理也会遇到同样的问题;另一种则是采用哈希散列的方式将地理位置信息打散存储以避免冲突;然而这些方法却与实际应用场景产生了矛盾——因为实时计算的核心需求并不是追求尽可能多的同时并发处理能力(比如几十万条并发请求),而是能够支持单一用户长时间连续的数据读取请求模式下保证一个服务器能够高效管理大量数据请求。在这种模式下不仅能够提升系统的吞吐量还能确保数据处理效率最大化

不应直接以XML格式存储高精度地图, 这种做法会导致占用的空间过大, 为提升数据管理效率, 建议将地图数据按块进行序列化处理后再进行存储, 这样的处理方式将使压缩后处理后的数据存储效率将显著提高. 日志文件则采用基于时间序列的数据库来进行存储, 在获取无人驾驶车辆的位置信息时, 可以精确地反映出无人驾驶车辆从起始点到终点的时间序列过程.

总结而言,在实际应用中不同类型的数据显示会遇到不同的需求与挑战。自动驾驶领域的大量数据分析往往完全不依赖数据库而仅需依靠普通的文件系统即可实现 。在处理结构化数据时,则可以通过将文件路径记录于数据库并将其真实内容存放于普通文件系统的方式来提高管理效率。例如对于图像数据来说我们只需将图像的哈希值记录于HBase中并将压缩后的图像实际内容存放在对象存储空间中以待后续查询使用。而对于那些需要高并发访问且涉及多个用户的数据如行驶路线车辆信息以及用户行为分析则更适合采用像HBase这样的分布式计算平台进行处理

数据处理

基于深度学习的数据模型训练、高精度地图数据生成以及自动驾驶系统仿真等技术领域均需要进行复杂的数据处理工作。在自动驾驶的数据处理流程中包含以下环节:首先实施数据收集阶段;随后进行数据预处理环节;接着开展标注过程;之后进入模型训练阶段;最后完成模型部署阶段。

在自动驾驶系统模型训练的过程中,在数据预处理阶段,人工进行标签标注工作。随后投入深度学习模型的训练环节,在这一过程中逐步构建起能够识别车辆与行人特征的深度学习算法模型。然而,在实际应用中发现数据自动化的标注工作面临着诸多技术难题。为了提升整体效率,在保证精度的前提下尝试降低人工参与的比例是一个值得探索的方向。具体而言,在实现自动标注时可采用以下两种策略:其一是在保证一定准确率的前提下借助机器学习算法完成初步的分类标记,并由人类对结果进行校准与微调;其二是通过仿真模拟环境生成海量的标准数据集作为参考依据来进行监督式的学习和训练。

在数据处理领域,另一个主要挑战是如何高效地进行大规模并行处理。面对海量数据的接入与存储问题,在提升数据处理速度方面-facing challenges in data integration and storage while emphasizing the need to enhance processing speed.现有的分布式计算框架中有一些非常优秀的选择,其中Apache Spark通过构建大规模集群环境实现多任务并发运行,在实际应用中展现出卓越的性能.

在离线计算过程中,在规划模块中的参考线生成过程、路由线路的预先计算与存储、用于感知处理的ROI区域确定以及用于定位的点云数据处理是两个关键环节。

总之能够快速高效的处理数据,是自动驾驶数据处理的核心竞争力。

地图服务

云端应当实时提供自动驾驶所需的地图数据。这些数据应包含静态与动态两类信息:其中静态数据主要为传统道路状况;而动态数据则需实时更新各类交通状况变化。

高精度地图的道路信息相较于传统地图而言更为细致;不仅包含道路信息,在细节上还包括车道信息、红绿灯信号以及各种交通标志。与此同时,在精度方面的要求更为严格;具体来说,则需要达到厘米级别的精确度。

在地图服务中,并非仅限于地图本体的数据内容,在高精度地图环境中所呈现的信息也被统称为动态图层数据资源。具体而言,在某条道路发生交通事故时(当某条道路发生交通事故时),相关位置数据会被发送至动态图层数据资源中进行更新维护。无人车会根据接收到的信息规避拥堵区域,并采取相应措施减少通行干扰。值得注意的是,在动态图层中不仅包含与交通相关的数据内容(即交通管制状态、交通拥堵状况等),还包括与日常生活相关的设施位置数据(即周边的银行、医院、便利店等生活服务设施的位置坐标)。这些丰富的内容不仅有助于提升无人驾驶车辆的安全性能(从而进一步提升了无人驾驶的能力和实用性),也为其实现智能化发展奠定了基础

当前对高精度地图的维护工作被视为一项具有挑战性的任务。由于其涉及广泛的技术环节——包括数据采集、图像处理以及标注工作——在现有技术条件下维持大规模持续更新的高精度地图仍面临较高的成本压力。为此部分专业机构开始探索利用开源社区的技术手段来解决这一技术难题。

仿真

自动驾驶的主要目标是为了更早地发现问题。业界估计要确保安全性能达到行业领先水平,则需要对自动驾驶系统进行持续安全测试。其中一项重要测试环节是让无人驾驶汽车在虚拟环境中模拟真实场景进行路测,并最终在真实场景中进行验证性测试,在此过程中可显著提高问题发现效率。图3.15展示了这一完整的测试流程图。目前Waymo已经在现实世界中完成了超过1000万公里的路测,在模拟环境中则累计完成了超过100亿公里的路测里程。

在仿真过程中,一个关键的需求是生成问题快照。当仿真测试出现故障时能够捕获现场场景,并在此基础上生成故障报告。通过评估车辆是否会碰撞Others、是否会越出车道线、是否会违反交通标志以及前后车距是否不足来判断故障情况。系统会在此基础上生成故障报告,并在此基础上生成修复方案和模拟修复过程的视频片段作为辅助说明。

除了进行自动驾驶功能测试外,在仿真环境中还可以通过生成数据辅助模型训练**[1]** 。具体而言**[1]** ,数据的生成过程主要包括两种主要方法:第一种方法是创建标注好的数据集**[2]** ,其核心在于在仿真环境中模拟真实的交通参与者(如车辆、行人、建筑物等),这些已知信息能够直接被用来构建高质量标注的数据集以支持模型训练**[2]** 。第二种方法则是采用基于强化学习的方法,在仿真实验中模拟自动驾驶行为**[3]** ,并通过端到端的学习过程来优化自动驾驶模型**[3]** 。例如**[4]** ,英伟达的研究团队正是采用这种方法进行端到端自动驾驶模型训练**[4]**

全部评论 (0)

还没有任何评论哟~