跳到內容

匯出為 OpenDRIVE / OpenSCENARIO / esmini 格式

drawtonomy 可將手繪場景轉換為 ASAM OpenDRIVE.xodr) 道路網路,加上一份 OpenSCENARIO.xosc) 情境描述,並打包成單一 zip,可直接在 esmini 重播。

轉換範圍刻意保持精簡,只涵蓋能夠對應到 ASAM 資料模型的少數圖形,其餘一律略去。本頁明確說明哪些內容會被轉換、匯出後車輛實際執行什麼動作,以及哪些功能目前超出範圍,讓輸出結果不會給你錯誤的期待。

以下影片一鏡到底:繪製路口、畫出路徑、產生車輛足跡、匯出 esmini zip,最後在 esmini 中重播匯出的 .xosc

一鏡到底:繪製路口、畫出路徑、產生車輛足跡、匯出 esmini zip,最後在 esmini 中重播匯出的 .xosc。

ASAM 格式只有一個匯出入口。drawtonomy 不提供獨立的 .xodr / .xosc 選單項目,兩份檔案會同時產生並打包成一個 zip。

匯出子選單,.zip (esmini) 已醒目標示

  1. 繪製場景(車道、路口、車輛、路徑……)。
  2. 開啟選單 → Export → .zip (esmini)
  3. 出現提示時輸入基底名稱(預設為 drawtonomy-<日期>)。
  4. 下載 <名稱>.zip,其中包含 <名稱>.xodr<名稱>.xosc,以及情境所參照的 esmini 3D 模型資產。

匯出範圍涵蓋目前畫布上的所有圖形,ASAM 目標不支援「僅匯出選取範圍」的模式。

Terminal window
unzip drawtonomy-2026-05-30.zip
cd drawtonomy-2026-05-30
esmini --osc drawtonomy-2026-05-30.xosc --window 60 60 1024 768

車輛在 esmini 中沿匯出軌跡行駛

車輛會沿橘色路線行駛,那條線就是根據你所畫路徑產生的 FollowTrajectoryAction

drawtonomy 圖形OpenDRIVE 元素備註
Lane一條 <road>1 條車道 = 1 條獨立道路
Traffic light最近道路上的 <signal>僅限車輛/行人類型
Crosswalk<object type="crosswalk">垂直於道路放置
Polygon(≥3 個節點)附帶 <outline><object type="patch">用於路口與區域的視覺填充

其餘圖形——車輛、行人、獨立節點、自由線段、文字、圖片——不會寫入 .xodr

各道路的轉換細節如下:

  • 幾何形狀只有直線。 道路參考線從車道左右邊界採樣,以 <line> 線段輸出,不產生 arcspiralpoly3 幾何。
  • 固定車道佈局。 每條道路固定包含一條左車道(id=1)、一條中心車道(id=0)、一條右車道(id=-1),全部為 type="driving",不支援多車道或多段車道。
  • 道路標線固定為 solid white 0.13 m
  • 無路口元素。 每條道路均標記 junction="-1"不產生任何 <junction> 元素。路口只以多邊形面片(視覺)以及從車道 next / prev 連接推導出的前驅/後繼連結呈現(僅取第一個條目)。
  • 無高程/超高程——elevationProfilelateralProfile 輸出為空(平坦道路)。
  • 比例固定為 16.67 px/m,地理原點為 0
drawtonomy 圖形OpenSCENARIO 元素
Vehicle<ScenarioObject><Vehicle><Pedestrian>
Path footprint(前導車輛)<FollowTrajectoryAction>

「行人」是指模板名稱符合 pedestrian/walk 模式的車輛圖形,會輸出為 <Pedestrian> 而非 <Vehicle>。車道、斑馬線、紅綠燈和自由線段不會輸出至 .xosc

匯出的情境刻意保持最小化:

  • 唯一的動態行為是 FollowTrajectoryAction,即時間戳記多折線。不包含速度動作、換道、號誌回應、碰撞迴避或任何互動條件。
  • 每個移動實體從 SimulationTime ≥ 0 開始,情境設有 StopTrigger 於 60 秒結束。

這是動態匯出的核心,值得仔細說明。

足跡面板:Variable positioning、Interval 與 Anchor 的說明

**路徑(Path)**是你畫的一條線段,**足跡(footprints)**則是沿路徑排列的車輛幻影(編輯器中可見的殘影)。匯出時:

  1. 只有前導足跡(第一個)會成為移動的 <ScenarioObject>,後方的幻影僅用於畫布預覽,匯出時會捨棄。你會得到一輛沿完整路徑行駛的車輛,而非一列車隊。
  2. 路徑的控制點成為軌跡頂點,以世界座標系(ENU)的公尺表示。
  3. 每個頂點帶有 time 屬性,結果寫成 <Trajectory><Polyline><Vertex time="…"> 格式,包裹在 <FollowTrajectoryAction> 中。

速度固定(這是最主要的限制)

Section titled “速度固定(這是最主要的限制)”

軌跡時間戳記以固定的 10 m/s(約 36 km/h)計算。drawtonomy 的 UI 中沒有速度欄位,匯出器也不覆寫預設值。在 esmini 中,實體的報告速度一律約為 36 km/h,與你的繪圖無關。你無法設定速度,但可以透過調整足跡排列來影響時序,方法說明如下。

路徑的「Variable positioning」切換開關決定時間如何分配到軌跡各點:

  • Uniform(切換 OFF)——足跡以等弧長 Interval 間距排列,時間為 距離 / 10 m/s,運動為等速。調整 Interval 只影響頂點數量(採樣密度),路徑形狀與總時長不變。
  • Variable(切換 ON)——每個足跡固定在路徑上的某個位置,總時長平均分配為各足跡之間的等時間片段。足跡密集處車輛行駛較慢,稀疏處則較快。這是唯一能在路線途中改變有效速度的方式。
編輯器操作對匯出的影響
移動路徑控制點軌跡頂點座標與總時長(長度改變,速度維持 10 m/s)
Variable 模式下拖曳足跡該足跡的正規化位置 → 頂點的 time → 該段的有效速度
切換 Variable positioning在等時間與等速度時序之間切換
變更 Interval(Uniform 模式)只影響頂點數量,軌跡形狀與速度不變
變更 Anchor僅影響足跡繪製偏移,對匯出軌跡無影響
變更車輛模板vehicleCategory、3D 模型、車身高度、性能預設
調整車輛尺寸(w, h)BoundingBox 尺寸與輪軸幾何
旋轉車輛初始朝向(僅在車輛無軌跡時有效)
移動車輛Init WorldPosition(若有軌跡則對齊至軌跡起點)

直接回答常見問題:是的——在 Variable 模式下將足跡移至路徑中段,會改變匯出的速度計劃,因為這會重新分配該段的時序。在 Uniform 模式下移動足跡,或調整 Anchor,則不會有任何影響。

以下數值來自固定的對應表或常數,無法透過 UI 修改:車輛類別/性能預設、3D 模型路徑、各類別的車身高度、輪軸幾何(由尺寸推算)、跟隨模式(position)、60 秒停止觸發條件,以及最重要的——10 m/s 軌跡速度。

匯出器隨 @drawtonomy/sdk 出貨,不需編輯器即可執行。與選單不同,SDK 還允許單獨輸出兩種格式:

import { exporter, createSnapshot } from '@drawtonomy/sdk'
const snapshot = createSnapshot(shapes)
// 打包 zip(與選單相同):
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 參考

格式版本
OpenDRIVE1.8
OpenSCENARIO1.3

已支援: 從車道產生直線道路;將號誌、斑馬線、路口面片匯出為 OpenDRIVE 物件;每條路徑對應一輛車輛並依時序軌跡行駛;可立即重播的 esmini zip。

尚未支援: OpenDRIVE 路口、曲線幾何、多車道道路、道路高程;OpenSCENARIO 速度動作、換道、號誌邏輯、多主體互動,以及任何個別車輛的速度控制。