导出至 OpenDRIVE / OpenSCENARIO / esmini
drawtonomy 可将手绘场景一键转换为 ASAM
OpenDRIVE(.xodr)
路网文件和
OpenSCENARIO(.xosc)
场景文件,并打包为单个 zip,在
esmini 中直接回放。
转换功能有意保持精简——只覆盖能与 ASAM 数据模型对应的少数图形,其余一律忽略。本页详细说明哪些图形会被转换、导出的车辆实际如何运动,以及当前功能边界,确保输出不过度承诺。
完整流程演示
Section titled “完整流程演示”下方视频一镜到底:绘制交叉口、绘制路径、生成车辆足迹、导出 esmini zip,再在 esmini 中回放导出的 .xosc。
从编辑器导出
Section titled “从编辑器导出”ASAM 导出只有一个入口,drawtonomy 不单独提供 .xodr / .xosc 两个菜单项——两个文件始终一起生成并打包进同一个 zip。

- 绘制好场景(车道、交叉口、车辆、路径……)。
- 打开菜单 → Export →
.zip (esmini)。 - 根据提示输入基础名称(默认为
drawtonomy-<日期>)。 - 浏览器下载
<name>.zip,其中包含<name>.xodr、<name>.xosc以及场景所引用的 esmini 三维模型资源。
导出范围是当前页面的全部内容——ASAM 目标格式不支持”仅导出选中图形”。
回放导出文件
Section titled “回放导出文件”unzip drawtonomy-2026-05-30.zipcd drawtonomy-2026-05-30esmini --osc drawtonomy-2026-05-30.xosc --window 60 60 1024 768
车辆沿橙色线行驶——那条线就是由你绘制的路径生成的 FollowTrajectoryAction。
哪些图形会被转换
Section titled “哪些图形会被转换”转换为 OpenDRIVE(.xodr)
Section titled “转换为 OpenDRIVE(.xodr)”| drawtonomy 图形 | OpenDRIVE 元素 | 备注 |
|---|---|---|
| Lane(车道) | 一条 <road> | 1 条车道 = 1 条独立道路 |
| Traffic light(信号灯) | 最近道路上的 <signal> | 仅机动车 / 行人类型 |
| Crosswalk(人行横道) | <object type="crosswalk"> | 垂直于道路放置 |
| Polygon(多边形,≥3 点) | 带 <outline> 的 <object type="patch"> | 用于填充交叉口 / 区域的视觉效果 |
其他图形——车辆、行人、独立点、自由线段、文字、图片——均不写入 .xodr。
道路的具体规格:
- 几何形状仅为直线段。 道路参考线从车道的左右边界采样后,以
<line>段输出。不生成arc、spiral或poly3几何。 - 固定车道布局。 每条道路恰好包含一条左车道(
id=1)、一条中心车道(id=0)和一条右车道(id=-1),类型均为type="driving"。不支持多车道道路和多路段。 - 道路标线硬编码为
solid white 0.13 m。 - 无交叉口(junction)。 每条道路的
junction="-1",不生成任何<junction>元素。交叉口仅通过多边形补丁(视觉效果)以及从车道next/prev连接(仅取第一个条目)派生的前驱 / 后继链接来表示。 - 无高程 / 超高。
elevationProfile和lateralProfile输出为空(平面道路)。 - 比例尺固定为 16.67 px/m,地理原点为
0。
转换为 OpenSCENARIO(.xosc)
Section titled “转换为 OpenSCENARIO(.xosc)”| drawtonomy 图形 | OpenSCENARIO 元素 |
|---|---|
| Vehicle(车辆) | 一个 <ScenarioObject>(<Vehicle> 或 <Pedestrian>) |
| Path footprint(路径足迹,前导车辆) | 一个 <FollowTrajectoryAction> |
“行人”是指模板名称匹配行人 / 步行模式的车辆图形,导出时以 <Pedestrian> 而非 <Vehicle> 输出。车道、人行横道、信号灯和自由线段不写入 .xosc。
导出的场景有意保持最小化:
- 唯一的动态行为是
FollowTrajectoryAction——一条带时间戳的折线轨迹。不包含速度动作、变道、红绿灯响应、碰撞避让或任何交互条件。 - 每个运动实体从
SimulationTime ≥ 0开始,场景设有StopTrigger60 秒的硬限制。
路径足迹如何转换为车辆运动
Section titled “路径足迹如何转换为车辆运动”这是动态导出的核心,有必要说清楚。

路径(path) 是你绘制的线段,足迹(footprints) 是沿路径排列的车辆残影(编辑器中可见的轨迹)。导出时:
- 只有前导足迹(第一个)会成为运动中的
<ScenarioObject>。其余残影只是画布预览,导出时丢弃——你得到的是一辆沿整条路径行驶的车辆,而非车队。 - 路径的控制点转换为轨迹顶点,坐标单位为世界(ENU)米。
- 每个顶点附带一个
time值,结果写成<FollowTrajectoryAction>内的<Trajectory>→<Polyline>→<Vertex time="…">。
速度是固定的(关键限制)
Section titled “速度是固定的(关键限制)”轨迹时间以硬编码的 10 m/s(约 36 km/h) 计算。drawtonomy 的 UI 中没有速度字段,导出器也从不覆盖默认值。在 esmini 中,实体始终以约 36 km/h 行驶,无论你画了什么。你无法直接设置速度,但可以通过足迹布局来调整时序,详见下文。
两种时序模式
Section titled “两种时序模式”路径的”Variable positioning”开关决定时间如何沿轨迹分配:
- 均匀模式(开关关闭) ——足迹以等弧长 Interval 间隔排列,时间为
距离 / 10 m/s,运动为匀速。调整 Interval 只改变顶点数量(采样密度),路径形状和总时长不变。 - 可变模式(开关打开) ——每个足迹固定在路径上的某个位置,总时长被等分到各足迹之间。足迹密集处车辆行驶慢,稀疏处行驶快。这是在路线中改变有效速度的唯一方式。
编辑操作与 .xosc 的对应关系
Section titled “编辑操作与 .xosc 的对应关系”| 编辑操作 | 对导出的影响 |
|---|---|
| 移动路径控制点 | 轨迹顶点坐标 + 总时长(路径长度变化,速度保持 10 m/s) |
| 在可变模式下拖动足迹 | 该足迹的归一化位置 → 对应顶点的 time → 该段的有效速度 |
| 切换 Variable positioning | 在等时和等速时序之间切换 |
| 修改 Interval(均匀模式) | 仅改变顶点数量——轨迹形状和速度不变 |
| 修改 Anchor | 仅改变足迹绘制偏移——对导出轨迹无影响 |
| 更换车辆模板 | vehicleCategory、三维模型、包围盒高度、性能预设 |
| 调整车辆尺寸(w、h) | 包围盒尺寸和车轴几何 |
| 旋转车辆 | 初始朝向(仅当车辆没有绑定轨迹时生效) |
| 移动车辆 | 初始 WorldPosition(若已绑定轨迹,则吸附到轨迹起点) |
直接回答常见问题:是的——在可变模式下将足迹拖到路径中段会改变导出的速度规划,因为它重新分配了该段的时间。在均匀模式下拖动足迹,或修改 Anchor,则不会产生影响。
硬编码值说明
Section titled “硬编码值说明”以下内容来自固定映射或常量,无法通过 UI 修改:车辆类别 / 性能预设、三维模型路径、各类别车辆高度、车轴几何(由尺寸推算)、跟随模式(position)、60 秒停止触发器,以及最重要的——10 m/s 轨迹速度。
导出器包含在 @drawtonomy/sdk 中,可脱离编辑器运行。与菜单不同,SDK 还支持单独输出两种文件:
import { exporter, createSnapshot } from '@drawtonomy/sdk'
const snapshot = createSnapshot(shapes)
// 打包(与菜单导出一致):const { blob, baseName } = exporter.buildEsminiZip(snapshot, { baseName: 'my-scene',})
// 或分别导出各格式:const xodr = exporter.exportToOpenDrive(snapshot)const xosc = exporter.exportToOpenScenario(snapshot, { xodrFilename: 'my-scene.xodr',})完整 API 与扩展点,请参阅 导出器 SDK 参考。
| 格式 | 版本 |
|---|---|
| OpenDRIVE | 1.8 |
| OpenSCENARIO | 1.3 |
功能范围速查
Section titled “功能范围速查”已支持: 从车道生成直线段道路;将信号灯、人行横道和交叉口多边形作为 OpenDRIVE 对象导出;每条路径对应一辆车辆沿时序轨迹行驶;生成可立即回放的 esmini zip。
暂不支持: OpenDRIVE 交叉口、曲线几何、多车道道路、道路高程;OpenSCENARIO 速度动作、变道、红绿灯逻辑、多智能体交互,以及任何单车速度控制。