1. 引言
基于测试场景对自动驾驶技术的可靠性进行验证是当前自动驾驶安全测试领域的重要手段,研究可靠的场景高效生成方法是目前行业研究的热点。场景数据的来源包括自然驾驶数据、道路信息采集数据、道路交通事故数据和专家经验等,根据来源和元素之间冲突性的不同,可以构建自然驾驶、危险工况、标准法规测试和参数重组场景 [1] 。德国PEGASUS项目 [2] [3] 按照场景的抽象等级和场景数量将测试场景划分为功能场景(Functional Scenarios)、逻辑场景(Logical Scenarios)和具体场景(Concrete Scenarios)三类,功能–逻辑–具体场景三级分层体系是当前场景研究中最为清晰明了、接受程度最高的划分,在场景研究中扮演着非常重要的角色。
然而,仅仅依靠自然驾驶数据、路采数据和道路交通碰撞事故数据来构建场景是有限的,无法满足自动驾驶测试对场景数量和质量的需求。因此国内外部分学者提出场景泛化的概念,通过解析和处理已有的路采数据或交通事故数据,按照需要重新组合,实现危险场景的组合泛化生成。修海林 [4] 采用了两种不同的抽样算法,分别是MH抽样算法和重要性采样抽样,用于生成普通场景测试用例和关键场景测试用例,并将这些场景测试用例应用于ACC功能的仿真验证中。Li等 [5] 采用了分层博弈论理论,对驾驶员的决策行为与交通中其他参数的交互进行建模,构建了不同类型的测试场景,可用于自动驾驶测试。Fabian等 [6] 在连续随机采样的基础上,分析了系统安全影响因素,并将连续参数离散化,采用生成组合测试集的方法重构测试场景。Duan [7] 等基于复杂度指数对组合测试方法进行改进,通过此方法生成的测试场景用例具有复杂度高的特点,这些测试用例可以应用于LDW功能的测试验证,有助于进一步提高测试效率。Rocklage等 [8] 采用回溯算法解决潜在的场景约束问题,实现场景中其他交通参与者运动状态的自动生成。Yu等 [9] 提出了IPOG-C算法,该算法考虑了必须的约束条件,并可以批量生成包含约束条件的测试场景用例。此外,他们还利用有限的道路信息采集数据和碰撞事故深度调查数据进行元素级别的场景泛化,以生成高覆盖度的场景用例,结合自动化测试可以实现自动驾驶的加速测试。
综上所述,在场景提取及挖掘方面,多采用传统聚类分析算法对自然驾驶数据或事故数据进行分析和挖掘,尚缺少系统性的场景风险要素量化提取分析。现有的场景推理及泛化技术实现了场景的批量化生成,但在场景组合泛化生成时未充分考虑风险元素之间的交互关系和相对重要程度。结合组合测试方法的泛化原理和泛化特点,以国家车辆事故深度调查体系(NAIS)中真实的道路交通事故为数据基础,对风险元素进行解析处理,研究自动驾驶危险场景的组合泛化生成方法,弥补场景数量和代表性不足的问题,满足自动驾驶测试在场景方面的需求。
2. 风险元素的重要度排序及约束关系
汽车与二轮车相撞事故是最为常见且极易造成严重后果的事故形态 [10] ,本文选择NAIS数据库中交叉路口下乘用车直行与二轮车冲突的事故数据,实现对交叉路口下乘用车直行与二轮车冲突典型危险场景的组合泛化生成。提取处理NAIS数据库中描述事故的相关字段信息形成风险元素,对风险元素取值进行基于模糊综合评价的重要度排序和约束关系解析。
2.1. 提取相关风险元素
从自动驾驶系统的感知、决策、规划、控制中变量的安全性出发,参考相关研究 [11] [12] ,分析对交叉路口下乘用车直行与二轮车冲突典型危险场景影响较大的因素,选取该典型危险场景下的九个风险元素进行组合泛化,风险元素及其取值情况如表1所示。
对NAIS数据库中的案例进行筛选,确定进行场景组合泛化生成的基础数据样本,交叉路口下乘用车直行与二轮车冲突事故案例筛选原则如下:
1) 事故发生路段为交叉路口处;
2) 事故参与方仅为乘用车和二轮车的双参与方冲突事故;
3) 乘用车的行驶方向为直行状态;
4) 选择有道路监控视频、行车记录仪、EDR或PC-Crash仿真任一数据记录的事故案例。
根据上述筛选原则,总计筛选出191例符合条件的交叉路口下乘用车直行与二轮车冲突事故数据,提取191例道路交通事故数据中九个风险元素的字段信息,以此为基础样本用于进一步分析处理。
2.2. 动态变化风险元素等频离散化
由于组合泛化时是基于风险元素取值进行的,因此需要对动态变化的风险元素主车速度、主车加速度和二轮车速度进行离散化处理。对主车速度和主车加速度进行二维正态分布拟合,分析两者之间的关联性,基于二维正态分布曲线进行取值区间的划分。对二轮车速度进行正态分布的拟合,基于正态分布曲线进行取值区间的划分。
经验证主车速度和主车加速度均符合正态分布且相互独立,即主车速度和主车加速度符合二维正态分布 [13] 。计算主车速度和主车加速度的相关参数拟合数值,如表2所示,二维正态分布拟合概率密度函数图像如图1所示。

Figure 1. Fitting probability density function images with two-dimensional normal distribution
图1. 二维正态分布拟合概率密度函数图像

Table 2. Relevant fitting parameter information of two-dimensional normal distribution
表2. 二维正态分布的相关拟合参数信息
联合概率密度函数曲线图中黄色区域代表该概率分布模型下分布概率较大的参数区间,蓝色部分则代表分布概率较小的参数区间。黄色区域近似呈现椭圆形状,说明主车速度和主车加速度的分散情况不同且主车速度的数据分布更加分散,同时椭圆长轴所在的直线斜率为负,说明随着主车速度增大的同时,主车加速度取值区间呈现总体减小的趋势。同时根据驾驶常识,乘用车在直行通过交叉路口且主车速度较大时,不会施加较大的加速度持续深加速通过路口。
基于二维正态分布拟合概率密度函数图像可将主车速度和主车加速度的取值区间进行离散化处理,为保证后续组合泛化时每个取值区间取样概率一致,对主车速度和主车加速度离散化的方式为等频离散化。分别求出主车速度和主车加速度进行等频离散划分取值区间的分位点,等频离散化结果如图2所示。

Figure 2. Results of equal frequency discretization
图2. 等频离散化结果图
同理对二轮车速度进行正态分布拟合,根据概率密度曲线进行等频离散化处理。主车速度、主车加速度和二轮车速度等频离散化后取值区间划分结果及标识化见表3。

Table 3. Value interval division results and identification table
表3. 取值区间划分结果及标识化表
2.3. 风险元素重要度排序
为了体现不同风险元素取值在进行场景组合泛化生成时的相对重要程度,采用模糊综合评价方法对风险元素的取值进行重要度排序 [14] 。以道路交通事故造成后果的严重性作为评价目标,计算在该评价目标下对于不同离散型风险元素取值的隶属度,即计算不同离散型风险元素取值对于造成事故后果严重程度的重要度。
以天气情况为例,晴天、雨天、雪天、雾天分别对事故后果的严重性造成的影响大小即不同天气的重要度取值确定步骤如下:
1) 根据冲突事故数据统计不同事故等级下天气情况的分布情况,如图3所示。圆环由内向外分别代表天气情况中的晴天、雨天、雪天和雾天。可以发现天气为晴天和雨天时的事故等级多为一般事故,事故后果的严重程度较低,天气为雪天和雾天时的事故等级多为重大事故和特大事故,事故后果的严重程度和天气的恶劣情况基本呈正相关关系。

Figure 3. Statistical chart of weather conditions under different accident levels
图3. 不同事故等级下天气情况统计图
2) 确定评价因素集。对将要进行评价的目标看作是由多个影响因素组成的集合,根据事故后果的严重程度,建立评价评价因素集为:
(1)
3) 确定评价集。每个评价因素均有不同的评价等级,不同的评价等级称为评价集合,建立评价集为:
(2)
4) 确定各评价因素的权系数。轻微事故、一般事故、重大事故和特大事故分别对于事故严重程度的权系数可通过不同事故后果严重程度等级对事故后果严重程度的重要性确定,因此权系数为:
(3)
5) 确定隶属度矩阵。分别确定晴天、雨天、雪天、雾天对事故后果严重程度的隶属度,可确定四行四列的隶属度矩阵为:
(4)
6) 确定模糊综合评价模型。在考虑不同评价因素的权系数情况下,可得到综合评价模型为:
(5)
至此得到了晴天、雨天、雪天、雾天对事故后果严重程度影响的重要度分别为0.2092、0.1981、0.3147、0.2781,天气情况的重要度顺序为雨天 > 晴天 > 雾天 > 雪天。同理可分别计算二轮车行驶方向、二轮车类型、相对行驶形式、交叉路口类型和光照条件的重要度顺序。
由于主车速度、主车加速度和二轮车速度进行离散化时各取值区间概率一致,因此主车速度、主车加速度和二轮车速度的每个取值区间具有同等重要度。在实际场景搭建过程中不仅要考虑天气的影响,还要考虑雨天、雪天、雾天天气强度的大小,并将其划分为三种同等重要度的天气强度,取值分别为小、中、大。不同风险元素取值的重要度顺序及标识化见表4,风险元素取值对应的重要度顺序数值越大,代表该风险元素的取值越重要。

Table 4. Importance order result table
表4. 重要度顺序结果表
2.4. 风险元素约束关系
当基于风险元素的不同取值进行组合泛化时,由于不同风险元素取值之间存在不同形式的约束关系,生成的逻辑场景用例会产生部分不符合真实情况或者彼此矛盾冲突的场景用例,因此需要对可能存在的约束关系加以限制。
对于可能存在的约束关系处理可以分为两种形式:一种是在生成逻辑场景用例后对每条用例逐一分析后手工删除不合理的场景用例,另一种是在生成过程中即规避约束组合的出现,保证生成的场景用例中不存在约束关系的组合。相较于前者手动删除生成逻辑场景用例的结果,会破坏不同覆盖强度场景用例的原则,即经过手动删除后的场景用例结果无法保证在t阶覆盖强度下任意t个参数取值的全部组合至少出现一次的前提条件,后者在算法运行过程中即避免了约束场景用例的生成更具合理性。
通过对事故数据的分析,结合专家经验,可以确定以下约束关系:
1) 通过主车速度和主车加速度的联合概率密度图像可以得到当主车以较高的速度通过路口时不会进行深加速;
2) 受到二轮车类型的制约,电动二轮车的二轮车速度取值区间仅可取前五个区间,自行车的二轮车速度仅可取前三个区间。
3) 当光照条件为日间强时,对应的天气情况只能为晴天,在雨天等恶劣天气情况下不会出现光照强度为强的组合;
4) 仅有雨天、雪天、雾天有天气强度大小之分,天气情况为晴天时的天气强度无意义;
5) 当主车直行通过路口时,二轮车类型与相对运动形式的组合会出现主车与二轮车与不冲突的场景,即安全场景,应规避此类场景用例的生成。
3. 自动驾驶测试场景组合泛化生成
基于启发式算法提出一种考虑参数重要度顺序和约束关系的测试用例生成方法,实现对逻辑场景用例不同覆盖强度的组合泛化生成。
3.1. 风险元素约束关系
组合测试可以充分考虑各种因素及其相互作用,是一种科学实用的系统测试方法,该方法克服了正交实验设计、均匀设计等传统方法的不足,设计一组数量较少的测试用例,直接检测各种影响因素及其组合产生的影响。结合场景用例生成的特点,给出以下定义 [15] [16] :
参数集:典型危险场景共有k个相互独立的参数,每个参数对该场景安全性均有影响,所有的参数形成一个有限集合
,称L为该典型危险场景的参数集。
参数取值集:每个参数具有不同的取值,若参数
有t个取值范围,则称
为该参数的参数取值集。
覆盖强度:通过组合测试方法生成的逻辑场景用例中,k个参数中任意t个参数取值的全部组合,在生成的逻辑场景用例中至少出现一次,则称为t阶覆盖强度。若t = 2,则表示任意两个参数取值的全部组合在生成的逻辑场景用例中至少出现一次。
待覆盖组合集:待覆盖组合集是指在进行t阶覆盖强度的用例生成中,在参数空间中每t个参数的全部取值组合形成的集合称为t阶强度待覆盖组合集,用集合O表示。最常见的是二阶强度待覆盖组合集,其表示在参数空间中,每两个参数彼此之间的全部组合形成的集合,即形成参数空间中所有参数的两两组合。
覆盖矩阵:覆盖矩阵(Covering Matrix,简称CM)可用矩阵
表示,该矩阵具有N行k列,其中N表示该矩阵的行数,每一行代表一条逻辑场景用例,k表示该矩阵的列数,每一列代表不同参数的取值,v表示参数取值的个数,t表示该覆盖矩阵的覆盖强度。
混合覆盖矩阵:由于覆盖矩阵中参数的取值数量不一定相同,进而演变出混合覆盖矩阵的概念,可用矩阵
表示,与覆盖矩阵定义类似。
参数约束集:在某些参数取值之间存在某些限制条件的情况下,如何设计测试用例来满足这些条件,称这些限制条件为参数约束集,用集合R表示。
3.2. 基于重要度顺序和约束关系的测试用例生成方法
启发式算法是一类解决复杂问题的算法,它可以在大规模问题上获得较好的解决方案,与传统的确定性算法不同,启发式算法采用的是一种更加灵活的方法,通过启发式搜索、优化和学习等技术来寻找问题的解决方案,在组合测试领域的测试用例生成中有着较为广泛的应用。综合考虑参数重要度顺序和约束关系,通过启发式算法实现不同覆盖强度测试用例的生成。
基于启发式算法,考虑参数重要度顺序和约束关系,实现不同覆盖强度测试用例的生成,可以分为两个步骤:
1) t阶强度未覆盖组合集的生成。通过嵌套循环来遍历所有可能的参数组合生成t阶强度未覆盖组合集,分别有m个取值的n个参数进行t阶强度未覆盖组合集O的生成算法伪代码如表5所示。
2) 引入约束条件和参数重要度顺序,实现对t阶强度未覆盖组合集的扩展,进而得到t阶强度(混合)覆盖矩阵。引入风险元素约束集R,通过对风险元素约束集R的分析,基于参数重要度顺序使用启发式算法对t阶强度未覆盖组合集O进行约束处理下的扩展,根据覆盖强度的不同生成t阶(混合)覆盖矩阵MCA,在此给出算法伪代码如表6所示。需要指出的是,未覆盖组合集O中的参数组合可以分为三种状态(覆盖、未覆盖和约束),其中覆盖组合是指在MCA中至少出现过一次的参数组合,未覆盖组合是指在MCA中未出现过但需要进行覆盖的参数组合,约束组合是指由于约束关系的存在禁止出现的参数组合。
根据不同的测试需求可生成不同覆盖强度的测试用例,将生成的测试用例进行结果的输出可得到不同覆盖强度的测试用例,其中结果的输出可以为.txt或.xlsx等多种文件格式。

Table 5. Generation algorithm of t-order strength uncovered composite set pseudocode
表5. t阶强度未覆盖组合集生成算法伪代码

Table 6. Pseudocode of t-order MCA generation algorithm
表6. t阶MCA生成算法伪代码
3.3. 不同覆盖强度的测试场景用例生成
交叉路口下乘用车直行与二轮车冲突典型危险场景共涉及10个参数,42个参数取值,若要保证所有参数取值组合均被覆盖,即按照穷尽测试(Exhaustive Testing,简称ET)方法生成测试用例,根据笛卡尔积计算将会生成1,119,744个逻辑场景用例,笛卡尔积计算公式见式(6),其中 表示第i个风险元素取值的数量。
(6)
假设每个场景用于测试的时间为20 s,若仅完成上述场景的测试需要不间断运行约9个月的时间,若考虑更多的风险元素及取值,则生成逻辑场景用例是呈指数型爆炸增长的,如此巨大的测试量是无法实现的,其成本更是无法承担的。
自动驾驶测试场景用例通常涉及多个变量参数,这些参数之间存在复杂的约束关系,不同的组合可能导致不同的冲突行为。组合测试方法可以利用这些约束关系,生成一组最小的混合覆盖矩阵MCA,以覆盖所有可能的组合情况,检测自动驾驶汽车在不同场景用例下的行为和性能表现。
考虑场景风险元素的参数约束集和重要度顺序的前提下,对交叉路口下乘用车直行与二轮车冲突典型危险场景实现基于组合测试方法的逻辑场景用例组合泛化生成,不同覆盖强度的逻辑场景用例数量如图4所示,通过多项式的拟合预测预计在8阶覆盖强度下将有25万例测试用例。

Figure 4. Growth trend of the number of logical scenarios under different coverage intensities
图4. 不同覆盖强度下逻辑场景数量增长趋势图
如前所述,在自动驾驶基于场景的测试领域,大多数危险场景的产生是由单参数或两个参数的组合效应引起的,由三个及以上参数相互作用引起的失效逐渐减少,因此在设计测试用例时,生成二阶覆盖强度的逻辑场景用例用于仿真测试即可验证被测车辆在由双因素相互作用场景下的表现情况。通过组合泛化生成方法共生成二阶覆盖强度逻辑场景用例54例,部分逻辑场景用例的混合覆盖矩阵如表7所示。

Table 7. Partial 2nd order coverage intensity logic scenario use case coverage matrix
表7. 部分二阶覆盖强度逻辑场景用例覆盖矩阵
如二阶覆盖强度逻辑场景用例覆盖矩阵中1号逻辑场景用例所示,其含义为:汽车的初始速度和初始加速度分别为(66, 99) km/h和(−0.7, 0.6) m/s2,当汽车直行通过十字路口时,恰逢二轮机动车以(24.9, 36.0) km/h的速度从右侧来车左转进入路口,该场景下的环境变量为日间光照弱下的大雾天气。该逻辑场景用例的可视化表示如图5所示。

Figure 5. Visualization of use case of logic scenario 1
图5. 1号逻辑场景用例的可视化图
统计二阶覆盖强度逻辑场景用例的组合泛化结果,如图6所示,可以发现二阶覆盖强度逻辑场景用例中不包含风险元素相互制约的情况,同时对交叉路口下乘用车直行与二轮车冲突典型危险场景有较好的覆盖度。

Figure 6. Combination generalization result diagram under different coverage intensities
图6. 二阶覆盖强度下组合泛化结果图
4. 对比仿真测试分析
为了验证通过组合泛化生成方法生成的测试场景的有效性,可以选择一辆装有AEB功能的乘用车进行PreScan和MATLAB/Simulink联合仿真。选取场景事故率和主车碰撞速度作为场景危险性的评价指标 [17] ,对组合泛化场景和随机采样场景进行对比测试分析评价。
4.1. 联合仿真环境搭建
荷兰TNO公司开发的PreScan软件是自动驾驶仿真测试领域中应用广泛的软件之一,该软件内置了多种数据接口,可与第三方软件或硬件进行通信,这些接口可用于自动驾驶功能的前期开发和联合仿真测试。PreScan仿真流程主要包括搭建交通场景、配置传感器参数、添加控制算法和运行试验。
针对交叉路口下汽车直行与二轮车的冲突场景,选择PreScan软件自带的TIS传感器作为主车的感知探测系统。结合场景搭建的需求,在主车上搭载一个TIS1短距传感器和一个TIS2长距传感器,在PreScan中的参数设置如图7所示。
(a) TIS1传感器配置信息
(b) TIS2传感器配置信息
Figure 7. TIS sensor parameter configuration window
图7. 传感器参数配置窗口
本文使用PreScan软件中自带的基于TTC模型的AEB控制系统作为主车的运动状态控制器。该AEB控制系统采用双级制动策略,其制动力输出情况可以根据TTC具体取值的大小进行确定,旨在确保驾驶安全性的同时考虑乘客的舒适性。在PreScan软件中,TTC模型控制逻辑如下:当TTC值介于2.6 s和1.6 s之间时,主车会发出警告信息提醒有碰撞风险;当TTC值介于1.6 s和0.6 s之间时,主车会进行40%的半程制动;当TTC值小于0.6 s时,主车会进行100%的全力制动。控制逻辑示意图如图8所示。

Figure 8. AEB control system algorithm logic
图8. AEB控制系统算法逻辑
4.2. 场景危险性对比分析
为了对通过组合泛化生成的逻辑场景进行虚拟仿真测试,需要将风险元素的取值确定为具体的值。对于连续型风险元素,可以考虑将取值区间的中值作为风险元素的具体取值,以便保持各个取值区间的差异性和各个取值区间值域的同质性。对于离散型风险元素的取值即为风险元素的具体取值。
现阶段普遍采用随机采样的方法生成场景测试用例,对交叉路口下乘用车直行与二轮车冲突典型危险场景的十个风险元素进行54次随机采样,生成54例具体的随机采样场景作为参照对比组,与组合泛化场景在场景危险性维度进行对比分析评价。
基于测试场景对自动驾驶进行仿真验证时,车辆在场景中是否发生碰撞和车辆发生碰撞时速度的大小是检验自动驾驶功能最直观的评价指标,通过计算车辆在多个场景中的事故碰撞率和主车碰撞速度大小,可以直接反映自动驾驶系统的优劣。反之,针对同一自动驾驶功能在不同的测试场景集中进行测试时,车辆事故碰撞率和主车碰撞速度同样可以评价不同测试场景集的安全检测能力,若同一自动驾驶功能在测试场景集中有更高的车辆事故碰撞率和更高的主车碰撞速度,则可认为该测试场景集具有更高的场景危险性。因此选取场景事故率和主车碰撞速度两个评价指标 [17] ,在PreScan中搭建的AEB控制系统仿真测试平台中对组合泛化场景和随机采样场景进行仿真测试,在场景危险性的维度进行对比分析评价。编写PreScan仿真测试用例记录表,并以excel表的格式存取,用于记组合泛化场景和随机采样场景的AEB仿真测试结果数据,PreScan仿真测试用例记录表如图9所示。

Figure 9. PreScan simulation test case record chart
图9. PreScan仿真测试用例记录图
通过迭代计算的方式分别计算54例组合泛化场景和54例随机采样场景的场景事故率,其中发生碰撞的场景标记为1,未发生碰撞的场景标记为0,场景事故率的迭代计算公式见式(7)。
(7)
通过迭代计算可得到54例组合泛化场景和54例随机采样场景的场景事故率,绘制场景事故率迭代变化趋势图,如图10所示。可以发现,随着测试次数的增加,组合泛化场景和随机采样场景的场景事故率均逐渐收敛,其中被测车辆在随机采样场景下的场景事故率为18.52%,在组合泛化场景下的场景事故率高达62.96%。可以发现,在场景事故率评价场景危险性方面,组合泛化场景的危险性远高于随机采样场景,是随机采样场景的3.4倍。

Figure 10. Scenario accident rate change trend chart
图10. 场景事故率变化趋势图
由于未发生碰撞事故场景即安全场景中的主车碰撞速度无实际意义,因此将安全场景中的主车碰撞速度作0值处理。分别统计在组合泛化场景和随机采样场景中主车碰撞速度分布情况,绘制主车碰撞速度箱型图,如图11所示。可以发现,随机采样场景下主车碰撞速度集中在0值附近,表示随机采样场景中存在大量的安全场景,无法实际有效的验证被测车辆AEB控制系统应对风险的能力。组合泛化场景下主车碰撞速度集中在0~47.67 km/h之间,主车碰撞速度相对提高,会对乘用车内乘员及二轮车乘员产生更大的伤害,造成的事故后果严重程度更为严重。

Figure 11. Comparison diagram of main vehicle collision speed box type
图11. 主车碰撞速度箱型对比图
5. 结论
本文通过对风险元素的分析处理,实现了对交叉路口下乘用车直行与二轮车冲突典型危险场景的组合泛化生成,选取了场景事故率和主车碰撞速度两个评价指标,对组合泛化场景和随机采样场景进行了对比测试分析。可以得出结论:组合泛化场景的场景事故率是随机采样场景的3.4倍,组合泛化场景中发生碰撞的主车碰撞速度远高于随机采样场景,因此组合泛化场景具有更高的场景危险性。在相同的测试时间和测试成本下,使用基于更高危险性的组合泛化场景进行自动驾驶仿真验证时,可以更快地发现自动驾驶功能的缺陷,可以明显提高自动驾驶的仿真测试效率,节约测试成本,缩短测试周期。
参考文献