跳转到内容

浏览器模拟 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++ 编译、无需账户。

加载一个 ACC cut-in .xosc,通过 esmini-WASM 在浏览器中模拟,跳转时间轴,并将运行记录为 .webm。

.xosc + .xodr 对加载到画布上有两种方法:

  1. 拖放 两个文件一起到画布上。drawtonomy 自动检测这对文件,如果存在多个场景则显示 xosc-picker 横幅。
  2. Hamburger menu → Import → OpenSCENARIO,然后选择 .xosc(以及匹配的 .xodr,如果不在同一位置)。

drawtonomy 解析 OpenDRIVE 道路网络,将 .xosc 传递给嵌入式 esmini-WASM 运行时,并将屏幕底部从正常的工具条切换为 PlaybackControl

如果你手头没有 .xosc 文件,esmini 项目提供了一个小型测试场景库。从 esmini/resources/xosc/ 中加载其中一个 .xosc + .xodr 对以立即尝试模拟器。

模拟过程中,PlaybackControl 会停靠在画布底部。核心控制方式:

操作方法
模拟 / 暂停Space,或 ▶ / ❚❚ 按钮
跳转时间轴拖动时间轴滑块
逐帧后退 / 前进 /
跳转到指定时间点击时间显示并输入数值

时间轴跳转是精确的 — 每个实体的位姿都来自模拟,所以你选择的任何帧都有定义的状态。这正是浏览器模拟器作为审查工具的价值所在:暂停在 cut-in 发生的确切帧处并检查几何,而不是在模拟运行时猜测。

点击 PlaybackControl 中的速度按钮打开速度菜单。选择一个预设值(0.25×、0.5×、1×、2×、4×)或拖动滑块自定义。偏好的速度会在会话间保留。

降速是逐帧检查紧凑交互的最简单方式;加速是快速浏览长时间运行场景后再决定是否跳转的最简单方式。

默认情况下,摄像机适配全景包围盒。启用 Follow Ego,画布会随自车运动而平移,使其在场景运行时保持在视图中心。

这对自车跟随运动的场景很重要 — 高速公路 cut-in、变道、弯曲道路上的长 ACC 运行 — 因为固定包围盒摄像机要么缩放太远以至于交互变得不可见,要么会切掉自车的边缘。

启用 Ghosts 在画布上直接显示每个实体的模拟轨迹:

  • Path ghosts — 实体曾经经过的位置的细折线。
  • Footprint ghosts — 实体在固定时间间隔处采样的轮廓。便于一眼看出加速度/减速度。

时间间隔是可配置的(例如每 0.5 秒 / 1 秒 / 2 秒)。幽灵也会烘焙到图像和 SVG 导出中,所以你为幻灯片或论文保存的图形显示的是轨迹,而不仅仅是当前帧。

更多详情参阅 Path and Footprint,了解创作场景时幽灵的工作原理;在浏览器模拟器中,它们可视化模拟的运行结果。

如果你在导入后编辑了场景 — 移动了实体、改变了 Path、交换了车辆 — 浏览器模拟器会将受影响的轨迹标记为陈旧。点击 Re-simulate 按钮通过嵌入式 esmini-WASM 运行时重新运行故事板并刷新缓存的轨迹。模拟始终反映当前场景,而不是陈旧的快照。

点击 PlaybackControl 中的 Export 将模拟记录为 .webm 视频。

Export 菜单给你两个选项:

  • 纵横比 — Free(紧贴包围盒)、16:9(横向,YouTube)、9:16(纵向,Reels / TikTok / Shorts)、1:14:3。非 Free 比例会用背景色填充包围盒以达到选定的形状 — 所以细长的车道场景不会导出成狭长的条形。
  • 摄像机模式Bbox(全景)或 Follow Ego(视图跟随自车,半径预设为 30 / 50 / 100 米)。

你也可以只记录运行的一部分而不是全部:切换 RANGETrim 并在时间轴上拖动出现的两个手柄 — 参阅 Recording only part of the run

录制时,画布显示 Export video 进度覆盖层和取消按钮。导出使用浏览器中的 MediaRecorder,所以所有数据保留在本地 — 无服务器上传、无需账户。

这使浏览器模拟器成为 OpenSCENARIO 工作的有用演示记录工具:加载 CI 中的 .xosc,点击 Export,几秒钟内你就有了失败案例的可共享 .webm

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,所以两个工作流可以端到端地配合。