什么是 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 — 各实体按时间顺序执行的幕、机动动作与事件。
- Init 动作 — 初始位置、速度及参数赋值。
对于单一的短场景,XML 的可读性尚可;但当场景变体扩展到数十个时,维护成本就会急剧上升。这正是编写工具和 DSL 的价值所在。
常见的编写方式
Section titled “常见的编写方式”- 手写 XML。 适合小团队和标准基准用例。
- DSL / 代码生成。 OpenSCENARIO 2.0 DSL、Scenic 或内部生成器从更高层次描述中生成 XML。
- Python 库。 scenariogeneration(前身为
pyoscx/pyodrx)提供了 OpenSCENARIO + OpenDRIVE 的编程 API,覆盖 OpenSCENARIO V1.0 至 V1.3.1。 - 仿真器内置场景引擎。 CARLA ScenarioRunner 用 Python 和 OpenSCENARIO 1.0 / 2.0 为 CARLA 定义并执行场景。
- 可视化编辑器。 MathWorks RoadRunner(导出 XML 和 DSL)、Truevision Designer(以 OpenDRIVE 为核心)、Blender Driving Scenario Creator(Blender 插件)以及 drawtonomy(带有部分导出功能的浏览器白板)。
实际的生产场景编写往往综合使用其中几种——通常以 Python 库或 DSL 来生成场景本身,并搭配可视化编辑器处理路网部分。
drawtonomy 的定位
Section titled “drawtonomy 的定位”drawtonomy 是一款带有 OpenSCENARIO 1.3 / OpenDRIVE 1.8 部分导出功能的浏览器白板。根据其导出器文档:
- 在 2D 俯视画布上放置车道、路口、车辆、行人、交通灯和道路标线。
- 导出包含
.xosc+.xodr+run.sh的 zip 压缩包,可在 esmini 中回放简单场景。
导出器有意只覆盖规范的一个子集。目前不生成的内容(在 SDK 中作为路线图项目记录)包括:
- OpenDRIVE 路口原语(
<junction>)。 - OpenDRIVE
<signal>形式的交通标志。 - 加速曲线、停留/停止事件、感知信号路径、变道动作或更复杂的多主体 Storyboard。
- 条件触发、参数扫描、自定义或基于 ML 的控制器。
实际使用中,请将 drawtonomy 的 OpenSCENARIO 导出视为草图起点——适合作为场景的可视化配图,或作为可手动编辑的基线,而非生产级场景编写路径。