陈君毅 冯天悦 刘力豪 吴旭阳
(同济大学,上海 201804)
主题词:仿真测试 决策规划系统 场景生成 OpenSCENARIO
自动驾驶系统面临的驾驶环境具有复杂性和不确定性,这对其决策规划系统提出了巨大挑战[1-2]。为寻找系统缺陷,提高安全性,有必要对自动驾驶决策规划系统进行测试。
现有的自动驾驶测试技术中,基于场景的仿真测试不仅能提高测试的可重复性和安全性,而且可以通过自动测试和加速测试等方法降低时间和经济成本[3],大幅提高决策规划系统的测试效率。基于场景的仿真测试需预先设计生成测试场景。飞马(PEGASUS)项目提出了场景表示的3 个抽象层次,即功能场景、逻辑场景和具体场景,为测试场景的结构化生成奠定了基础[4]。基于上述场景层次,目前已有较多的自动驾驶仿真测试场景生成研究:针对功能场景和逻辑场景,Gelder 通过将真实场景参数化,得到逻辑场景的参数空间,为生成具体场景提供基础[5];Li 基于本体论描述自动驾驶场景,并在此基础上,采用组合测试方法生成具体场景所需的参数[6];Bagschik 基于层级模型构建了结构化的功能场景[4];Menzel基于关键字将功能场景转换至逻辑场景,为具体场景生成提供基础,但其具体关键字的描述并不清晰[7]。在具体场景方面:GeoScenario 采用领域特定语言表示具体场景,但格式复杂[8];CARLA[9]和AirSim[10]等仿真软件采用python脚本生成具体场景,使场景具有良好的可读性,但难以实现具体场景的自动化生成。国际自动化及测量系统标准协会(Association for Standardisation of Automation and Measuring Systems,ASAM)制定并推广的OpenX 标准中,OpenSCENARIO作为动态场景格式,描述了OpenDrive 静态场景即道路上所发生的事件[11],并采用了可扩展标记语言,使其易于解析的同时保证了场景内大部分元素的可重用性。
综上所述,已有较多功能场景和逻辑场景生成的相关研究,为具体场景的生成提供了基础。场景文件作为具体场景的载体,也有较多的可用格式。但在实际仿真测试中,基于特定场景格式编写生成具体场景文件较为复杂,目前还缺少相应的自动化生成方法。因此,本文基于OpenX标准中的场景格式,提出一种面向决策规划系统功能测试的具体场景自动化生成方法,以提高决策规划系统测试的具体场景生成效率,并将该方法应用于交通拥堵自动驾驶(Traffic Jam Pilot,TJP)功能的仿真测试,验证其有效性和高效性。
为保证功能场景的结构化,本文基于层级模型定义了面向决策规划系统的功能场景。层级模型的第1~6 层分别为基础道路、交通基础设施、临时静态障碍物、交通参与者、环境和电子通信设施[12]。针对决策规划系统的测试需求,分析得到其必需的输入为第1层道路拓扑结构、第2层提供的交通环境信号和第4层中交通参与者的信息(包括自车在内的静态和动态交通参与者的位置与动作信息)。基于此,本文将面向决策规划系统测试的功能场景定义为一定道路拓扑结构和交通信号条件下的自车与其他交通参与者的不同位置和动作的组合。
基于上述功能场景定义,本文提取道路拓扑结构、交通信号、自车和其他交通参与者等功能场景关键字并映射为相应参数,以构建参数空间,实现逻辑场景的生成。逻辑场景的参数空间包含参数类型和参数范围,其中,由功能场景关键字映射得到的参数类型称为关键参数类型,后续生成具体场景所需的其他缺省参数类型称为非关键参数类型,各类型参数的范围根据测试需求确定。不同功能下决策规划系统所需输入不同,故映射的关键参数类型需对应功能具体分析,考虑到部分参数类型的通用性,本文分析得到如表1 所示的映射关系。
表1 关键字与关键参数类型的映射关系
针对表1中无法直接赋值的关键参数类型,本文将进一步细分以明确定义。基于《公路路线设计规范》中对道路结构几何元素的划分[13],结合决策规划系统所需的道路信息,本文将拓扑类型划分为典型的直道、弯道、上、下匝道、路口、坡道等。根据自车与其他交通参与者在道路拓扑结构上的位置关系,考虑到仅在一定范围内的其他交通参与者会影响自车决策规划,对相对位置进行有效类等价划分[14],通过建立特定坐标系得到各位置编号,以便后续的数据转换,图1 所示为直道拓扑结构下可能的位置编号示例。
图1 直道拓扑结构的位置编号示例
对于动作参数,由于不同交通参与者动作特征不同,首先划分自车和其他交通参与者的动作类别并给出对应参数。目前,有关车辆动作类别的分析已有较多研究[15],其中自动驾驶车辆所有动作可视为在全局路径规划下基于环境感知和自车状态所做的决策规划结果,本文统一称为自动驾驶动作,对应参数为全局路径规划所需的目的地坐标。基于Rigolli 对驾驶员动作的分解[16],将自然驾驶车辆动作分为加速、减速、匀速、左换道、右换道、左转、右转等原子动作。其中,变道和转弯的相关动作模型多基于轨迹和时间[17],由于轨迹种类较多,可根据仿真软件具体设定,故采用持续时间作为统一的动作参数。其中,匀速动作对应速度参数,加/减速动作离散为多段匀加/减速过程,对应参数为加/减速度和持续时间。此外,由于非车辆的交通参与者(如行人或动物)的行为自由度较高,难以对其动作特征进行建模,故将其动作视为多段直线行驶,划分为匀速和变速动作。基于此,各交通参与者的动作类别和对应参数如表2所示。
表2 各交通参与者的动作类别和对应参数
此外,在实际仿真测试中,需明确各动作的开始时刻,故动作参数还必须包含触发条件这一子参数。在场景生成时,基于时间的触发条件易于设置,最为简便,但考虑到决策规划系统受其他交通参与者影响,由于其他交通参与者动作的先验未知性,基于时间触发的动作难以对自车决策规划系统进行考验。因此,为满足测试需求,结合常规的仿真软件设置条件,本文将动作触发条件这一子参数分为基于时间、事件和空间触发。其中,基于时间的触发条件作为默认条件,基于事件或空间触发的动作在功能场景描述时还需加以说明,并在参数空间内进一步确定对应的触发条件参数。
OpenX格式具有可扩展性和可重用性等优点,本文采用该格式生成具体场景文件。鉴于在测试中静态场景相对单一固定,在OpenDrive静态场景确定的基础上,本节通过分析逻辑场景参数空间与OpenSCENARIO 格式的映射关系,基于功能场景关键字自动化生成Open⁃SCENARIO格式的具体场景文件。
首先分析OpenSCENARIO 格式,将其划分为目录、对象、故事板3 层结构,并依次细分为如图2 所示的内容,用于对应逻辑场景参数空间。
图2 OpenSCENARIO格式分析
基于上述格式分析,将非关键的OpenSCENARIO内容,如车辆目录、控制器等,映射为非关键参数,在参数空间内作为缺省值以简化转换过程,最终得到如表3所示的OpenSCENARIO 内容与关键字及各参数类型的映射关系。其中,道路拓扑结构和交通信号对应的关键参数在路网文件即OpenDrive 中赋值。在此基础上,根据测试需求,确定各参数类型的参数范围,得到完整的参数空间。
表3 OpenSCENARIO、关键字及参数类型映射关系
为生成OpenSCENARIO 格式的场景文件,本文根据上述映射关系,采用模块化的XML 文档对象模型(XML Document Object Model,XML DOM)编写自动化脚本。该自动化脚本基于功能场景关键字对构建的参数空间进行采样,并根据参数空间和OpenSCENARIO格式的映射关系,采用XML DOM生成相应的OpenSCE⁃NARIO 内容,得到完整的OpenSCENARIO 格式具体场景文件。
至此,本文实现了面向决策规划系统功能测试的功能场景至具体场景的自动化生成,总体流程如图3所示。
为验证上述具体场景自动化生成方法,本文将其应用于TJP功能的仿真测试。
TJP 功能是针对行车过程中常见的交通拥堵路况开发的高等级自动驾驶功能[18],要求的车辆最高车速在40~60 km/h范围内,具体的功能细分如表4所示。
图3 具体场景自动化生成流程
表4 TJP功能
通过功能分析,生成相应的符合测试需求的功能场景。为满足交通拥堵路况这一功能激活条件,首先选取常见的3车道直道作为道路拓扑类型,且设定交通参与者为1 辆自车、5 辆他车以实现拥堵路况,其次,由于拥堵路况中限速等交通信号为冗余信息,故不作设定,最后,结合表4 具体功能,通过设定各车辆的初始位置与动作,构建功能场景。
基于拥堵路况这一功能激活条件,设定各车辆的初始位置如图4 所示,根据具体功能的测试需求,设定各车辆动作:为测试功能X1、X2、X6、Y1 和Y2,设定各车辆保持匀速;为测试功能X4、Y4和Y5,设定C5换道;为测试功能X3 和S1,设定自车正前方车辆减速至停车。为在同一测试用例中覆盖尽可能多的功能测试,本文将上述车辆动作合并为同一功能场景的动作序列。最后,基于已有的OpenDrive 静态场景,结合前文有效类等价划分的位置编号,生成功能场景,为提高后续参数空间的生成效率,以字符串表示各车辆动作,并且采用JSON格式统一组织得到如下功能场景示例:
图4 各车辆初始位置
本节基于上述功能场景,映射关键字得到相应的参数空间。针对道路拓扑结构和交通信号,根据已有的OpenDrive 高速公路地图,选取合适区域直接得到对应参数,故仅映射得到动态场景,即自车和他车的关键参数类型:自车代号E、他车的车辆代号C1~C5、初始横、纵坐标Xm和Ym(m=0,1,2为特定坐标系下的位置编号)、初速度v1、动作编号Ax(x=1,2,3…)、匀速动作速度vc、换道动作持续时间tcl、减速动作减速度adec、减速动作减速时长tdec、自动驾驶动作目的地横、纵坐标Xd和Yd、动作触发时刻t、车辆速度v。
为生成参数空间,赋予各关键参数一定值或范围,并添加相应的约束条件如表5 所示。根据道路拓扑结构和各车辆排列关系,将车辆初始位置划为3列2行,对应横坐标为X0、X1、X2,纵坐标为Y0、Y1,添加约束条件1;由于他车首个动作为匀速行驶,故各车辆初速度v1Cn与首个动作参数即匀速的速度vcA1Cn相等,添加约束条件2;由于TJP功能要求最高车速为40~60 km/h,故设定各车辆速度vCn均小于40 km/h,添加约束条件3;为便于设置,各车辆首个动作默认触发时刻tA1Cn为0 s,添加约束条件4。
基于上述约束条件,结合OpenDrive地图,最终生成如表6所示的参数空间,各车辆初始位置坐标根据编号依次对应,其中Y0设为一定范围的数值,XA1E、YA1E为自车首个动作即自动驾驶设定的目的地横、纵坐标,tclA2C5为车辆C5 的第2 个动作换道的持续时间,tA2C5、tA3C5分别为车辆C5 第2 个、第3 个动作的触发时刻,adecA3C5、tdecA3C5分别为车辆C5第3个动作减速的减速度和减速时长。
表5 参数空间约束条件
表6 参数空间
最后,采用自动化脚本,基于功能场景关键字对上述参数空间进行采样,作为示例,参数Y0和tA3C5的离散步长分别设为1 m 和1 s,最终生成18 个OpenSCENARIO格式的具体场景文件。
此外,采用仿真软件VTD(Virtual Test Drive)运行上述文件,验证仿真文件的格式和参数,以及仿真过程中车辆初始位置及执行动作是否正确。测试过程如图5 所示:第0~4 s,E 与前车保持一定车距和车速跟车;第4~8 s,C5变道至自车前方,E减速避让;第8~12 s,C5减速至静止,E减速且变道;第12 s后,E跟随前车行驶。测试过程中他车皆按给定参数行驶,符合上述验证要求。同时,该场景也实现了对前文所述的自车TJP功能中X1、X2、X4、X6、Y1、Y2、Y4和Y5功能的测试。
图5 测试过程
综上,本文所提出的方法在构建功能场景和相应的逻辑场景参数空间基础上,通过自动化脚本即可批量生成OpenSCENARIO 场景文件。相比之下,若手动编写生成上述18 个具体场景文件,则需在完整编写第1 个OpenSCENARIO场景文件的基础上,修改代码中的相应参数以逐个生成其余17 个文件。2 种方法代码长度对比如表7所示,手动编写方法的代码长度约为自动化生成方法的22倍。此外,当功能场景更复杂、测试所需具体场景数量更多时,该自动化生成方法能更显著地提高具体场景文件的生成效率。
表7 2种具体场景文件生成方法的代码长度对比
针对决策规划系统仿真测试中场景文件生成效率低的问题,本文提出了一种具体场景自动化生成方法。基于层级模型,构建了面向决策规划系统的功能场景,并在此基础上,提取功能场景关键字生成了逻辑场景参数空间;分析了OpenSCENARIO 格式与参数空间的映射关系,得到自动化脚本,从而对参数空间采样,自动化批量生成了具体场景文件。本文通过分析TJP功能,构建了相应的功能场景,并应用上述方法自动化批量生成了18个具体场景文件,在仿真软件VTD中运行测试,验证了该方法的有效性和高效性。该方法减少了场景文件的手动编写工作,提高了决策规划系统仿真测试场景的生成效率。
本文提出的方法在逻辑场景参数空间的真实性方面和具体场景合理性方面仍存在一定局限性:其一,目前的参数空间根据测试需求人为指定参数范围,未考虑测试场景参数的真实分布特性,后续将研究基于自然驾驶数据的逻辑场景参数空间生成方法,提高具体场景的真实性;其二,由于逻辑场景存在他车数量多、动作的对应参数范围广等问题,在对参数空间采样生成具体场景时,难以通过人为计算排除所有他车之间相互碰撞的场景,后续将研究对应的自动化场景筛选方法,提高具体场景的合理性。