本发明属于自动驾驶系统(ads)安全测试领域,尤其适用于自动驾驶泛化性测试场景构建领域,其目的在于为自动驾驶系统从业人员在不同道路结构的事故场景下开展测试工作提供指导,是一种从事故报告中自动生成道路通用场景的技术。
背景技术:
1、自动驾驶技术的出现开启了交通运输的新时代,有望提高安全性、效率和便利性。然而,涉及自动驾驶车辆的事故的发生,包括那些导致死亡的事故,证明了自动驾驶目前并不像它所宣传的那样安全。在许多情况下,这些碰撞可归因于有缺陷的软件,这凸显了对测试自动驾驶软件的增强方法的迫切需求。
2、ads测试作为关键的质量保证技术之一,受到了学术界和工业界的广泛关注。ads的关键测试技术可分为道路测试和仿真测试两大类。道路测试包括在封闭的自动驾驶汽车试验场中测试特定的驾驶场景或在真实交通中监控自动驾驶汽车,但这种方法需要较长的时间和大量的资源。此外,获取各种关键测试数据,包括广泛的实际使用场景,对测试人员提出了重大挑战。因此,高保真仿真测试方法已成为自动驾驶技术开发和验证的必要条件。在仿真平台上进行ads测试,如lgsvl、carla等。ads模拟测试的一个重要方面是识别和构建可能导致事故的关键场景。
3、软件工程研究人员已经提出利用现实生活中的事故案例来生成关键测试场景,因为真实的车祸会给自动驾驶汽车带来重大挑战。因此,最近的研究主要集中在不同驾驶数据源的场景重建上。这包括利用文本描述、事故草图、传感器数据和视频记录来生成基本场景。与传感器数据和关键案例的视频记录相比,碰撞的文本描述更容易获取,也更丰富。事故报告分析方法提供了更全面的碰撞洞察,包括天气、照明和道路状况等复杂的细节,这些在视觉上很难表现出来。然而,目前基于事故报告的场景重构方法提取信息的准确性有限。此外,目前的方法只能在事故报告中描述的相同道路结构上再现事故场景。由于模拟中的道路结构可能与事故报告中描述的道路结构不同,因此将应用限制在基于模拟的ads测试中。在不同的道路上再现事故场景是一项具有挑战性的工作。
4、为了弥补这一差距,我们提出了一种自动和通用的方法,从事故报告中重建不同道路结构上的事故场景。该方法主要目标从模拟环境中不同道路上的事故报告中自动重建事故场景,然后作为ads测试的初始种子。该方法首先利用精心设计的语言提示模式来指导llm准确提取环境、道路和物体运动信息。基于提取的信息和道路重构场景,该方法为事故场景制定约束条件。通过约束求解器求解这些约束,生成事故参与者的事故轨迹,最终重构事故场景。因此,生成的场景可以在所需的映射上执行。此外,为了将这些场景用于ads测试,该方法通过识别自我车辆(即由测试中的ads控制的车辆)和npc(非玩家角色)车辆,将它们转换为测试场景。npc车辆将遵循计算的轨迹,而自我车辆由ads控制,而不是遵循预定的轨迹。
技术实现思路
1、本发明通过提供一种从事故报告中自动生成道路通用场景的技术,来有效解决目前存在的新版本软件变异测试强度需求未知的难题,进而帮助测试人员自动生成道路通用场景,帮助测试人员在不同道路结构的事故场景中开展测试工作。
2、为达成上述目标,本发明提出一种基于事故报告的自动驾驶泛化性测试场景构建方法,其特征在于,根据基于层的场景定义,将事故场景信息初步抽象为三层:路网和交通引导对象、环境条件和动态对象。然后利用大语言模型(llm)系统地从事故报告中提取有关事故影响因素的信息,逐层组织信息。随后,对交通参与者的事故前驾驶行为建立约束,并使用约束求解器生成符合事故报告中指定约束的轨迹。接着,将提取的环境和道路信息生成的轨迹输入到驾驶模拟器中,重建车祸场景。最后,在评估阶段,将生成的模拟场景转换为包含测试预言机的测试用例,并将这些测试用例输入到自动驾驶系统(ads)。该方法检查被测ads是否成功到达最终预期位置而没有遇到任何崩溃。该方法包括下列步骤:
3、1)信息提取;为了抽象地表示事故信息并将其组织成llm可以理解的语义结构,将提取的信息以分层表示的形式呈现,分为三层:环境、道路和动态对象。环境层包括天气和光照条件。天气条件(weather)包括雨、雾、雪和其他因素。光照条件(lighting)与道路上的照明条件有关,通常是白天较亮,晚上较暗。此外,路灯可以增强照明。道路一层描述道路网络和用于道路引导的交通标志。道路代表碰撞的地理背景,包括发生事故的道路类型(collisionlocation)和相关道路上的车道数(lanenum)。此外,该方法提取有关道路限速(speedlimit)的信息,以重建适用于事故位置的速度约束。动态对象一层包含了有关撞击者和受害者的信息,以及导致碰撞的移动动作。该方法提取有关同时发生碰撞的交通参与者数量(participantsnumber)的信息,并识别碰撞类型。碰撞类型信息(crashtype)指定了交通参与者发生碰撞的角度,包括三种类型的碰撞:追尾碰撞、正面碰撞和前后碰撞。对于事故中涉及的每辆车,该方法提取每辆车的状态,包括车辆的初始运行车道(runninglanes)、车辆的初始运行方向(drivingdirections)和车辆在碰撞前的行为(drivingactions)。具体来说,车辆行为描述了车辆所采取的正常和异常行为。常规驾驶动作包括掉头、停车、驶入道路、车辆过马路、左转、右转、跟随车道和变道。非正常驾驶行为包括驶离道路和逆行。
4、该方法使用提示模式逐层提取事故信息。对于每种语言模式,首先解释每个属性的含义,以帮助llm理解提取的信息。此外,该模式还包括启发式规则,以指导llm产生准确的结果。最后,利用少样本(few-shot)学习来确保llm的输出符合预期标准。
5、2)轨迹规划;该方法利用提取的驾驶动作和道路信息来模拟碰撞并计算模拟交通参与者的轨迹。以步骤1)提取的道路信息r、步骤1)提取的动态对象信息d、给定地图map、定义的驾驶动作约束c为输入。首先将给定的地图解析为一组候选道路,并注意到每条道路的道路类型(例如十字路口)。然后迭代候选道路集,依次选择不同长度和宽度的车道。如果当前道路类型与事故发生的道路类型匹配,并且所有交通参与者在其运动过程中占用的最大车道数小于或等于所选道路上的车道数,则开始路点生成过程。随后,在交通参与者调整行驶方向和初始车道位置以匹配所选道路后,约束求解器根据驾驶动作解析约束,生成航路点。
6、为了使参与者执行相应的动作并驶入碰撞现场,从五个方面为每个动作定义了一组轨迹约束c。然后,该方法利用约束求解器为每个参与者自动生成轨迹。轨迹是航路点的有序序列,即交通参与者必须遵循的位置和速度。为了形式化表示航路点进而设计轨迹约束,车辆x的bth动作的ith航路点可以表示为其中,x,y,v分别是x坐标,y坐标,和速度。此外,我们引入pos=(x,y)来表示航点在平面图中的位置。此外,交通参与者在执行动作时必须同时到达碰撞位置。要做到这一点,本方法引入一个碰撞区域ca,由方法自动计算。
7、第1组:初始位置和目的地约束
8、第一组有四个约束条件。方程1限制了从到的行驶方向与车道lm的方向相同。计算fd(wi,wj,l)被定义为
9、(wj.x-wi.x)(lex.x-len.x)>0∧(wj.y-wi.y)(lex.y-len.y)>0。
10、其中len为车道的入口点,lex为车道的出口点,这两个点在对地图进行解析后都是已知的。当fd为true时,保证在车道1的方向上,航路点wj领先于wi。方程2限制了followlane行为开始和结束的道路位置。和在同一车道lm路边ri。公式3和4限定了左转和过车动作的起始和结束道路位置:当驾驶动作避免碰撞,且和在不同道路的车道上时应用公式3;当动作导致碰撞时采用式4,目的地位置在ca。
11、
12、第2组:执行动作的位置限制
13、在该组中,式5限制了在执行左转动作时路点的位置,确保当前路点位于相邻两个路点连线的右侧。表示由i-th路点位置和(i+1)-th路点位置组成的方向向量。向量表示由i-th和(i+2)-th路点的位置形成的右法向量。方程6和7分别对通过执行左转行为和车辆穿越行为访问的道路之间的位置关系施加了限制。k1和k2表示道路lm和ln的斜率。
14、
15、第3组:航路点速度的约束
16、第3组对所有中间航路点的速度进行限制。其中,式8限制了到航路点的速度,式9限制了行驶时的速度限制。dx(i,j)和dy(i,j)分别计算车辆沿x轴和y轴从ith路点到jth路点的距离。其中,vc.x应为航路点在x轴上的速度,vc.y为航路点在y轴上的速度。spdi的速度是vi.spdlimit是驾驶道路限速。
17、
18、第4组:多个基本驾驶动作的轨迹组合约束
19、当多个操作被连接时,第四组约束了航路点之间的关系。方程10和11分别表示了攻击者和受害者多重动作的轨迹约束。交通参与者当前动作的结束位置应与后续驾驶动作的开始位置一致。攻击者进行n动作,而受害者在碰撞前进行m动作。
20、
21、第5组:车辆碰撞约束
22、第五组约束确保冲突信息与报告描述一致。公式12将事故碰撞的发生限制在碰撞报告中所述的位置,而公式13描述了攻击者和受害者同时到达碰撞位置。
23、
24、3)仿真和测试生成;模拟器接收轨迹规划模块生成的航路点,结合llm提取的环境条件信息,进行仿真,重构事故报告中详细描述的碰撞场景。然后该方法自动从轨迹规划模块的输出中提取系统级测试用例,允许自动驾驶汽车选择与事故报告中描述的不同的轨迹,以避免碰撞。对于基于事故报告生成的模拟场景,通过将每个交通参与者指定为自我车辆来创建多个测试场景。每个自动驾驶车辆的起始点被设置为生成的航路点的起始点,而npc车辆遵循轨迹规划模块提供的航路点。在这些运行过程中记录了涉及自动驾驶车辆的碰撞场景。为了最大限度地减少误报,计算了自动驾驶车辆速度不接近零的碰撞场景。
25、进一步,其中上述步骤1)的具体步骤如下:
26、步骤1)-1:起始状态;
27、步骤1)-2:输入事故报告文本;
28、步骤1)-3:大语言模型提示模式设计;
29、步骤1)-4:大语言模型信息提取;
30、步骤1)-5:输出提取的关键信息(环境、道路、动态对象);
31、步骤1)-6:结束状态。
32、进一步,其中上述步骤2)的具体步骤如下:
33、步骤2)-1:起始状态;
34、步骤2)-2:输入提取的道路信息、提取的动态对象信息、待测仿真地图map、设计的事故约束c;
35、步骤2)-3:解析工具解析map中的待测道路信息;
36、步骤2)-4:判断提取道路类型和挑选的解析道路类型是否匹配,若是,则执行下一步,否则执行步骤2)-3;
37、步骤2)-5:判断提取信息的占用车道数小于等于解析道路车道总数,若是,则执行下一步,否则执行步骤2)-3;
38、步骤2)-6:调整行驶方向和初始车道位置;
39、步骤2)-7:进行约束求解生成航路点;
40、步骤2)-8:输出事故轨迹;
41、步骤2)-9:结束状态。
42、进一步,其中上述步骤3)的具体步骤如下:
43、步骤3)-1:起始状态;
44、步骤3)-2:输入提取的环境信息和所有事故参与者航路点;
45、步骤3)-3:使用模拟器进行事故模拟;
46、步骤3)-4:选定事故中的轨迹中待测的自动驾驶车辆起点和终点;
47、步骤3)-5:生成仿真测试用例;
48、步骤3)-6:测试自动驾驶系统;
49、步骤3)-7:输出碰撞测试结果;
50、步骤3)-8:结束状态。