什么是 OpenSCENARIO?
OpenSCENARIO 是 ASAM 制定的开放标准,用来描述动态驾驶场景中主车与其他交通参与者随时间推进的行为,并以仿真器可直接回放的形式表达出来。它是自动驾驶系统场景化测试事实上的交换格式。
两套 OpenSCENARIO 规范
Section titled “两套 OpenSCENARIO 规范”同一个名字下其实并存着两套互不相通的规范:
- OpenSCENARIO 1.x —— 基于 XML,成熟稳定,工具支持面广。1.3 修订版是目前大多数工具的生产目标版本。
- OpenSCENARIO 2.0 / DSL —— 面向抽象、参数化、概率化场景的领域专用语言,出现更晚,表达能力更强,配套工具链也在持续完善。
两种格式并不能互相转换,但当前大多数仿真器以及 SOTIF / ISO 21448 测试流水线实际消费的都是 1.x。
OpenSCENARIO 1.x 文件里有什么
Section titled “OpenSCENARIO 1.x 文件里有什么”一个典型的 1.x 场景文件通常由以下部分组成:
- RoadNetwork 引用 —— 一般指向一个 OpenDRIVE
.xodr文件,有时还会搭配.osgb之类的场景图文件。 - Entities 区块 —— 车辆、行人以及其他杂项对象。
- Storyboard —— 各实体按时间顺序执行的幕(act)、机动动作(maneuver)与事件(event)。
- Init 动作 —— 起始位置、初速度以及参数赋值。
对单个短场景来说,直接读 XML 并不算吃力;但一旦场景变体扩展到几十个,手工维护的成本会迅速失控。这也是各种编写工具和 DSL 存在的意义。
常见的编写方式
Section titled “常见的编写方式”- 手写 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 处于什么位置
Section titled “drawtonomy 处于什么位置”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 提供的是一条更快的可视化路径:从一个想法(或一句自然语言提示)直接走到一个可运行、可复核的场景。
- 场景编辑器 —— 在浏览器里编写阶段、事件、action 和触发条件,然后直接运行。
- 创建你的第一个场景 —— 从空白画布开始的一次变道场景。
- RoadRunner 与 OpenSCENARIO 术语对照 —— 两套词汇体系之间的对照表。
- 什么是 OpenDRIVE?
- 什么是 esmini?
- 对比:drawtonomy 与手写 OpenSCENARIO XML