DYNA4里OpenSCENARIO标准场景的快捷使用

汽车   2024-10-23 17:04   上海  

OpenSCENARIO在ADAS(高级驾驶辅助系统)虚拟仿真测试中具有重要的意义,为开发者提供了一个标准化的描述语言,用于定义和模拟复杂的驾驶场景。通过虚拟测试,自动驾驶和驾驶辅助系统能够在安全、高效、低成本的条件下进行充分的验证与优化,大大加速了技术的成熟,并为系统在真实道路上的应用奠定了坚实基础。OpenSCENARIO标准化场景描述提供了一种通用语言来描述交通场景、车辆行为和驾驶事件等,这有助于统一不同平台和工具之间的通信,使得不同开发团队可以轻松共享和复现仿真场景。本文主要介绍:OpenSCENARIO在DYNA4里的快速使用,OpenSCENARIO里一些常用函数功能介绍,外部OpenSCENARIO文件导入DYNA4运行,以及标准测试场景泛化在Vector工具链里的实现。


OpenSCENARIO场景的快速建立运行

1.

OpenSCENARIO架构组成:

根据ASAM官方发布的OpenSCENARIO文件进行分析,可知OpenSCENARIO的一般架构包含:

>

ParameterDarations

>

CatalogLocations

>

RoadNetwork

>

Entities

>

Storyboard

  • Init

  • Story

  • StopTrigger

图1为ASAM官方文件的典型架构示意。按照事件要素来说,其中RoadNetwork表达了在什么路上;Entites表达了有哪些参与对象;Storyboard表达了发生了什么故事,故事的初始状态Init以及故事的历程Story,故事里各历程的触发与结束条件Trigger又是什么。以上组成了OpenSCENARIO的核心内容。因为考虑到存在场景泛化以及场景文件内容复用的需要,又有ParameterDarations和CatalogLocations,这两部分为可选内容。

图1 ASAM官方Demo文件SynchronizedArrivalToIntersection.xosc的架构


2.

OpenSCENARIO基础部分以及在DYNA4里快速运行

如何实现基于某一RoadNetwork路段上,在DYNA4里快速实现最简易的场景仿真呢?可以从以下三个方面组成场景的基础:设置对应的道路RoadNetwork,加入至少一个参数者Entites,以及故事的初始信息Storyboard\Init的设置。这三个简单信息即可实现最简单的场景运行。后续复杂的场景行为都是在此基础上的延展。

图2 构成场景最基础的要素

具体实现可以参考Vector官方视频。新建一个场景,或基于已有的场景进行参数修改。首先选择对应的高清OpenDrive地图文件;然后,按需设置参与者Entitys,参与者可以只有一个也可以是多个。DYNA4的主车可以指定场景文件里任意某一车辆,只需将主车的名称与Entitys里某一参与车辆名称保持一致即可。主车为多体动力学模型,其他的从车为简易动力学模型,主车可以方便切换。最后是参与者初始信息Storyboard\Init的设置。这里需要注意的是,初始位置的信息必须合理,在OpenDrive地图里存在这个点的位置。可以通过打开OpenDRIVE地图来查看确认,例如右击左侧地图文件,然后选择编辑选项,然后鼠标点击需要设置的初始位置,即可显示具体的位置信息,从而确保初始位置的合理性,否则DYNA4里会弹出位置不合理的报错提醒。

图3 通过OpenDRIVE地图查看初始位置

完成以上三步后,一个便捷的OpenSCENARIO场景便可在DYNA4里运行了。对于参与者的初始车速,可以按需进行设置,如缺失默认为零车速。后续的复杂场景都是在此基础上的延伸,主要体现在StoryBorad里各交通参与者之间的交互行为的进一步设置。


3.

OpenSCENARIO常用场景行为表达

对于某一个车辆/参与者的行为,按照平面角度来分,可以分为横向行为和纵向行为;对于多个参与者,会考虑同步行为,例如同时到达所设置的各自的目的地。通用的交通参与者的行为表达主要如下(考虑篇幅,本文仅列出一些常用函数表达):

>

LateralAction横向行为

  • LaneChangeAction车道切换行为

  • LaneOffSetAction车道偏移行为

>

LongitudinalAction纵向行为

  • SpeedAction速度行为

  • LongitudinalDistanceAction纵向距离行为

>

SynchronizeAction车辆同步行为

结合下图分析实际场景中的车辆行为:横向方面,通常会考虑参与者是否继续在车道里运行,还是考虑因潜在避障进行车道偏移或换道;纵向方面,主要是速度的调控,或者相对前车车距的保持。这些行为通过上述函数表达几乎可以满足大部分情况。

另一方面,考虑到会车情况,希望在十字路口、交叉分支口等车道进行相汇。SynchronizeAction可以让交通参与者行为自行调节,保证其与主车在指定处进行交汇,对路口交汇或碰撞的工况场景设置有很大益处。

图4  参与者横向行为、纵向行为以及参与者之间的同步行为

在DYNA4里可以通过Insert Element加入所需要的交通参与者的行为表达,如下图所示。

图5 DYNA4里Insert Element加入所需的参与者行为表达

驾驶员模型(Driver)表达:在设置场景时,有时需要让交通参与者严格遵循行为指令,有时也需要交通参与者可以灵活地自动车辆跟随,可以通过Driver.CarFollowing系列函数进行开关选择并设置。不同于从车,主车驾驶模型里有个较为重要的参数Driver.ControlPoint.Mode,可以修改跟随轨迹控制的车辆参考点。例如,在NCAP测试的CTPA车辆行人过弯工况里,待测车辆需要跟随前轴中心的Clothoid Splines回旋曲线,而不是后轴中心或其它位置。这里便需要指定路径跟随时车辆的参考点。驾驶员模型里有很多参数,这里不一一罗列。需注意的是,这些参数可以是缺省的,具体按需选择设置。

图6 驾驶员模型(Driver)表达的参数设置

特殊指定路径(RoutingAction)表达:通常来说,车辆都会保持在当前车道里行驶,如有交叉口则会按照高精地图OpenDrive所连接的车道行驶,通常是直线优先。但对于行人过马路以及自行车横穿马路等,不在某一固定车道内行驶时,则需要指定一条路径,可以采用函数AssignRouteAction或FollowTrajectoryAction来实现。如果是在Storyboard\Init设置的,那么在动画里便可以显示所指定的路径。

图7 指定特殊路径时DYNA4的动画预览显示

以上是一些常见的场景函数的行为。OpenSCENARIO里面也设置了丰富且功能完善的触发和结束条件,整体类似于状态机的形式。受限于篇幅,后续再行介绍。


外部OpenSCENARIO文件导入DYNA4运行

DYNA4除了支持编辑生成OpenSCENARIO文件外,也支持其他第三方工具的导入。对于ASAM官方于2024年3月份发布的OpenSCENARIO新版本1.3,DYNA4可以无缝集成OpenSCENARIO官方Demo进行场景仿真,不需要对文件进行额外修改。

对于不完全符合标准的OpenSCENARIO文件,可能需要一定的修改。下方以RoadRunner导出的OpenSCENARIO场景为例,介绍如何将泊车场景导入到DYNA4。这里泊车场景加入了一些参与者,设置了初始条件,图8中为导入前后的对比。

图8  OpenSCENARIO场景导入前后的对比


1.

导入DYNA4以及快速运行

将RoadRunner导出的文件.xosc和.xodr分别放入DYNA4工程对应的Database\OpenSCENARIO和Database\OpenDRIVE目录下。

然后新建或复用一个场景,选择调用OpenSCENARIO文件(如下图)。注意主车名字应该存在于OpenSCENARIO文件里,例如常见的Ego或其他名字均可。

图9  OpenSCENARIO文件的调用

然后编辑修改OpenSCENARIO文件:修改引用地图的位置,以及StopTrigger下的条件名称不能是空的或名称相同。两处设置完毕后,便可以开始运行。


2.

内容文件完善

如果文件与标准定义存在差异,需要进行一定的细节修改,主要是处理车辆参考点定义不同带来的差异。按照ASAM OpenSCENARIO里面的描述,车辆的参考点是后轴的中心,而导出的是物体几何的中心点。结果是运行时与设计时的初始位置有些偏移。

图10 OpenSCENARIO车辆参考点的定义

将参考点从中心改为后轴中心即可,同时初始位置也需改动(为该两点之间的距离值)。

此外,DYNA4自带车壳与车辆参数的库,在CatlogLocations里加入车辆文件的位置即可。CatlogLocations库的意义在于方便其他场景文件的调用,便于管理和复用。

图11 CatlogLocations库的调用

下图为导出的OpenSCENARIO场景在DYNA4里运行。场景里有不同的元素:静止的物体,按指定轨迹行动的行人,也有默认轨迹的车辆等,总体上可以很好实现预期场景的复现。对于物体的外观,有3D的红色长方体框,也有具有丰富车壳的车辆,主要区别是在OpenScenario\Entity里是否引用DYNA4 的catalog,可以方便地按需切换。

图12 DYNA4中的OpenSCENARIO场景仿真(泊车)

导入的OpenSCENARIO文件可以在DYNA4里进一步地丰富和完善,按照需要增加不同的行为函数表达,以及优化一些行为特征,例如在车辆精细模型下,过弯时车速的目标值优化等,从而让车辆的目标行为表现更合理。


3.

场景的泛化以及批量化测试

为了提升测试的覆盖率和效率,以及提高代码的健壮性和系统的稳定性,通常会对测试的场景文件进行泛化。以NCAP碰撞场景为例,测试场景的泛化可以对目标进行初始速度、位置等参数的泛化。这些参数变量可能是固定的测试参数序列,也可以是随机的参数序列。例如对于ASAM官方提供的场景SlowPrecedingVehicle.xosc泛化的两种文件,分别是固定与随机:

>

SlowPrecedingVehicleDeterministicParameterSet.xos

>

SlowPrecedingVehicleStochasticParameterSet.xosc

相对于固定序列来说,随机序列的参数是随机的,会按照概率、权重因子等来生成场景。OpenSCENARIO泛化的本质是将文件架构里ParameterDarations的部分,通过泛化文件.xosc进行批量修改,生成新的场景文件库。如下图所示,DYNA4通过内置的Python脚本对OpenSCENARIO测试场景进行泛化,通过选中参数泛化文件.xosc进行自动化的仿真测试。

图13  DYNA4里OpenSCENARIO场景文件的泛化

此外,除了在DYNA4 GUI里进行场景泛化以外,也可以基于vTESTstudio(Python脚本)实现OpenSCENARIO场景文件的泛化测试用例的编写,并通过CANoe进行仿真的测试实现,为用户提供一个标准化描述语言的虚拟场景测试平台,助力自动驾驶和驾驶辅助系统的验证与优化。




END




维克多中国

微信号|Vector维克多

Bilibili | 维克多汽车技术

info@cn.vector.com

021-2283 4688

点击“阅读原文”查看更多DYNA4视频。

Vector维克多
Vector是全球领先的总线开发工具、ECU测试验证工具和嵌入式软件组件供应商,支持CAN、LIN、MOST、FlexRay、SAE J1939、OSEK、以太网和AUTOSAR等多种总线、协议和标准。
 最新文章