王宇彤,黄 松,陈 刚,夏春艳
(陆军工程大学,南京 210007)
由于当前交通事故的发生多为人为因素导致,因此自动驾驶技术的使用及普及能够大大降低交通事故发生的概率,国内外很多传统的汽车公司,如特斯拉、优步等,以及互联网公司,如谷歌、百度、苹果等,都已在自动驾驶技术的发展中投入了大量的资源与时间进行研究,如今世界范围已有多家企业对该技术进行相关研究及测试工作。本文总结综述了当前对于自动驾驶系统及其测试方法的研究成果并对未来研究方向进行展望。
自动驾驶并不是仅仅指无人驾驶,自动驾驶技术的发展分为不同层级,以美国汽车工程师学会(SAE)的标准划分为例,可以把自动驾驶分为6 个等级[1]:第0 级为无自动化系统,由人类驾驶者对汽车进行完全的控制,但可以得到系统的警示和提醒;第1 级为驾驶支援,只能辅助控制方向或速度中的一项操作,其余驾驶操作仍由司机操控完成;第2 级为部分自动化,通过判断行车环境中对方在方向或速度上的多项操作来辅助操控,其他行车动作则由人类司机来操作;第3 级为有条件自动化,由无人驾驶系统完成所有的驾驶操作,根据系统要求,人类驾驶者提供对应的操作回复;第4级为高度自动化,所有的驾驶操作均由自动驾驶系统完成,属于有限自动驾驶辅助;第5 级为完全自动化,由自动驾驶系统自主完成所有在道路和环境条件下人类驾驶者能应付的驾驶操作,这个级别是真正意义上的无人驾驶,但目前的自动驾驶系统研究尚未能达到L5 级别[2]。
作为驾驶环境与汽车驾驶场景的综合体现,自动驾驶场景[3](Autopilot View)描述了车辆外部行驶环境中的道路场地、周围交通、气象(天气和光照)及车辆本身的行驶任务和状态等信息,是影响和判定智能驾驶功能与性能因素集合的一种抽象与映射,具有高度的不确定、不可重复、不可预测和不可穷尽等特征。在自动驾驶仿真测试领域中,至今也没有研究者给出过绝对唯一的场景定义,不同的研究人员对其都有自己相似但独到的见解。
德国研究人员提出了一种Pegasus 场景分层体系[4],即在场景中根据场景要素的不同将其分为6 层场景,具体分层信息见表1,并根据场景的不同特征对其进行场景复杂度量化。
表1 Pegasus 场景分层体系
Ulbrich 等[5]提出,场景描述了环境的快照,包括场景和动态元素,以及所有行为体和观察者的自我表征,以及这些实体之间的关系。只有软件模拟出场景才能包含这些场景中应有的元素。在现实世界中来看,它是不完整的、不正确的、不确定的。
Rocklage[6]将自动驾驶测试场景定义为待测的道路、车辆,以及当天的天气、过路的行人等这些静态与动态的元素集合而成的案例。Gelder 等[7]指出,自动驾驶测试场景为一段固定的时间内,自动驾驶车辆的动作、测试所处的环境元素的结合;高立杰等[8]将其定义为在一定时空范围内,自动驾驶汽车与行驶环境中的其他车辆、基础设施、天气、光照和障碍物等要素综合交互的过程,它既包含场景中的各类实体,同时还包含实体执行的动作及实体间的连接关系。
由于自动驾驶系统是一类依赖于算法的智能软件系统,应用和技术的增加都会导致系统和功能更加复杂[9]。而且,人工智能的应用对汽车行业的影响越来越大。这些都导致自动驾驶系统在质量和安全保障方面面临更多的困难和挑战。由于自动驾驶技术应用在实景路段上,一旦系统存在错误就会导致交通事故。因此,所有系统相关的功能都必须在各种可能的环境条件下进行充分的测试,以避免由于测试不全面所导致的严重后果。面向自动驾驶系统的测试主要分为仿真测试和实景测试,但由于使用实体的自动驾驶车辆进行实景测试的成本过高,且因测试中的操作不当对测试场景的破坏较大,因此在进行实景测试之前研究人员大多采用大量模拟测试先对自动驾驶系统进行测试[10-11]。
自动驾驶系统共有感知模块、决策模块、控制模块和辅助组件这4 部分[12],目前对自动驾驶系统测试的研究主要集中在感知模块、决策模块、辅助组件上,各个模块的测试方法和测试用例的生成方法都有所区别。本文总结了自动驾驶系统的测试方法及测试用例的生成方法,并对自动驾驶系统测试的未来发展进行展望。
自动驾驶系统的感知模块顾名思义,是整个系统的“眼睛”,该模块由数个传感器组成,能够感知并识别车辆周围的环境信息,并传输信息数据,在系统中起到不可或缺的作用。但由于感知模块识别错误会造成安全事故频发,如2019 年特斯拉[13]自动驾驶电动车在测试过程中,因为摄像头无法从白色天空背景中分辨出白色卡车,导致两车相撞。因此,对感知模块进行测试是十分必要的。
早期感知组件的测试方法主要是生成对抗样本[14],这也是最为常用的自动驾驶系统测试方法之一。这种方法的理念与模糊测试中的变异测试用例具有相似性,都是基于原始的测试用例做出一些较小的改变。以生成实体对抗样本为例,是在原有测试用例(如道路两旁的标志)的基础上,进行移动、小幅度缩放等修改,使深度神经网络对其做出错误的识别。Eykholt 等[15]提出了一种产生物理对抗输入的算法,它能够生成对抗样本并成功地欺骗到一个用于识别交通标志的DNN 分类器,以及当前最先进的目标检测算法YOLO;该算法可以产生小的标签扰动,使待测车辆的探测器做出错误的识别。
由于感知组件的信息输入通常是具有连续性的视频信息,对抗样本则多由图片构成,因此对抗样本面临着是否具有实用性的问题。同时,在没有额外人工标签的情况下,新数据上发生的错误不会被检测到。基于此,Ramanagopal 等[16]提出了一种自动方法来识别没有真值标签的物体探测器会造成的识别错误。一对相似图像之间的目标检测器输出的不一致可以作为假阴性(例如漏检)的假设,并且对每个假设使用一组新的特征,可以用一个现成的二进制分类器来发现有效的错误。该团队研究了2 种不同的因素——时间和空间的不一致性,经过实验证明,该方法可以用于任何基于摄像头的物体检测器。
Zhou 等[17]提出了DeepBillboard 这一测试方法,对自动驾驶系统进行了系统的测试。DeepBillboard 开发了鲁棒的联合优化来系统地生成可以“粘贴覆兽”在路边广告牌上的对抗性扰动,以在具有不同观看距离和角度的多帧场景中一致地导致待测车辆的错误转向。大量实验证明了DeepBillboard 在不同数字虚拟和实际物理场景中测试各种自动驾驶系统的有效性。
LGSVL 这一软件可以生成虚拟道路场景,并可以人为设定或随机生成天气、路障、行人等环境信息。Talwar 等[18]利用此软件,按照真实场景生成虚拟场景并进行测试,将测试结果与真实场景下的测试结果进行比对,发现虚拟场景下的测试并不能等效代替真实场景下的测试,在一些场景数据上仍存在一些问题,因此如何将虚拟场景仿真测试的结果迁移到真实场景并能生效是目前研究仍存在的问题。
决策模块在自动驾驶系统中的角色相当于“大脑”,接收到感知组件传输的信息数据后,对不同维度的数据进行融合与统一,并根据数据信息对当前驾驶行为及车辆的行驶路径进行决策和规划,并将决策向下传递给控制组件,从而实现对自动驾驶车辆驾驶行为的控制。目前已有一些较为成熟的算法用于路径规划方面,如遗传算法[19]及各种基于遗传算法的改进算法[20]、以生物种群行为为启发的算法[21]、迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd)算法等。
测试决策组件常用的方法有生成违反规则的场景以测试该模块是否能做出正确决策。Emzivat 等[22]引入需求违反模式的概念来描述特定的场景需求违反组合。基于这一思想,提出了一种名为EMOOD 的测试方法,该方法可以有效地生成测试场景,以尽可能多地暴露需求违反模式,该方法建立在进化多目标优化(EMOO)的基础上,以需求违反模式的初始优先级(IP)和动态优先级(DP)为指导,在每次迭代中识别要搜索的违反模式,经实验证明,该测试方法是适用且高效的。
Tuncali 等[23]提出了一种基于鲁棒性度量指导的自动驾驶汽车控制器自动化仿真测试方法,提出的自动驾驶系统测试框架的主要组成部分是S-TaLi Ro 的优化引擎、仿真引擎、鲁棒性评估函数和仿真配置。该方法的目的是通过鲁棒性函数来找到会引发碰撞的临界点数值,通过实验表明该方法能够成功检测出违反规则场景。
Zhou 等[24]提出了一种新的用于无人驾驶汽车测试的框架AVUnit。首先,该团队提出了SCENEST 来描述测试场景,AVSpec 来描述场景执行过程中需要遵守的不同规范。其次,该团队提出了失效诱导模糊测试算法来搜索违反定义断言的场景,以及失效覆兽模糊测试算法来搜索会违反断言中的不同谓词的场景,并在LGSVL+Apollo 的联机虚拟平台上实现并实验评估了AVUnit 这一框架,暴露出了Apollo 的10 余种问题,证明其对于自动驾驶系统测试的有效性。
Mullins 等[25]提出了一种新的方法来生成黑盒自动化系统的测试场景,该系统在其性能模式中表现出关键的转变,利用自适应采样来智能地搜索存在于不同性能模式边界上的测试场景状态空间。此外,使用无监督聚类技术,可以根据场景的性能模式对其进行分组,并根据转换自动系统行为变化的场景的有效性来进行排序。
Koren 等[26]将之前用于测试飞机防撞系统的自适应应力测试方法扩展到自动驾驶车辆,依据此提出了一种用于测试自动驾驶汽车决策系统的方法。这一方法是对驾驶环境中的随机元素进行扰动,直到车辆发生碰撞。该团队将问题描述为一个马尔可夫决策过程,使用强化学习算法来寻找最有可能的失败场景,同时提出了可扩展到大型环境的蒙特卡罗树搜索(MCTS)和深度强化学习(DRL)解决方案,采用一个车辆接近人行横道的仿真场景用于验证该框架,该方法的通用性很强。
自动驾驶系统除了引导车辆进行正常的行驶外,还有许多综合组件来协助车辆完成一些特定的行为。如自动泊车(APS)、紧急制动(AEB)、自动巡航(ACC)[27]等,这些辅助组件大部分都应用到了感知组件、决策组件和控制组件中的2~3 个组件,协作完成一项辅助功能。近年来,研究人员对于这些辅助组件的测试也得出一定研究成果。
Bühler 等[28]针对自动泊车系统,提出了2 种不同的适应度函数构造方法来自动测试该系统的功能。一种是使用车辆与碰撞区域的距离作为评价适应度的度量,另一种方法是使用车辆与碰撞区域的面积作为适应度函数的度量,测试环境中的适应度函数旨在评估一次泊车行为并为其分配足够的适应度值。适应度值应与自动泊车的好坏程度相对应。一个好的自动泊车行为是待测车辆不会与其他静止车辆发生碰撞。相对的,一个失败的自动泊车行为是使其他静止车辆受损。为一次自动泊车行为分配的适应度值应越大越好。当其他车辆在该过程中受损时,适应度值应变为负值。
Tao 等[29]提出了一种能够应用于工业领域的自动驾驶系统测试方法,该团队以自动紧急制动系统(AEB)为案例来进行研究,首先以UML 为建模语言为被测系统构建本体,以覆兽所有场景,如车与车前后间隔固定(CCRs)、车与车间隔制动(CCRb)等经典车车交互和人车交互的场景。经实验证明该方法能够有效对自动驾驶系统的AEB 功能进行测试。
Abu 等[30]对高级驾驶辅助系统(ADAS)进行测试,使用了一种基于设定目标函数的进化算法——NSGAII 算法,并引入了决策树分类模型这一新概念,通过该算法进行多目标优化迭代生成测试用例进行测试,通过实验证实该测试方法能够得到更加符合真实场景的模拟测试场景,使测试结果更加贴近现实,实用性大幅增加。
由于感知模块多由各种传感器组成,因此基于真实场景对其展开测试的结果实用性往往更强。Araiza-Illan 等[31]基于机器人运行系统的测试,提出了一种全新的理念:将信念-愿望-意图(Belief-Desire-Intention,BDI)智能体与传统的基于模型的测试生成形式进行比较,以机器人的人机协作为测试的指标之一,通过实验证明,该方法与模型检测生成的测试用例性能相当,并且优于伪随机生成的测试用例。
Tian 等[32]设计、提出并评估了用于深度神经网络(DNN) 驱动的自动驾驶汽车自动化测试工具DeepTest,用于自动检测可能导致致命碰撞的自动驾驶系统的错误行为,也是数据驱动测试的一种方法。
Zhang 等[33]提出了一种无监督学习框架DeepRoad,用于合成逼真的驾驶场景,以测试基于DNN 的自动驾驶系统的不一致行为,并验证在线输入图像以提高系统的鲁棒性。在3 个真实的自动驾驶系统模型上的实验结果表明,DeepRoad 可以成功检测出自动驾驶系统的错误行为。
Emzivat 等[22]提出了一种设计多传感器数据融合系统的形式化方法。该团队在多传感器融合方案中,用Petri 网对已知算法进行建模。然后将可靠解决方案的特征提供给嵌入式安全模块,利用了一种数据融合算法作为在线重新配置和决策任务的支撑。
决策组件的测试用例生成方法主要分为2 大类,一种是场景引导生成测试用例,一种是图像引导生成测试用例。第一种方法主要是依照遗传算法的思想,通过初始的测试用例,根据一定规则迭代反复生成测试用例;第二种方法是训练数据集的思想,通过定义奖励函数来引导生成测试用例。
Tang 等[34]提出了一种基于路径覆兽率的测试方法CROUTE,用于地图上自动驾驶系统的路径规划测试。首先将映射建模为带标签的Petri 网。在Petri 网的基础上,根据节点拓扑特征和路由特征对节点进行分类,并提出了一种称为路由类型的度量来衡量路由多样性。该团队还提出了ATLAS[35],一种在全局地图上高效测试ADS 的新方法。它首先通过交叉口车道分类和选择生成一组基于地图拓扑的场景进行测试,对于每个选定的车道,ATLAS 将场景参数化为车道上自动驾驶车辆的初始位置和目标位置,以及沿车道相交汇合车道行驶的由计算机的人工智能控制的角色(NPCs),最后,采用遗传算法生成测试用例。该团队还提出了一种对运行在地图上的ADS 进行两两避免碰撞的测试方法[36]。首先,基于地图的拓扑结构将交叉口车道划分为不同的类别。然后,提取不同的场景并构建模糊准则来评估每个测试用例的执行情况。其次,应用二分法生成能够更有效和高效地触发ADSs 故障的测试用例。最后,在Apollo 上分别对上述3 种方法进行了实验,结果表明了这些方法的有效性和高效性。
Koren 等[26]采用了场景引导测试用例生成的方法,将测试问题描述为一个马尔可夫决策模型,通过定义奖励函数来生成测试用例,在算法方面,该团队采用了蒙特卡洛决策树搜索算法和深度强化学习算法这2 种算法,结合马尔可夫决策模型,不断迭代生成新的测试用例,组成自动驾驶系统的测试用例集。
Gelder 和Paardekooper[7]提出了一种使用蒙特卡洛模拟的真实场景评估ADS 性能的数据驱动的方法。可以通过进行更少的真实场景道路试验,对真实场景进行参数化,生成符合规则的测试用例。
Bühler 等[28]将生成测试用例的过程改为测试优化的过程,将手动的生成测试用例优化成为自动化生成测试数据的方法,将被测系统的可能输入情况都映射到一个搜索空间,且要尽可能缩小,同时在足够小的搜索空间中能够满足一切所需的条件。该团队采用Matlab 的GEA 工具箱,测试数据生成器输出的是汽车的位置和停车位的大小等仿真停车场景所需的参数。通过实验证明面积准则函数比距离准则函数能更好地搜索导向碰撞趋势。
Tao 等[29]基于Euro NCAP 协议构建并推导了AEB本体。首先利用算法对本体进行转换,得到CT 输入模型。然后使用AVL 工具生成测试组件。为了得到具体的测试组件,将其转换为Open Scenario 格式文件进行仿真,最后将生成的Open Scenario 文件在仿真平台上加载并执行。经过实验表明,所提出的基于本体的测试用例自动生成方法可用于工业环境下的自动驾驶功能测试。
Abu 等[30]使用多目标搜索算法来生成测试用例,该团队定义了2 个目标函数,分别为行人与车辆的距离和碰撞时间,分别使2 个目标函数适应度值达到最大和最小,即在行人与车辆的距离最小的情况下实现碰撞时间最大化。该团队以NSGA-II 算法为基础,创新的应用决策树模型,以实现高效生成测试用例。
随着人工智能、计算机科学等技术的蓬勃发展,自动驾驶技术逐渐进入生活并逐步取代全人工驾驶,自动驾驶系统作为智能软件系统,具有很高的社会应用价值,能够应用于各种车型及路段,因此自动驾驶系统的测试也是这一领域的研究重点。
本文介绍了自动驾驶系统及自动驾驶系统场景,简述了自动驾驶系统测试的意义及必要性,并按照系统的组成模块及重要性的区分对自动驾驶系统的测试及测试用例生成方法进行归纳总结与阐述。