本文来自实验室符永乐的研究成果和学习笔记
Abstract Simulation Scenario Generation for Autonomous Vehicle Verification
「摘要」:
自动驾驶汽车技术有可能对交通系统和城市生活产生重大影响。然而,自动驾驶汽车必须被证明至少与人类驾驶的汽车一样安全,才能被接受为一种新的交通方式。目前的自动驾驶汽车验证方法,如阴影驾驶或基于测试的标注图像,成本高、速度慢且资源密集。因此,建模和仿真是实现自动驾驶汽车验证目标不可或缺的资产。
本文提出了一种用于自动驾驶汽车验证的抽象仿真场景生成框架。场景和相关断言由基于矩阵的语义语言定义,并在模拟中转换为测试场景。该框架允许设计所有可能的道路拓扑并验证生成的场景。框架中生成的场景为可能在其他平台中对罕见条件进行扩展测试提供了基础事实。
「关键词」:自动驾驶汽车,验证,仿真,场景生成
第一章 介绍
辅助驾驶系统和自动驾驶汽车(AV)技术逐渐将驾驶责任从人类驾驶员转移到集成在汽车上的驾驶系统。考虑到汽车目前极低和低效的利用率,以及在安全、物流和公民生活方面的潜在好处,自动驾驶技术有可能对多个行业产生破坏性影响。
美国汽车工程师协会(Society of Automotive Engineers)为汽车定义了从“0级,无自动化”到“5级,完全自动化”的6个自动驾驶级别。“一级司机辅助”和“二级部分自动化”的自动化水平在市场上日益普及。这些水平仍然需要一个人的司机在所有的时间控制,即使这样,在这些系统在使用中有各种事故报告,这损害了自动驾驶技术的声誉和相应的投资。对于自动驾驶汽车在公共场合的普遍使用,我们必须回答以下问题:“我们怎么能信任自动驾驶汽车?”因此,验证是AV技术面临的关键问题之一。
目前,最常见的自动驾驶汽车验证方法是现实世界测试,即车辆在街道或监管的测试轨道上进行测试。这是不切实际的,因为需要花费大量的时间和资源。还有其他的验证方法,如硬件在循环(HiL)或基于注释图像的测试。然而,没有AV验证的标准系统,这仍然是一个未解决的挑战。
在本文中,我们提出了一个抽象的场景生成系统,通过建模和仿真来解决AV验证的关键问题。对于自动驾驶汽车的验证,我们受到硬件验证中成功测试方法的启发,我们的主要重点是通过建模和仿真将这些方法应用于自动驾驶汽车决策过程的验证。值得注意的是,我们专注于生成场景来测试自动驾驶汽车的决策,我们的方法旨在评估被测试的自动驾驶汽车仅与场景相关的决策。因此,环境条件不包括在内,我们的系统只产生了简单的场景,只有路段和行动者。
在我们的方法中,我们首先创建一个使用语义语言来描述驾驶场景的方法,该方法可以将随机值作为输入,然后将其转换为模拟的逻辑驾驶场景。例如,一个路段可以用它所遵循的线的函数以及每一点的宽度来描述。然后使用几何基元生成具有道路拓扑中所有可能曲线和车道数的道路。定义不同路段的目标是更容易地将生成的场景限制到现实的道路网络和情况。在我们的实现示例中,已经演示了对这些行以及四向交叉的描述。通过探索这些片段和这种语言的所有输入,AV的行为可以在任何情况下测试。我们的方法还验证了自身,以消除非法的模拟场景。
这项工作有四个主要贡献:
-
我们开发了一种模拟方法,在生成场景时使用语义语言来定义场景。 -
我们提出了一种用各种可能的直线或曲线组合来构建仿真道路的方法,这对于实现真实道路建模至关重要。 -
我们定义了一种将不同车道数的路段相互缝合的方法,在模拟中没有误差。 -
我们对所提出的方法中每个附加路段提出了一种自验证方法,这对于提高仿真效率至关重要。
本文的其余部分组织如下。
第二节描述了相关工作。
第三节给出了系统模型和方法的详细描述。
第四部分给出了实现细节和仿真实例。
最后在第五部分进行总结。
第二章 相关工作
工业和学术界有各种各样的方法来测试和验证自动驾驶汽车,使用多方面的方法利用真实和模拟世界。在现实世界的测试中,一队自动驾驶汽车在街道上行驶时,会有人坐在方向盘后面。这种类型的测试被称为影子驾驶。使用测试轨道在现实世界测试中也很常见,因为这允许公司测试特定的、极端的场景。硬件在环(HiL)测试是另一种选择,它允许将自动驾驶汽车的大脑连接到模拟测试中,并同时测试与特定硬件组件的交互作用。虽然这种形式的测试是实时运行的,但software-in-loop (SiL软件在环测试)允许测试在模拟时间内运行,并已在无人驾驶飞行器空间中使用。无论是将大脑以硬件还是软件的形式连接到模拟测试中,除了传感器以外,系统基本相似。场景在模拟软件中生成,并从被测车辆的角度发送到SiL的模拟传感器或hil的真实/模拟传感器。然后,根据正在进行的测试类型,在现实世界或模拟世界中,这个视图被发送到大脑。从那里,一旦做出决定,它就会通过车辆的任何物理组件,如轮胎或轴属性,这也可以在真实或模拟世界中完成。在完成这些之后,车辆现在已经做出了一个决定,并让自己按照它想要的方式移动,所以场景被新信息更新,下一个感知-决策步骤被执行。
一些测试方法侧重于使用模拟来验证新学习的机动(例如掉头、合并)是否经过测试,直到它们能够以令人满意的速度执行。其他人使用基于他们的车辆在现实世界中遇到的场景的模拟。然后可以将现实生活中的每个重要场景模糊化为基于原始场景生成更多场景,以加强该测试的覆盖范围。最近还有几项举措旨在通过集成不同的技术来实现 AV 验证的标准化。智能测试框架和PEGASUS是此类方法的两个重要示例。
目前大多数方法的目标是对整车进行测试,从场景感知和理解到在场景中做出行动决策。在我们的方法中,我们主要关注决策步骤。换句话说,我们的方法旨在测试被测AV在任何其他条件下没有任何问题的决策能力。这个聚焦点也决定了仿真平台的需求。该框架需要物理世界的骨架模型,而不需要环境条件的细节。因此,选择MATLAB作为仿真平台。MATLAB ADAS工具箱将场景中的参与者简单地表示为盒子。
第三章 场景生成框架
图1展示了我们的模拟框架的组件的分解。中间的灰色区域是通过输入创建的场景的AV的大脑。顶部的模块定义了用户如何与框架交互以生成场景。仿真框架从主程序开始,主程序具有一定的调优和输入选项。然后根据这些输入随机生成场景,并将其输入到实际模型中。在这里,场景被生成,自我车辆(测试中的车辆)被放置在其中,每一步都由自我车辆通过感知、做出决定和执行它的整个周期来响应它。
模拟数据是在运行期间和运行之后收集的。这些数据点包括每个决策的安全性和合法性以及场景的定义。由于该场景是由某个输入生成的,因此可以在需要时重新创建它。
A.语义语言
模型必须能够创建场景来反映所有可能的情况集。我们开发了一种语义语言,用于分解定义场景的因素,包括道路、角色和交通逻辑。因此,我们方法的第一个阶段是创建这种语义语言。
语义语言的第一种方法使用字符串结构和相关规则如下:
-
道路生成从一个与正则表达式匹配的字符串开始。 -
道路类型为大写字母。 -
参数为小写字母。 -
数字值放在参数之后。 -
参数及其数值放在道路类型之前。
根据这些规则,从命令行获取输入,并解析形式语法以生成词元(token)。词元(token)还具有上下文敏感的参数,这些参数包含在每种词元(token)类型中。表I给出了开发的词元(token)及其属性。
在生成所有词元(token)之后,将使用它们为模拟的输入文件生成适当的xml段。每个路段都有一个唯一的id号,它与场景的一个全局id变量一起使用,该变量随每一块增加。还有一个全局的点数组,它确定下一个路段的位置,并在xml生成过程中自动更新。
图2显示了在PreScan和MATLAB Simulink中使用示例字符串“l05d0A115A180d1A132BCCX150d0A110A1405”创建的仿真场景。PreScan是最全面的仿真平台之一,可以模拟汽车和汽车上的所有传感器配置。然而,这些细节在逻辑场景生成阶段是不必要的。MATLAB ADAS工具箱将对象简化为三维的盒子,并将道路简化为它们所遵循的直线,以及一些其他的次要细节。这种场景生成方法使它成为适合我们方法的工具。
在初始的基于字符串的语言实现之后,我们决定在MATLAB中不仅包括输入模式,还包括系统的断言。因此,下一个迭代的实现包括一个基于矩阵的系统来概括场景特征,并创建一个高效的标记和排序系统。数字矩阵作为输入读取,其中每一行都是一个不同的断言,描述一个单独的路段或参与者,然后可以对其进行解析以生成场景。为了做到这一点,道路网络和参与者被简化为牛顿物理学中最基本的元素,如质心和维度。然后根据实际情况对这些元素进行参数化。值得注意的是,该模型不包含任何环境因素。
在我们的框架中创建的示例场景如图3所示。在这个场景中,测试中的自我车辆领导一个排。该示例展示了实施方法在实际测试中的潜在能力,例如具有可变车道数、多个参与者和车道标记的路段组合。
B.道路拓扑生成
在模拟中放置道路需要道路中心、每个中心处的道路宽度、倾斜角度和车道细节。然后,生成道路就是获取输入并将其转换为道路在场景上下文中遵循的一系列点。输入中的第一个值定义将创建的道路类型。通过将道路限制为特定的道路段,可以将生成的场景约束为真实的道路网络和情况。生成每个路段时,通过旋转它将其缝合到上一个路段,以便沿第一个点的切线与上一个路段最后一个点的切线对齐,并在驾驶场景中将其移动到该坐标。在两个连续的片段之间,还有一个中间片段,用于平滑具有不同车道数的两个片段之间的过渡。
1)参数:一旦约束到代表最常见道路(如直线道路、交叉口等)的不同部分,可以推广到所有部分的细节必须定义为参数。某些参数只能应用于单个零件。因此,为了节省内存,其中一些在不同片段的上下文中被赋予了新的含义。模型当前参数如表二所示。随着更多的部分被定义和实现,参数也将被扩展以描述所有必须考虑的新细节。
2)道路和几何图元:
第一种路段旨在成为最简单的蟾蜍(toad),并作为更复杂道路的构建块。它被称为“多车道道路”,由沿由几何图元组成的一条直线上的一个或两个方向的可变车道组成。这些几何图元,如图 4 所示,包括线、弧线和 以恒定速率改变曲率的回旋曲线。
单条道路的所有常见形式都可以通过一组三个基本体的排列来创建。要选择生成道路时使用的基本体,将使用输入中的两个曲率,表示起始曲率和结束曲率。若其中一个曲率为零,它将从一条直线变为一条回旋曲线,该回旋曲线将过渡为曲率非零的圆弧。如果两者的曲率均为非零,则这条线将随机变为clothoid-arc-clothoid或arc-clothoid-arc形状。
对于clothod-arc-clothoid形状,曲率从零开始,过渡到起始曲率,在弧处保持不变,然后过渡到最后一个clothoid的结束曲率。
对于arc-clothoid-arc形状,直线从具有起始曲率的圆弧开始,使用clothoid曲线过渡到结束曲率,并在最终圆弧的结束曲率处保持。图5所示为路段连接实例。
为了使图元之间无缝连接,使第一个点的切线与最后一个图元的最后一个点的切线对齐。对于直线,朝向与开始时相同。然而,对于圆弧曲线和梭状曲线,必须计算新的端面方向。计算弧的新面向方向很简单,就是将弧长与曲率相乘,然后根据它的转向方向在之前的面向方向上加减它。
「回旋曲线」(Clothoid):
回旋曲线允许从一个曲率平滑过渡到另一个曲率,是真实道路易于转弯的地方。「回旋曲线的点」使用菲涅耳积分计算:
其中作为归一化因子,表示从起点到该点的长度,表示沿曲线的距离。
对于回旋曲线,必须使用形成点时计算的参数来计算面向方向的变化:
其中R代表最终曲率,θ是曲率变化量。这提供了一个不可靠的值,它不能准确地表示更改。由于该软件具有菲涅耳积分(用于计算回旋曲线)的精度水平,我们决定使用最后两点的反正切来计算新的面方向。因为我们选择的定义这条曲线的点的数量使得它们非常接近,这对于连接这两部分是足够的。
3)4路交叉路口(4-Way Intersection):
模型中道路段的一个重要例子是如图6所示的4路交叉口。我们将连接到交叉路口的每条道路定义为可变车道的多车道道路,并假设这些道路可以是单向的,也可以是双向的。
a)道路布局:
每条道路的定位基于一个中心矩形,计算出所有道路尽可能靠近中心。这四条路中的每一条都有不同数量的车道,也可以是双向的或单向的,这意味着它们也可以有不同的宽度。为了计算矩形,使用顶部和底部道路之间的最大宽度以及左右道路之间的最大宽度来确定大小。顶部道路的中心与底部道路的中心对齐,左侧和右侧道路也是如此。为了使道路达到基于该系统的坐标,根据它们之间的数学关系,将它们从第一条道路的末端(沿着矩形底部道路的中心)移动。
b)道路的路径:
因为场景是线性地从一块到另一块移动的,所以只有底部部分的车道需要定义车辆可以去哪里的选项。其他道路有一个有限的版本,以获得其他参与者的潜在路径。如果可以选择左转,从左到右的两个车道将设置为“只允许左转”车道。设置为“仅限左行驶”的数量是基于其他潜在方向的可用车道数以及向左行驶的可用车道数。如果还有更多的车道,它们被设置为“只前进”车道,无论前方有多少车道可用。剩下的车道被设置为右转车道,只要有足够的车道可以右转。如果这是一个选项,没有车道左边,最右边的车道被给予额外的选择右走。如果有额外的车道可用,他们将被给予相同的行为前,只有车道合并在另一边。在没有足够的车道的情况下,比如有一条车道,每个方向都可以选择,这条车道被定义为中立车道,允许任何方向。
C.延长道路属性:
在生成道路时,存储在道路对象中的输入有额外的值,比如它的条件和限速。速度限制反映在场景中是在计算参与者的路径时。
道路计算过程中也设置了路标。它们以数组的形式传入,其中包含每一行的属性。对于双向道路的中心线,随机定义为双黄线或虚线。也有可能在中心有一个转弯车道,它总是被固体虚线包围。
D.参与者的生成:
除了自我载体,场景中的参与者是随机产生的,也由不同类型的人组成。这包括汽车、卡车、行人等车辆。他们在场景中可能采取的不同行为也被编程了。这些措施包括行人过马路和车辆转弯驶出车道。
E.测试场景生成:
对于测试场景的生成,使用伪随机输入生成。将此方法集成到语义语言中,可以确定置信度和覆盖率分析的级别。测试的重复性和覆盖率分析是很重要的,因为它们提供了一个渐进的测试结构。
第四章 场景验证
执行每个新部分的约束或检查,以确保生成的场景仅约束于合法的测试用例。在生成场景时检查其有效性,可以防止非法场景或破坏逻辑约束的场景进入测试运行阶段。考虑到自我汽车通常要测试大量的测试用例,这对于节省模拟时间至关重要。
第一次检查是否新片段将创建一个冲突,计算出一块周围的矩形,并将其与计算前片段的矩形进行比较,看看它们是否相交。这些矩形的计算围绕着角坐标的最小值和最大值,使它们简单而有效。如果要放置的片段与之前放置的片段相交,则放置将中止,并尝试下一个矩阵片段。
然后,还要对照放置的片段检查待放置片段前面的矩形,以确保没有死锁发生,或者片段可以继续放置到场景中,如图7所示,以便道路矩阵可以将其尽可能多的断言放置到场景中。
我们看到片段没有通过最初检查的一种方式是对片段长度增加的响应。
图8显示了10个路段的情况下,随着道路长度的增加,失败路段的数量。基于每个长度的20次运行,图9演示了这些运行中没有一个部分失败的百分比是多少,即所有部分在场景中结束的运行。在足够长的长度下,实际上不可能不失败,这使得检查对于创建更有效的合法测试是必要的。
对于参与者来说,为了尽可能地减少他们占用相同空间的方块表现,道路储存了关于参与者的信息,以及他们在场景中的什么点越过那条车道。如果两个参与者在模拟中同一点处于同一车道上,那么将使用不同的车道,或者参与者在向前移动前随机减速一小段时间。但这并不适用于行人,因为他们之间的互动在模拟中并不那么重要。
第五章 结论
自动驾驶汽车的验证对于其在现实交通中的部署至关重要。本文提出了一个用于AV测试场景生成的仿真框架。为此,我们实现了一个使用语义语言生成AV验证场景的仿真模型。在此基础上,提出了一种适用于所有可能路网结构的路网生成机制。我们还为生成的场景开发了一个迭代有效性检查,以使生成合法测试的过程更高效。
作为未来的工作,我们将在我们的模拟框架中纳入一个计算模型,并扩展路段和交通场景数据库。我们还计划启用场景导出和导入功能,以便与其他知名工具(如OpenDRIVE)自动交换场景。
原文始发于微信公众号(轩辕实验室):前沿|自动驾驶汽车验证仿真场景生成