跳转到内容

什么是 OpenSCENARIO?

OpenSCENARIO 是 ASAM 制定的开放标准,用来描述动态驾驶场景中主车与其他交通参与者随时间推进的行为,并以仿真器可直接回放的形式表达出来。它是自动驾驶系统场景化测试事实上的交换格式。

同一个名字下其实并存着两套互不相通的规范:

  • OpenSCENARIO 1.x —— 基于 XML,成熟稳定,工具支持面广。1.3 修订版是目前大多数工具的生产目标版本。
  • OpenSCENARIO 2.0 / DSL —— 面向抽象、参数化、概率化场景的领域专用语言,出现更晚,表达能力更强,配套工具链也在持续完善。

两种格式并不能互相转换,但当前大多数仿真器以及 SOTIF / ISO 21448 测试流水线实际消费的都是 1.x。

一个典型的 1.x 场景文件通常由以下部分组成:

  • RoadNetwork 引用 —— 一般指向一个 OpenDRIVE .xodr 文件,有时还会搭配 .osgb 之类的场景图文件。
  • Entities 区块 —— 车辆、行人以及其他杂项对象。
  • Storyboard —— 各实体按时间顺序执行的幕(act)、机动动作(maneuver)与事件(event)。
  • Init 动作 —— 起始位置、初速度以及参数赋值。

对单个短场景来说,直接读 XML 并不算吃力;但一旦场景变体扩展到几十个,手工维护的成本会迅速失控。这也是各种编写工具和 DSL 存在的意义。

  • 手写 XML。 适合小团队,也常用于制作标准基准(ground-truth)用例。
  • DSL / 代码生成。 OpenSCENARIO 2.0 DSL、Scenic 或团队内部的生成器,都能从更高层的描述生成 XML。
  • Python 库。 scenariogeneration(前身是 pyoscx / pyodrx)提供了操作 OpenSCENARIO + OpenDRIVE 的编程接口,覆盖 OpenSCENARIO V1.0 到 V1.3.1。
  • 仿真器自带的场景引擎。 CARLA ScenarioRunner 用 Python 定义并执行场景,支持 OpenSCENARIO 1.0 / 2.0。
  • 可视化编辑器。 MathWorks RoadRunner(可导出 XML 和 DSL)、Truevision Designer(专注 OpenDRIVE)、Blender Driving Scenario Creator(Blender 插件),以及 drawtonomy —— 它能编写完整的 OpenSCENARIO 1.x storyboard,并直接在浏览器里用 esmini-WASM 运行。

实际生产中的场景编写通常会混用上述几种方式:常见做法是用 Python 库或 DSL 生成场景本身,再配合一个可视化编辑器来处理路网部分。

drawtonomy 是一个基于浏览器的 OpenSCENARIO 1.x 编写与执行环境——一块白板,你在上面画出的场景会直接变成可运行的 storyboard。它可以导入 OpenSCENARIO 1.x,也可以导出 OpenSCENARIO 1.0–1.2(1.3 即将支持),同时支持 OpenDRIVE 1.8:

  • 在 2D 俯视画布上放置车道、路口、车辆、行人、交通灯和道路标线。
  • 用可视化方式搭建 storyboard——阶段(phase)、事件、35 种 action 和 19 种触发条件——并直接在浏览器里用编译成 WebAssembly 的 esmini 运行,2D 画布旁还带有 3D 预览(追逐视角 / 俯瞰视角 / 驾驶员视角)。
  • 导入已有的 .xosc + .xodr 文件对并编辑,也可以导出该文件对用于原生 esmini 运行。
  • 用自然语言描述生成场景:drawtonomy 会先起草一份 storyboard,通过四道验证关卡(其中包含一次真实的 esmini 运行)检查后,再应用到画布上。

导出器现在已经能生成 OpenDRIVE 的 <junction> / <connection> / <laneLink> 结构以及 <signal> 条目——这已经不是路线图上的待办项。但精度上有一个关键区别:从已导入的 .xodr 中未经编辑直接携带下来的道路,能高保真地保留原始路口拓扑;而从零手绘车道后自动合成的路口,目前还不够可靠。仍然欠缺的是:参数扫描(parameter sweep),以及自定义或基于机器学习的控制器。

规模化的场景批(scenario fleet,即大批量参数化变体)仍然最适合用 DSL 或 Python 库生成,这不在可视化编辑器的目标范围内。drawtonomy 提供的是一条更快的可视化路径:从一个想法(或一句自然语言提示)直接走到一个可运行、可复核的场景。