复杂环境下自动驾驶系统软件虚拟测试与验证方法

2019-09-26 07:40胡骏胡天翼
汽车文摘 2019年10期
关键词:车载轨迹动态

胡骏 胡天翼

(1.北京计算机应用和仿真技术研究所,北京100854;2.瞬联软件科技(北京)有限公司,北京100102)

主题词:自主系统 自动驾驶 软件测试 虚拟测试 仿真环境

0 前言

特斯拉公司CEO马斯克在几年前曾经预言:“20年内,买无人驾驶汽车会和过去买马那么平常。”如今,随着人工智能和自动驾驶技术不断取得突破,以及各国传统、新兴车企和著名互联网公司纷纷重金投入研发并相继展示推出不同级别的自动驾驶汽车,让人们逐渐相信这一预言在不久的将来会变成现实。按照SAE International对自动驾驶技术的分级标准[1],可分为驾驶辅(L1)、部分自动化(L2)、有条件自动化(L3)、高度自动化(L4)和完全自动化(L5)5个级别。传统车企多选择渐进的技术路线,即先开发驾驶辅助系统,逐渐向高级自动驾驶迭代的技术路线。当前国内多数汽车企业处于L2级到L3级自动驾驶过渡的关键阶段,而互联网企业更多是采用激进的技术路线,即直接开发L4级的自动驾驶系统,并积极组织开展在各种路况条件下的样车测试。

自动驾驶系统是一个复杂的智能化系统,通过与外部环境交互处理大量输入数据,涉及传感器、数据融合、态势分析、运动规划和机器学习等多个领域的先进技术,由此相互结合产生的系统具有能够感知、处理并与其周围环境进行交互的复杂软件系统,由于这类复杂智能系统要处理海量输入的时间相关数据,并同时与其它系统进行交互,受到自动驾驶系统自身操控影响,使此类系统的测试与验证面临极大的挑战。在实际路况下的测试是必须要做的基础测试验证工作,但通过其难以做到充分,除路试道路和环境条件受限外,需要耗费大量人力时间成本,而且对于不同路况、天气、相邻静止和运动实体的复杂环境,特别对一些突发状况难以人工设置和复制,导致系统测试与验证不可重复。因此,必须解决在复杂环境下自动驾驶系统测试充分性问题,保证事故概率在一个可接受的水平,也许通过路试能够达到95%的可靠性,但最难的仍是从95%提高到99.9999%目标[2]。

针对自动驾驶这类复杂系统的测试验证,文献[3]提出了一种新的高度集成的软件测试模式,即在系统中新加入一个安全模块,针对其中易于出错且难于测试的决策模块开展离线仿真测试,并根据已有测试结果在线提供决策信息,以保证决策模块输出结果的安全性。本文基于上述思想进一步探讨了在虚拟仿真环境下开展自动驾驶系统软件测试验证的方法,给出了车载和实验室仿真测试验证系统的组成结构和相关实现方法,以克服目前在实际路况下测试的局限性,在路试基础上进一步提高软件测试充分性,从而达到提高系统安全性和可靠性的目的。

1 虚拟测试验证相关基本概念

由于在实际道路上测试自动驾驶系统和软件的不可控因素及测试本身不可重复,导致考虑在虚拟的仿真环境下对系统和软件进行测试。因此,人们自然会采用能够模仿实际道路的测试方式,即基于场景的测试,并且通过该种测试可以完成在现实世界实际道路测试无法完成的工作。对自动驾驶系统开展基于场景的测试涉及多类复杂问题,而这在常规测试中很难遇到,其中包括:

(1)场景类型:场景类型可以是静态、动态或混合型。静态场景是预先设定好的,即场景中的其他动态实体与自动驾驶系统所在自主系统本身状态无关,而动态场景中的动态实体会根据自主系统行为做出反应。

(2)协同特征:可分为协同行为和非协同行为。根据测试要求可设置自主系统所在场景处于不允许协同行为发生的状态,或使场景中其他交通参与者具有协同行为,这一特征对系统测试非常重要。

(3)场景描述有效性:对于测试过程中涉及的复杂路况及相关设施的描述要足够细化和精确以满足测试要求。例如:一些路况可能涉及各类停车场或乡村土路,如果要测试相应路况的自动驾驶,需要绘制地图并产生相应场景。

(4)输入输出不确定性:一般软件测试选择确定的输入,经过系统处理后产生确定的输出,据此判定测试结果的正确性。相反,对被测自主系统则不具备明确的输入空间且输出也不能明确定义。

(5)运行时间成本:基于场景的仿真测试与实际道路测试同样需要耗费大量的运行时间和成本,因为按场景的细分通常要仿真上百万各种相关或无关场景。当然,在实际实施过程中会重点选择更为复杂和危险的情况开展测试验证,这方面可以参考路试结果和人们对复杂环境、危险场景的已有经验,以此减少测试场景的数量。

基于上述原因,为使问题描述的更清晰,需要进一步定义自动驾驶所在自主系统的状态和其它相关术语如下:

自主系统状态:自动驾驶所在自主系统的状态,包括系统位置、方向和其它外部所需参数及与时间周期性相关的内部参数或初始设置信息,例如:运动规划所需各类参数和信息,仿真测试过程中系统状态要以适当方式存储。

态势:态势被定义为自主系统与其他所有交通参与者当前(瞬间)的状态,其中包括环境中的静态部分,例如:自主系统所在道路和气象条件等。

情景:态势在一定时间间隔出现状态变化的情况,将这种时间连续变化的态势称作情景。

场景:按照特定目的和时间间隔产生一系列情景形成场景。上述态势、情景和场景的时间关系可由图1(a)表示,图1(b)是一个自动驾驶汽车并入一汽车队列的场景。在仿真测试中,场景就是自主系统或者说自动驾驶系统测试的用例,简单的场景由其中相关路网和静态、动态实体组成。

图1 按照特定目的和时间间隔创建一系列场景

静态和动态实体:相对静态实体在场景中不随时间改变其位置或状态,例如:路边停放的汽车,动态实体通常是随时间不断改变其位置或状态,包括运动中的汽车(连续变化)和交通信号灯(离散变化)。

协同和非协同行为:在仿真测试中,动态实体可以对其他相关实体的运动做出反应则称其为具有协同行为,例如:协同的汽车会为要加入队列的车辆让出位置,这类实体可以预先估计其他交通参与者的意图并做出友好的反应。相反,非协同行为是指动态实体只在为避免碰撞而做出反应而不会允许“加塞”。

态势相似性:态势相似是指当自主系统状态及其与所处环境中的特征元素(道路及其标识、静态实体等)的关系相似,其它动态实体也有相同的状态,所谓相似性是其特征参数和相互关系在预先设定的范围内。

测试验证空间:所有可能的态势和由此导出的各种情景按相互关系组成的场景集合被称为测试验证空间。显然,对于复杂情况测试验证空间中各种态势和情景组合出的场景数量是非常庞大的,但通过列举是可以完全被覆盖。

由上述定义可以进一步区分静态场景和动态场景,即当场景中的动态实体是按照预先设定的运动轨迹运动,不考虑其他交通参与者(包括自主系统本身)的情况则属于静态场景,在这种情况下可认为是对自主系统的开环测试模式;而动态实体考虑其他交通参与者并采取协同或非协同行为则属于动态场景,这时其运动轨迹可以根据道路和起点到终点的情况及其他交通参与者状态实时计算,比如采用某种结构化的驾驶模型,上述动态场景可被认为是一种闭环系统测试模式。当然,由此可以导出混合场景。

2 自动驾驶系统虚拟测试组成结构

自动驾驶系统一般包括采集、感知、通讯、数据库、人机接口(HMI)和决策模块,以及控制、执行机构模块,如图2所示。除采集部分直接根据不同传感器采集的数据经处理后输出到感知模块外,自动驾驶系统核心的决策模块要使用其它模块的输出结果,然后将其决策信息发送给控制模块,最后由执行机构控制执行完成自动驾驶任务。

针对自动驾驶这类复杂系统的测试验证,文献[3]提出了一种新的高度集成的软件测试模式,即在系统中新加入一个安全模块(图2中虚线部分),针对其中易于出错且难于测试的决策模块开展离线仿真测试,并根据已有测试结果在线提供决策信息,以保证决策模块输出结果的安全性。在自动驾驶过程中,其决策模块可以向安全模块询问当前态势和规划的机动方式是否合理,后者会使用测试验证数据库信息判断当前态势是否经过验证,且与当前态势临近的后续区域的验证也能得到充分覆盖,据此信息通知决策模块相关处理操作安全或建议新的决策,即改变现有决策使其纳入到经过验证的区域部分。

本文基于这一思想进一步提出虚拟测试与验证系统的组成结构,分为车载仿真测试系统和实验室仿真测试开发系统两部分,见图2中替换原有安全模块的部分,其中车载测试系统面向自控驾驶实际应用,包括在线给出驾驶策略建议和离线仿真测试,其中具体功能如下:

(1)态势搜索:包括相似度分析、态势更新存储、决策结果接收;

(2)任务调度:包括场景/模型选择、验证集合生成、驾驶策略提取;

(3)仿真测试:包括仿真测试执行、监控和测试结果存储;

(4)通讯接口:包括与HMI通讯接口和与测试开发通讯接口。

而测试开发系统则是面向仿真测试开发和测试与验证,包括场景/模型建立、仿真测试验证和结果分析,其中具体功能如下:

(1)场景生成:包括电子地图、静态/动态实体、2D/3D场景生成和场景数据库;

(2)模型建立:包括环境模型(道路、天气和各类交通参与者模型)、自主系统模型(传感器、自动驾驶智能控制系统相关模块、车辆动力学和运动学模型及驾驶员模拟器)和模型库;

(3)仿真测试:包括仿真测试执行、过程监控和测试结果记录及测试验证数据库;

(4)结果分析:包括测试结果分析、模型验证分析、模型调整和更新、车载测试场景/模型/测试结果更新。

测试开发系统是自动驾驶系统设计开发和测试验证的重要手段,从设计阶段智能控制算法的研究到后续软件开发,可利用先期建立的全数字或软件在回路(Safety Integration Level,SIL)仿真测试系统,到后期进一步建立用于实验室自动驾驶系统验证的半实物(Hardware In Loop,HIL)和车在回路(Vehicle In Loop,VIL)仿真测试系统均能够发挥重要作用

图2 自动驾驶系统及虚拟测试验证组成结构

该系统要为车载测试系统提供能够满足所需场景下的仿真模型和测试验证结果,同时依据车载测试系统实际路试产生的场景和测试结果,对已有模型进行验证分析并更新车载测试场景/模型/测试结果。

车载测试系统与自动驾驶系统软硬件紧密相关,需要处理大量实时性要求很高的数据,其中包括在线接收当前态势并进行相似度分析,依据对应测试验证结果给出驾驶策略建议或对未曾有的态势更新存储;另一方面,在离线情况下对新的场景开展仿真测试验证,并适时采用有线或无线通讯方式与实验室测试开发系统交换信息。可以看出,实验室和车载两套系统面向系统测试验证和实际应用各有侧重、相互支持,使测试验证的准确性和充分性不断迭代提升,以满足自动驾驶系统从L2提高到L5的测试验证需求。

3 自动驾驶系统虚拟测试与验证方法

为在虚拟环境下测试自主系统或自动驾驶系统,基于前述虚拟测试与验证相关基本概念需要进一步给出系统测试与验证的基本方法,本文未涉及自主系统模型建立相关传统方法,其相关方法介绍可参考文献[4]。

3.1 基于场景的测试与验证空间

自主系统所在场景可以描述为它在所处交通路网中按运动规划的轨迹移动并不断改变状态,其它相关动态实体也在路网中可以按照协同或非协同行为移动,可以用时空状态网格(Spatiotemporal State Lattices)来表征这种状态转换,图中的结点表示(位置,时间)数据元组,其结点到结点线段表明线路和状态变化,为简化描述用(距离,时间)二维STSLs举例说明,见图3用于表征基于场景的测试验证空间时空状态网格。图中节点划分取决于静态场景中路网和静态实体,并保证其具有足够高精度地图的支持,而通过结点的实际线路是由自主系统的运动规划计算出或者由其他交通参与者的驾驶模型确定。图中网格时间和距离步长大小要根据运动规划是全局规划或局部规划的要求确定。

图3 用于表征基于场景的测试验证空间时空状态网格

特别需要说明,时空状态网格分的越细精度越高,导出的不同线路的场景数量会急剧增加,所有可能的线路组成的场景构成了测试验证空间。图3中给出了图1(b)自动驾驶汽车并入汽车队列(第2和第3辆车之间)场景的一种情况。

3.2 测试场景的参数化

通过上述对基于场景的测试验证空间的说明,可以进一步对静态和动态场景进行参数化,并以此构造所需的场景测试用例,即对场景及其实体特征进行定义,表1~3分别给出道路、天气和静态实体的特征属性,表中的参数和相关数值只是作为一种参考。其中,考虑天气因素是由于天气效应直接会影响到自主系统传感器的测量,表中Φ、θ代表球坐标系下的方位角和高低角,静态实体位置由直角坐标X、Y和指向角Φ表示。

表1 道路参数化特征属性

表2 天气效应参数化特征属性

表3 静态实体参数化特征属性

由于动态实体的参数化需要考虑时间因素,因此更为复杂。这里只以图1(b)自动驾驶汽车并入汽车队列(第二和第三辆车之间)场景的一种情况为例,给出相关第二辆(前车)、第三辆(后车)和自主系统车辆的动态实体参数化特征属性。

表4 动态实体参数化特征属性

表中的参数对应的坐标系是原点在两条道路之间与第3辆车中心平行的位置,X轴与道路垂直的直角坐标系,时间零点取在自动驾驶汽车并入汽车队列前的时刻。显然,自动驾驶汽车并入汽车队列的其他可能性还有很多种情况,例如从第3辆或后续车并入,前述时空状态网格(图3)清晰显示了这种动态实体参数变化的态势,由此将相关网格点作为动态实体在其路径空间-时间上的可能取值,则可得到表4不同的动态实体参数化特征属性。对于如何测试所述各类可能的情况或场景,则要依靠下面介绍的组合交互测试方法。

3.3 组合交互测试方法

通过上述对测试验证所需场景的参数化,使后续工作集中在如何选择相应参数并产生合理和更具实际应用价值场景的方法上。组合交互测试(Combinatorial Interaction Testing)方法是针对软件系统中多个因素(参数)及它们之间相互作用的情况所采取的一种科学有效的测试方法,旨在使用尽可能少的测试用例达到较高的错误检测效果。

对于一个具有k个参数的待测系统,如果每个参数有n个取值,则完全测试需要n的k次方个测试用例,而采用t维组合测试,即其中任意t个参数的所有取值组合至少被一个测试用例覆盖,也称为t维组合覆盖测试,由此生成的测试用例数比枚举的方法大幅度减少,实践证明其所需要的测试用例数是按照k的对数而不是指数增长。目前,常用的组合测试方法分为两大类,即各种贪心算法和启发式搜索算法[5-6],上述方法也很容易推广到处理具有约束的条件的组合测试方法,可见参考文献[7]。

在组合测试中,测试用例集合被表示成组合覆盖矩阵或混合覆盖矩阵,矩阵中的每一行对应待测系统中的一个测试用例,每一列代表系统的一个参数的不同取值。贪心算法的思想是从空矩阵开始,逐行或逐列扩展覆盖矩阵直到所有t维组合均被覆盖。常用IPO(In-Parameter-Order)算法就是首先按成对组合覆盖测试构造前两个参数的所有组合形成一个初始矩阵,然后按矩阵水平和垂直方向进行二维扩展,逐步增加参数列以尽可能覆盖更多的t维元组,如果仍有t维元组未覆盖,则进一步增加新的测试用例行。启发式搜索算法属于搜索最优化问题,在计算效率上不如前者。

本文以场景中动态实体的运动规划为例,重点说明使用组合测试方法解决多车运动轨迹的场景生成,并结合回溯算法处理车与车之间轨迹约束问题。此处仍以图3给出的场景说明应用过程,假设前车已有行车路线形成组合覆盖矩阵CA的一个结点(列)或称为路径-时间元组,在此基础上通过水平扩展增加属于后车的结点,由其轨迹规划根据前车轨迹产生的相关约束条件确定当前轨迹,但从测试角度可以通过简单的网格路径搜索和模式匹配方法(Brute force method)[8]计算出所有可能的轨迹。在理想的情况下,最好前车只有一条轨迹线路,由此产生了约束条件区域并给后车所属新元组规划出相应轨迹线路。如果无法获得后车轨迹,则前车的轨迹需要重新计算,然后重复计算后车的轨迹线路,重复此过程直到能够获取最终解决方案。当然,上述过程可以推广到n个车辆的情况,如图4所示。

图4 n个动态实体运动规划的组合测试用例生成

图4 中实心圆代表已覆盖的轨迹,圆环代表当前可行轨迹,而圆圈是尚未经过测试的未覆盖轨迹。由此可知,参数组合仅包括部分动态实体而不是全部的情况下,即使得到了相应轨迹线路的组合场景,回溯算法仍需要继续寻求包括其它动态实体的组合场景,这实际上是一个逐步由局部到全局场景的组合过程。为使动态实体的轨迹规划更接近于真实情况,可采用文献[9]中提出的轨迹规划预测模型,它能很好模仿人的驾驶行为产生的轨迹线路。

3.4 测试与验证自动化

类似于车载导航系统的情况,通过实验室仿真测试开发系统可以针对实际场景开展虚拟测试与验证,并将测试与验证结果传输给车载测试系统,以便在自动驾驶过程中提供安全决策信息。对于行车过程中车载测试系统当前未经过测试与验证覆盖的部分区域和态势,通常情况下会自动保存并及时传输给实验室开展测试与验证,然后再由其统一发布更新车载测试系统信息。在理想情况下,上述未经测试与验证部分区域态势可以直接由本车车载测试系统利用已有加载的仿真测试资源(典型道路、场景和相关仿真模型)在空闲时自动开展测试与验证工作,所谓“空闲”是指车辆未在行驶过程中但仍处在加电状态,例如:车辆处在停驶的充电过程中。实际上,类似仿真测试与验证需要耗费大量时间和计算资源,如果所有自动驾驶车辆均能够按此执行,并将结果自动传输给实验室测试开发系统进一步综合和测试与验证并发布,那么这样一种自动化处理方式是极为合理,而且利用前述的虚拟测试与验证方法可以实现其自动化过程。

特别指出,自动驾驶系统实际路试的结果对虚拟测试与验证也是非常重要,通过其验证数据可以对典型道路、场景和相关仿真模型进行验证和更新,以弥补虚拟测试与验证由于简化对结果带来的影响。同样,实际路试结果也是测试与验证空间中被覆盖的组成部分,两种测试与验证方式缺一不可且相辅相成[10]。随着自动驾驶级别的不断提高(L2~L5),虚拟测试与验证结果在测试与验证空间被覆盖的比重将占有绝对的优势。

4 结论

本文探讨了针对复杂环境下自动驾驶系统和软件的虚拟测试验证方法,给出了车载和实验室仿真测试验证系统的组成结构和相关实现方法,为进一步基于实际系统开展研究和系统开发打下了良好基础。对于建立实验室条件下的虚拟测试验证系统,目前应该已具备成熟的基础条件;而对于车载测试系统必须要结合实际自动驾驶系统及其软硬件资源开展设计开发工作,并进一步解决其中涉及的海量态势信息的存储、态势相似性判别、大规模混合场景的测试验证方法及其自动化等。相信在未来,随着自动驾驶系统逐步进入实用阶段,车载虚拟测试系统也可以像当今的车载导航一样应运而生并得到普及。

猜你喜欢
车载轨迹动态
国内动态
某车载提神香氛功效验证及应用
一种车载可折叠宿营住房
解析几何中的轨迹方程的常用求法
国内动态
国内动态
轨迹
轨迹
捷豹I-PACE纯电动汽车高压蓄电池充电系统(三)
动态