面向高速公路车辆切入场景的自动驾驶测试用例生成方法
2021-01-24周文帅朱宇赵祥模王润民徐志刚
周文帅 朱宇 赵祥模 王润民 徐志刚
(1.长安大学,信息工程学院,西安 710018;2.长安大学,交通运输部认定自动驾驶封闭场地测试基地,西安 710018)
主题词:自动驾驶测试 高速公路 车辆切入 测试场景 测试用例 蒙特卡洛方法
1 前言
自动驾驶汽车为解决“交通事故、交通拥堵、环境污染、能源短缺”等问题提供了新的途径[1]。科学完善的测试验证评价体系对提高自动驾驶汽车的研发效率、健全相关法律法规、推进智能交通发展至关重要[2]。自2009年起,谷歌自动驾驶汽车已经进行了超过560 万km 公共道路测试和数十亿公里虚拟测试[3]。UBER、沃尔沃、特斯拉等企业也进行了大量实际道路自动驾驶测试[4]。然而,以UBER自动驾驶测试车辆事故为代表的多起事故表明,在自动驾驶技术成熟之前,实际道路测试具有较高的安全风险和社会风险。
此外,与传统汽车的人-车二元独立测试不同,自动驾驶汽车是人-车-路-环境强耦合系统,传统的道路场地测试已经无法满足自动驾驶汽车的测试需求。基于场景的虚拟测试技术试验场景配置灵活、效率高、重复性强、过程安全、成本低,可实现自动测试和加速测试,同时,虚拟测试系统能够模拟实际车辆测试中危险或难以实现的极端场景[4-5],大幅降低测试的难度和风险,减少工作量。因此,基于场景的虚拟测试已成为自动驾驶汽车测试评价不可或缺的重要环节。研究人员在测试场景构建方面做出了大量努力[6-7],Xia等利用层次分析法选择测试场景中的重要因素,通过组合测试法构建虚拟测试场景[8-9],Zofka 等利用多种传感器采集数据,提出一种在虚拟环境中利用真实交通数据构建高风险测试场景的方法[10]。
现阶段的自动驾驶领域,“场景”还没有明确和统一的定义,同时,现有研究集中于自动驾驶测试场景的分析与构建,缺少对测试用例设计和生成的研究。因此,本文提出一种测试场景的定义,同时提出基于实际交通场景的测试用例设计和描述方法,并通过分析高速公路车辆切入场景进行验证,运用highD数据集实现测试用例设计,并利用蒙特卡洛方法(Monte Carol Method)生成测试用例。
2 自动驾驶测试场景及用例
2.1 测试场景概念
在现有针对自动驾驶汽车测试场景的研究中存在不同的场景定义。依据场景的分类,Elias Rocklage等提出“场景为一段道路上观测车辆自身与其他静态或动态物体的组合”[11]。考虑时间延续性,Gelder 将场景定义为一段时间内观测车辆自身运动和所在静态与动态环境的组合,突出场景连续性[12]。Hala Elrofai 等提出“场景是在一个特定时间范围内,测试车辆周围动态环境的持续变化,包括测试车辆在该环境中的行为”[13]。
在总结现有场景定义的基础上,本文提出一种适用于测试场景构建的场景定义。对于自动驾驶汽车测试而言,测试场景是测试对象在交通环境中与其他相关交通参与者交互实现行驶意图的过程。其中,行驶意图是指测试对象完成自身运动状态改变,例如完成一次自由变道或在交通路口转向。交通环境是测试对象运行的道路、气象、光照等静态环境。交通参与者是指场景内对测试对象运动状态有影响的场景元素,如与测试车辆行驶路线有冲突的车辆、行人等,在场景的观测与分析中,对测试对象运动没有影响的元素可以忽略。
2.2 测试用例的定义
在自动驾驶汽车测试中,场景是对真实交通环境中一类运行过程的抽象描述,测试用例是相应测试场景的可执行实例。一个完整的测试用例描述包含测试用例所属测试场景描述和测试用例要素信息。其中,测试场景描述提供了测试环境和测试过程的抽象描述,测试用例要素信息提供了测试环境中各要素的取值及测试中交通参与者的起始状态、状态变化过程和预期运行结果。
本文以高速公路环境下车辆切入为例,描述测试用例。由于高速公路环境交通场景相对单一,以平直道路上相邻车道车辆切入为测试场景。被测车辆在车道2中循线行驶,目标车辆在被测车辆相邻车道1中保持平稳直线行驶。在切入开始时刻T0,目标车辆位于被测车辆侧前方,开始向车道2 切入。在T1时刻,目标车俩切入车道2并行驶至T2时刻。在切入过程中,两车存在发生碰撞的风险。车辆切入过程如图1所示,测试用例要素如表1所示。
图1 车辆切入过程示意
表1 采集要素表
2.3 测试用例构建
真实交通数据中蕴含多种交通场景。基于真实交通场景生成该场景下测试用例的方法如图2 所示。真实交通场景可分解为静态交通环境和交通参与者的运动过程。其中静态交通环境涵盖道路状态、路侧设施、气象及光照条件等影响车辆运行的环境条件,从中可以提取出测试场景中的静态环境元素。交通参与者的运动过程是被观察对象在静态环境中与其他交通参与者交互运动并实现自身运动意图的过程。交通参与者的运动过程是测试场景的核心,为生成测试用例,需要对运动过程进行建模并分析真实场景的大量实例,估计模型的描述参数分布,从而实现由真实场景向标准测试场景的转变。在此基础上,针对不同的测试对象、测试方法和测试内容,灵活赋予描述参数不同的取值,组合不同的静态元素即可生成相应的测试用例,以适应不同测试需求。
图2 测试用例构建框架
3 测试用例构建关键技术
3.1 基元场景提取
基元场景提取是从实际交通场景中分离出基元场景并确定其描述向量的过程。通过基元场景提取,实际交通场景被分解为独立的基元并实现模型化和参数化。
本文采用参数估计法实现场景模型描述变量的分布规律估计。参数估计法利用先验知识假定数据总体服从某一分布,再利用样本数据求解分布的未知参数,通过对比不同的估计结果确定数据总体服从的分布。本文中采用高斯混合模型(Gaussian Mixture Model,GMM)对场景模型描述变量的分布进行估计[14]。
假设待估计的随机变量为X,其高斯混合模型表示为:
式中,N(x|μk,Σk)为高斯混合模型中的第k个分量;x为X的一个样本;μk为均值向量;Σk为协方差矩阵;αk为混合系数,满足。
在参数估计时,假设数据总体服从高斯混合分布,概率分布由式(1)中的高斯混合模型表示,模型中包含N组未知参数(μk,Σk,αk)。参数估计就是根据样本数据确定模型参数取值的过程。对于未知参数,可以通过期望最大(Expectation-Maximization,EM)算法迭代计算,假设样本为{x1,x2,…,xn},观察一个样本点,不能确定此样本点属于高斯混合模型中的哪一个分量,因此引入隐含随机变量Z。
设N维随机变量Z=(z1,z2,…,zN),zk∈{0,1},zk=1 表示样本点属于第k个模型分量,zk=0 表示样本点不属于第k个模型分量。对任意样本点xi,Qi(Z)表示隐含变量Z的分布,满足。
EM算法是解决隐含变量优化的有效方法。求解未知参数的最优化取值,首先需要确定隐含变量的概率分布。由式(1)得,X总体的概率分布为P(x:μ,Σ,α),其中(μ,Σ,α)是待估计参数[15],μ、Σ、α分别为均值、协方差矩阵和混合系数。
EM算法分为4步执行:
a.对应每一个样本xi,设置(μ,Σ,α)的初始值。
b.根据当前的(μ,Σ,α)值,对于每个样本点xi计算后验概率:
c.根据当前的后验概率计算新的(μ,Σ,α)参数值。固定后验概率,求解P(x;μ,Σ,α)的最大似然估计。
P(x;μ,Σ,α)的似然函数为:
将l对μk求导,并令导数为0,得到μk的更新公式:
同理,将l对Σk和αk求导,并令导数为0,得到Σk和αk的更新公式:
d.使用更新后的参数(μ,Σ,α)计算似然函数l,若l收敛于似然估计的最大值,即更新后的似然函数l不变或变化幅度很小,则表明求解出的(μ,Σ,α)参数是最优化参数,若未收敛于最大值,则返回步骤b继续迭代计算。
3.2 基元场景生成
根据基元场景描述模型及其描述变量,可以重新生成测试基元场景。通过基元场景的生成,可以获得远多于实际采集且符合测试要求的基元场景,满足自动驾驶测试对复杂交通运动过程的覆盖性要求。
真实交通运行过程通常具有高维性和复杂性的特点,在测试用例生成过程中,若对其所属场景数学模型进行简化假设,可能会导致近似结果与实际存在较大的偏差。蒙特卡洛方法能够直接模拟实际复杂系统,可以有效解决复杂系统简化导致的结果失真问题,且误差与问题维数无关,是解决复杂高维问题的有效方法[16]。本文依据模型描述变量的分布,采用蒙特卡洛方法进行随机取样生成基元场景。
因此,假设用随机变量X表示蒙特卡洛方法生成的场景,x为X的一个场景样本,服从概率密度函数为f(x)的分布。假设高风险场景集合为W,为了从生成的场景中选择高风险场景,定义高风险场景指示函数h(x):
如果场景总体C中指示函数h(x)的期望为E,方差为σ2,则E为:
假设场景总体中高风险场景出现的概率为p,则h(x)的期望E=p,方差σ2=p(1-p)。
利用蒙特卡洛方法生成n组场景样本xi,i=1,…,n,当样本容量较大时,依据大数定理,h(x)的样本均值以概率1收敛于期望E,称为E的蒙特卡洛估计量:
式中,zδ为正态偏差;δ为置信概率。
3.3 测试用例的组合
测试用例的构建是将提取出的基元场景根据测试任务确定场景要素的参数,按照一定规则重新组合的过程。针对不同的测试对象、测试方法和测试内容,可以灵活地控制测试用例的基元数量和场景要素的参数,构建出相应的测试用例,从而适应不同的测试需求。
如图3所示,首先选取组成测试场景所需的基元场景形成功能测试场景。在此基础上确定基元场景描述变量及其取值区间,为基元场景选择确定范围,形成逻辑测试场景。最后,根据逻辑场景集中选择基元场景,确定各描述变量的取值,组合生成具体测试用例。为了提高测试效率和降低测试成本,生成测试场景适宜采用强化测试思想,即选择基元场景组合生成高风险测试场景。
图3 测试用例组合
4 测试用例构建示例
在场景建模中,采用highD数据集作为真实交通数据来源。如图4所示,该数据集的采集区域为近似直线的高速公路路段,长度约420 m,包含5 条主行车道[17]。数据采集时间为45 min,包含非高峰时段和高峰时段。数据集以0.1 s 时间间隔提供采集区域内车辆的位置、行驶车道、速度、加速度等详细行驶参数及车辆的长度、宽度和车辆类型等参数。
图4 数据采集区域
4.1 车辆切入测试场景建模
在示例中,本文选定的测试场景为高速公路直线行驶条件下的车辆切入避撞场景。同时,为简化示例的场景构建过程,只考虑路面层中两车相互运动场景。
如图5所示,A车为切入车,B车为自动驾驶车。在切入时刻T1前,A、B车分别保持在相邻的车道1、车道2内行驶。T1时刻,A车越过车道线驶入车道2,此时A、B车速度分别为VA、VB,两车在前进方向上的距离为L。A车完成切入动作后,保持在车道2内行驶。A车切入过程中,B车需根据A车行驶速度及两车距离调整自身行驶速度,跟随A车在车道2内行驶。
图5 车辆切入避撞场景
为评价车辆切入场景中不同测试用例的危险性,需要建立测试用例危险性评价指标。为简化建模过程,参考自动紧急制动(Autonomous Emergency Braking,AEB)算法中对两车碰撞风险[18]的描述方法,本文以A车切入时刻为关注时刻,以该时刻两车的碰撞时间(Time to Collision,TTC)作为评价指标。在T1时刻,两车速度差为Vref=VA-VB,碰撞时间tTTC=-L/Vref。因此,车辆切入避撞场景模型可以由切入时刻的3个变量L、Vref、tTTC描述。
4.2 车辆切入测试场景提取
从真实交通数据集中提取的A 车典型切入轨迹如图6所示,其中,x、y分别为纵向和横向位移。本文提取A车切入时刻前、后各2 s(50帧)数据,分析车辆切入过程中A车速度变化情况。由于横向速度很小,只关注道路行驶方向的速度,计算相对速度变化。
图6 车辆切入过程的轨迹
车辆切入过程的相对速度差为:
式中,Vmax、Vmin、Vmean分别为车辆切入过程的最大速度、最小速度和平均速度。
提取的4 277 个实例的相对速度误差如图7 所示,从图7 中可以看出,90%以上的实例车辆A 的纵向速度VA波动在10%以内,可以认为在切入过程中A车速度保持稳定。因此,测试场景中运动过程可以用两车在纵向、横向上的相对位置和相对速度描述。
图7 切入车辆的速度相对误差
依据高速公路环境下前车切入场景模型,从数据集中提取相应数据。在T0时刻,A、B两车间距为D。根据基于TTC 模型的AEB 算法划分[18],当tTTC<2.9 s 时,系统发出碰撞预警,当tTTC<1.9 s 时,系统采取40%制动,当tTTC<0.9 s 时,系统全力制动,因此设定tTTC∈(0,2.9]s 时为危险场景。根据GB 21670 的规定,车辆制动最大加速度为-6.43 m/s2,假设高速公路上车辆以100 km/h 的速度行驶,考虑比较极端的情况,切入车辆速度很小,那么制动所需时间不大于4 s,考虑系统反应时间,设定边界条件为6 s,因此设定tTTC∈(2.9,6]s 时为高风险场景。在此车速下,20 s内车辆行驶距离超过了激光雷达等感知系统的感知范围,故超过20 s不再考虑,设定tTTC∈(6,20]s时为低风险场景。
前车切入场景的基元场景提取结果如图8所示,图中每个点对应提取出的1个切入实例。其中,包含危险场景的实例共13个,包含高风险场景的实例共431个,包含低风险场景的实例共2 492个。
图8 车道变换基元场景提取结果
4.3 车辆切入测试用例生成
在基元场景提取基础上,本文利用蒙特卡洛方法进行基元场景生成。结合场景描述模型,选定参数取值范围为L∈(0,150]m,Vref∈(-18,0]m/s,生成测试用例中选择切入点tTTC∈(0,20]s。分别利用蒙特卡洛方法生成4 277个、1万个、2万个、3万个和5万个基元场景。
为展示基元场景生成情况,将参数Vref和D的取值范围分别等分为30个区间,则在[Vref,D]取值范围内共有900 个区间。统计生成基元场景在每一个小区间内的数量如图9所示,其中白色方格表示没有生成基元场景落在该区间中,颜色越深表示生成的基元场景落在该区间数量越多,黑色方格表示超过20 个生成的基元场景落在该区间中。
图9 真实场景实例和生成的基元场景分布
根据区间内包含的基元场景数量对区间进行分类统计,结果如表2所示。
表2 按基元场景数量分类的区间统计结果 个
由表2可知,highD数据集所含4 277个真实场景实例覆盖区间中共有200 个区间含有不少于5 个场景实例,生成的4 277 个基元场景中共有201 个区间含有不少于5 个基元场景。对比真实场景实例与基于蒙特卡洛方法生成相同数量的基元场景表明,在基元场景生成中基于高斯混合模型参数的分布估计结果比较准确。
1万个、2万个、3万个、5万个生成的基元场景分别比真实场景实例覆盖区间数量提高50.2%、70.9%、81.3%和90.2%。其中包含不少于5个基元场景的区间分别有306个、367个、407个和454个,比真实场景实例覆盖区间数量提高53.0%、83.5%、103.5%和127.0%。对比结果表明,生成基元场景越多,基元场景覆盖范围越大,且区间内基元场景丰富程度越高,有利于从基元场景集中选择相应基元场景用于测试。
然而,通过对比可以发现,随着生成基元场景数量的不断增加,场景覆盖范围的增长速度不断降低,表明受参数分布限制,依靠增加生成基元场景数量,对基元场景覆盖度提升效果有限。
此外,表3 给出了原场景实例与生成的1 万个基元场景中不同类型场景的数量及对应的碰撞时间tTTC取值范围。通过对比可知,不同tTTC取值对应的基元场景比例几乎保持不变,这说明在不改变参数分布的条件下,仅通过增加基元场景数量不能提高其中高风险场景的比例。
表3 不同碰撞时间取值对应基元场景数量
利用蒙特卡洛方法生成的基元场景中,危险场景仅占生成基元场景总数的0.99%,高风险基元场景占总数的10.21%。由于真实交通中高风险场景实例发生概率较小,采用蒙特卡洛方法生成的基元场景中对自动驾驶汽车场地测试有重要意义的危险和高风险基元场景所占比例较小。因此,希望满足场景覆盖性的同时,生成的基元场景集中包含较多的高风险场景,保证基元场景集对真实交通环境中高风险场景尽可能完整地覆盖。本文使用基于重要性抽样的蒙特卡洛方法实现基元场景生成。
重要性抽样是通过选择适当的分布g(x)代替原始概率分布f(x),提高低概率事件在抽样中的比例,增加生成样本中低概率事件的数量,减小方差,减少所需样本总数[19]。发生车辆切入时,两车距离越小,两车速度差越大,碰撞时间越短,生成高风险用例的可能性越大。为解决蒙特卡洛方法生成的高风险用例数量不足的问题,采用重要性抽样方法,提高tTTC在D较小,|Vref|较大区域的分布概率,生成tTTC关于D和Vref的修正分布g(D,Vref)。利用分布g(D,Vref),结合蒙特卡洛方法随机抽取D和Vref值,生成1 万个基元场景,其结果如图10 和表4 所示。
图10 基于重要性抽样生成的1万个基元场景分布
表4 重要性抽样的蒙特卡洛方法生成基元场景结果
表4 中,在其他条件保持不变的情况下,相比蒙特卡洛方法生成的基元场景,结合重要性抽样的蒙特卡洛方法生成的基元场景中危险场景数量提高了157%,高风险场景数量提高了115%。通过对两种方法的基元场景生成结果可以看出,在生成同样数量的基元场景条件下,利用重要性抽样的方法可以提高基元场景生成的覆盖性,有助于在测试场地内选取部署高风险场景,执行自动驾驶强化测试。
5 结束语
本文根据测试用例的特点,提出了一种适应于测试场景构建的场景定义,设计了测试用例构建的体系结构,同时提出测试用例的描述方法。在此基础上,根据数据驱动的车辆轨迹,对测试用例进行了建模,然后通过蒙特卡洛方法和基于重要性抽样的蒙特卡洛方法生成测试场景,再结合场景元素形成测试用例。验证结果表明:基于真实交通数据,利用本文提出的方法可以获得多样化的测试用例,满足自动驾驶测试对复杂交通运动过程的覆盖性和有效性要求。