跳转到内容

打开并运行 .xosc 文件

drawtonomy 可以读取 OpenSCENARIO 1.x .xosc 文件,并在浏览器中用编译成 WebAssembly 的 esmini 运行它们。导入后的场景并非只读 — 动作、事件、操作和触发条件都进入同一个编辑器中,就像从头开始编写一样。

导入 .xosc + .xodr 文件对,检查导入的阶段和事件,运行场景。

.xosc 描述角色要做的事情。它不包含道路 — 它在 RoadNetwork 元素中引用一个 OpenDRIVE .xodr。没有这个道路,实体无处可置,所以 drawtonomy 在导入前会请求它。

导入前准备好两个文件。如果你的 .xosc 来自 esmini 代码库,对应的 .xodrresources/xodr/ 目录中,与 resources/xosc/ 并列。

在文件管理器中选中 .xosc .xodr,将它们一起拖到画布上。这是最快的方式 — drawtonomy 会自动配对它们,只需一步导入:道路加载、角色放置到道路上、LOGIC 卡填充完成,无需第二次提示。

配对基于 .xosc 在其 RoadNetwork 元素中声明的道路名称。如果你拖放的 .xodr 不是被引用的那个 — 或只拖放了 .xosc — drawtonomy 无法完成配对,会回退到 OPENDRIVE MAP REFERENCED 横幅,让你指定正确的道路文件。

汉堡菜单 → Import…,然后选择 .xosc

由于文件对话框只能选一个文件,drawtonomy 会在屏幕顶部显示一个横幅:

OPENDRIVE MAP REFERENCED cut-in.xosc../xodr/e6mini.xodr

OPENDRIVE MAP REFERENCED 横幅 — 显示 .xosc 名称、它引用的 .xodr,以及打开 .xodr 按钮

点击 Open .xodr 选择道路文件。横幅还有一个 × 按钮;点击它会结束导入而不加载任何东西,所以如非取消,请使用 Open .xodr

在应用 URL 后追加 ?open= 和 GitHub 文件 URL:

https://drawtonomy.com/?open=https://github.com/esmini/esmini/blob/master/resources/xosc/cut-in.xosc

该链接是实时的 — 试试看: 在 drawtonomy 中打开 esmini 的 cut-in 场景 →

drawtonomy 会获取 .xosc,读取其 RoadNetwork 引用,从同一代码库的同一提交或分支拉取 .xodr。它还会列举场景引用的 Catalogs 目录,加载找到的目录文件 — 这是唯一能自动解析目录的方式。

它接受什么、不接受什么:

支持的主机github.com 文件 blob 链接和 raw.githubusercontent.com
不支持其他主机和 tree/ 目录链接
代码库必须是公开的 — 抓取是未认证的
速率限制目录列表使用未认证的 GitHub API,上限是每小时 60 次请求
绝对道路路径RoadNetwork 指向 Windows 路径(C:\…)的情况无法解析;系统会改为请求 .xodr

这使得单个链接足以与评审者分享一个可运行的场景 — 无需下载,无需安装。

?open= 路由从 GitHub 读取,所以要分享你编辑的场景,把文件放在 GitHub 能提供的地方:

  1. 在 drawtonomy 中,Export → OpenSCENARIO (.xosc)…,将 INCLUDE 设为 .xosc + .xodr,让道路随场景一起传输。(保留导出生成的相对 RoadNetwork 路径。)
  2. 提交并推送两个文件到公开的 GitHub 代码库。
  3. 从文件页面复制 .xosc 文件的 GitHub blob URL(github.com/…/blob/… 链接),附加到 https://drawtonomy.com/?open= 后面。

任何打开这个链接的人都会获得你编辑的场景、其道路,以及代码库包含的任何目录 — 自动解析,因为 ?open= 会从同一代码库加载目录

导入成功后,drawtonomy 会自动切换到场景模式,LOGIC 卡填充如下:

  • 每个 OpenSCENARIO Act 变成一个阶段,保留其名称。一个包含 CutInAndBrakeAct 的场景会显示一个同名的阶段。
  • 每个**Event** 变成执行它的角色下的事件卡,标签是原始事件名称。
  • 故事板的 StopTrigger 变成 END CONDITIONS 节点 — 例如 After CutInManeuver ends

点击任何事件卡打开事件编辑器。触发条件、动作、动力学配置文件和优先级都能往返,所以导入的 Time gap to actor 触发条件读回时仍是 Time gap to actor 并带有相同的阈值。ManeuverManeuverGroup 名称保留在 ADVANCED 部分而非显示在卡上。

许多已发布的场景声明 <CatalogLocations> 并从外部目录文件中拉取车型。导入此类文件时,drawtonomy 会显示一条信息吐司:

This scenario references external Catalogs that were not provided. Drop the catalog files with the .xosc, or actors may not load.

把它理解为信息,而非错误

  • 只要 .xosc 声明目录位置就会出现,无论是否真正缺少什么。
  • 标准车辆目录条目映射到 drawtonomy 的内置模型,所以大多数情况下每个角色都会用正确的形状、颜色和起始位置加载,场景能完整运行。
  • 吐司会自己在几秒后消失;如需再次读取,重新导入文件。
  • 目录确实会在 ?open= GitHub 路由上自动解析。

如果导入后角色真的缺失,会很明显 — 受影响的实体根本不会在画布上出现。

导入后可以改变任何东西,但一个细节容易被忽略。Variables 面板 — LOGIC 卡上的 {x} 按钮 — 直接说明了:

Editing values here does not change actions already imported with a literal value (references are resolved at import time).

换句话说:如果原始 .xosc 使用 $HostVehicle_Speed 且该参数是 27.7,导入的动作保持 27.7,不是引用。之后改变参数不会移动动作。编辑动作本身。

LOGIC 卡顶部的传输行驱动运行:播放和暂停、重置到开始、播放速率、跟随相机、幽灵轨迹和验证徽章。拖动或点击时间条可以跳转到任何时刻。完整信息见 播放

对于导入的场景,值得养成两个习惯:

  • 播放前设置跟随相机。导入的道路网络通常长达数公里,默认相机不跟踪任何东西。
  • 用跳转而非观看。 每个姿态都来自仿真,所以暂停在切入的确切帧上是精确的,不是估计。
症状原因
选择 .xosc 后什么都不加载道路文件从未提供。重新导入并在横幅上使用 Open .xodr
所有角色叠在一起道路未加载,所以每个实体都回退到原点。检查 .xodr 是否与场景匹配。
一个角色半路停下再也不动它到达了道路的末端。延伸道路或使用更长的 .xodr
每次导入都显示目录吐司对任何带 <CatalogLocations>.xosc 都预期 — 见上方
GitHub 链接被拒绝只接受 github.com blob 链接和 raw.githubusercontent.com,且代码库必须是公开的。