浏览器模拟 OpenSCENARIO 文件 — 加载 .xosc 并运行
drawtonomy 是一款免费的浏览器驾驶场景白板。同一个画布也是一款免费的浏览器 OpenSCENARIO 模拟器:将 .xosc 及其 .xodr 加载进来,drawtonomy 就在浏览器中模拟故事板 — 支持时间轴跳转、逐帧步进、幽灵轨迹、Follow Ego 摄像机跟随自车,以及一键 .webm 导出。
底层实现基于 esmini 编译为 WebAssembly — 来自瑞典 ADAS 社区的开源 OpenSCENARIO 1.x 参考运行时。与在 Linux CLI 上运行的同一个模拟核心运行在浏览器页面内:相同的故事板语义(acts、sequences、maneuvers、triggers)、相同的解析器、相同的车辆状态。运行时正确性的所有功劳归于 esmini 项目;drawtonomy 只是其周围的浏览器外壳。无需安装、无需 MATLAB、无需 C++ 编译、无需账户。
加载 OpenSCENARIO 文件
Section titled “加载 OpenSCENARIO 文件”将 .xosc + .xodr 对加载到画布上有两种方法:
- 拖放 两个文件一起到画布上。drawtonomy 自动检测这对文件,如果存在多个场景则显示 xosc-picker 横幅。
- Hamburger menu → Import → OpenSCENARIO,然后选择
.xosc(以及匹配的.xodr,如果不在同一位置)。
drawtonomy 解析 OpenDRIVE 道路网络,将 .xosc 传递给嵌入式 esmini-WASM 运行时,并将屏幕底部从正常的工具条切换为 PlaybackControl。
如果你手头没有 .xosc 文件,esmini 项目提供了一个小型测试场景库。从 esmini/resources/xosc/ 中加载其中一个 .xosc + .xodr 对以立即尝试模拟器。
模拟、暂停和时间轴跳转
Section titled “模拟、暂停和时间轴跳转”模拟过程中,PlaybackControl 会停靠在画布底部。核心控制方式:
| 操作 | 方法 |
|---|---|
| 模拟 / 暂停 | Space,或 ▶ / ❚❚ 按钮 |
| 跳转时间轴 | 拖动时间轴滑块 |
| 逐帧后退 / 前进 | ← / → |
| 跳转到指定时间 | 点击时间显示并输入数值 |
时间轴跳转是精确的 — 每个实体的位姿都来自模拟,所以你选择的任何帧都有定义的状态。这正是浏览器模拟器作为审查工具的价值所在:暂停在 cut-in 发生的确切帧处并检查几何,而不是在模拟运行时猜测。
调整模拟速度
Section titled “调整模拟速度”点击 PlaybackControl 中的速度按钮打开速度菜单。选择一个预设值(0.25×、0.5×、1×、2×、4×)或拖动滑块自定义。偏好的速度会在会话间保留。
降速是逐帧检查紧凑交互的最简单方式;加速是快速浏览长时间运行场景后再决定是否跳转的最简单方式。
Follow Ego — 摄像机跟随自车
Section titled “Follow Ego — 摄像机跟随自车”默认情况下,摄像机适配全景包围盒。启用 Follow Ego,画布会随自车运动而平移,使其在场景运行时保持在视图中心。
这对自车跟随运动的场景很重要 — 高速公路 cut-in、变道、弯曲道路上的长 ACC 运行 — 因为固定包围盒摄像机要么缩放太远以至于交互变得不可见,要么会切掉自车的边缘。
幽灵轨迹 — Path 和 Footprint
Section titled “幽灵轨迹 — Path 和 Footprint”启用 Ghosts 在画布上直接显示每个实体的模拟轨迹:
- Path ghosts — 实体曾经经过的位置的细折线。
- Footprint ghosts — 实体在固定时间间隔处采样的轮廓。便于一眼看出加速度/减速度。
时间间隔是可配置的(例如每 0.5 秒 / 1 秒 / 2 秒)。幽灵也会烘焙到图像和 SVG 导出中,所以你为幻灯片或论文保存的图形显示的是轨迹,而不仅仅是当前帧。
更多详情参阅 Path and Footprint,了解创作场景时幽灵的工作原理;在浏览器模拟器中,它们可视化模拟的运行结果。
编辑后重新模拟
Section titled “编辑后重新模拟”如果你在导入后编辑了场景 — 移动了实体、改变了 Path、交换了车辆 — 浏览器模拟器会将受影响的轨迹标记为陈旧。点击 Re-simulate 按钮通过嵌入式 esmini-WASM 运行时重新运行故事板并刷新缓存的轨迹。模拟始终反映当前场景,而不是陈旧的快照。
将模拟导出为 .webm
Section titled “将模拟导出为 .webm”点击 PlaybackControl 中的 Export 将模拟记录为 .webm 视频。
Export 菜单给你两个选项:
- 纵横比 — Free(紧贴包围盒)、16:9(横向,YouTube)、9:16(纵向,Reels / TikTok / Shorts)、1:1 或 4:3。非 Free 比例会用背景色填充包围盒以达到选定的形状 — 所以细长的车道场景不会导出成狭长的条形。
- 摄像机模式 — Bbox(全景)或 Follow Ego(视图跟随自车,半径预设为 30 / 50 / 100 米)。
你也可以只记录运行的一部分而不是全部:切换 RANGE 为 Trim 并在时间轴上拖动出现的两个手柄 — 参阅 Recording only part of the run。
录制时,画布显示 Export video 进度覆盖层和取消按钮。导出使用浏览器中的 MediaRecorder,所以所有数据保留在本地 — 无服务器上传、无需账户。
这使浏览器模拟器成为 OpenSCENARIO 工作的有用演示记录工具:加载 CI 中的 .xosc,点击 Export,几秒钟内你就有了失败案例的可共享 .webm。
与命令行运行 esmini 的对比
Section titled “与命令行运行 esmini 的对比”drawtonomy 的浏览器模拟器和原生 esmini 安装共享相同的模拟核心 — esmini。差异在于外壳:
- drawtonomy 在浏览器中运行 esmini(WebAssembly),具有画布原生 UI:时间轴滑块、Follow Ego、Ghost trails、
.webm导出、共享.drawtonomy.svg源。 - esmini CLI 原生运行 esmini,具有 3D OpenSceneGraph 查看器、无头 CI 模式,以及用于嵌入的 C++ / Python API。
如果你需要在 CI 机器、Python 笔记本或原生 3D 查看器上进行完整的故事板语义 → 直接运行 esmini。如果你想要立刻在浏览器中模拟场景 — 用于分类、代码审查、教学或快速演示 .webm — Scenario Play 是最快的方式。
OpenSCENARIO 包导出将相同的 .xosc + .xodr 传递给你的本地 esmini,所以两个工作流可以端到端地配合。
- Scenario editor — 创作场景,不只是播放。
- Open and play an existing .xosc — 加载部分的详细信息:文件对、
?open=GitHub 路由和目录警告。 - Playback — Scenario editor 内的传输控制行。
- Use case: OpenSCENARIO simulator
- Export OpenDRIVE + OpenSCENARIO esmini-ready bundle
- What is OpenSCENARIO?
- What is esmini?
- Path and Footprint
- drawtonomy vs esmini
- drawtonomy vs CARLA