コンテンツにスキップ

OpenDRIVE / OpenSCENARIO / esmini へエクスポート

drawtonomy で描いたシーンは ASAM OpenDRIVE (.xodr) の道路ネットワークと OpenSCENARIO (.xosc) のシナリオに変換され、esmini でそのまま再生できる zip にまとめて出力されます。

変換は意図的に最小限の設計で、ASAM データモデルに素直に対応できる図形だけを対象にしています。このページでは「何が変換されるか」「エクスポートした車両は実際にどう動くか」「対象外の機能は何か」を正確に説明します。出力結果が過剰な約束をしないようにするためです。

以下の動画はワンテイク撮影です。交差点を描いて、パスを描いて、フットプリントを生成し、esmini 用 zip をエクスポートして、出力した .xosc を esmini で再生するまでを一連で示しています。

ワンテイク: 交差点を描き、パスを描き、フットプリントを生成し、esmini 用 zip をエクスポート、そして esmini で .xosc を再生。

ASAM エクスポートの入口は1つだけです。drawtonomy に .xodr.xosc の個別メニューは存在せず、両ファイルをまとめて zip に収めて出力します。

Export サブメニューで .zip (esmini) が選択されている様子

  1. シーンを描きます (レーン、交差点、車両、パスなど)。
  2. メニュー → Export → .zip (esmini) を開きます。
  3. プロンプトが表示されたらベース名を入力します (デフォルトは drawtonomy-<日付>)。
  4. <name>.zip がダウンロードされ、中に <name>.xodr<name>.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 そのものです。

OpenDRIVE (.xodr) に変換されるもの

Section titled “OpenDRIVE (.xodr) に変換されるもの”
drawtonomy の図形OpenDRIVE 要素備考
Lane<road> 1本1レーン = 1独立した道路
TrafficLight最近傍の road 上の <signal>vehicle / pedestrian タイプのみ
Crosswalk<object type="crosswalk">道路に垂直に配置
Polygon (3点以上)<outline> 付きの <object type="patch">交差点・エリアのビジュアル

上記以外 — 車両、歩行者、独立した点、フリーラインストリング、テキスト、画像 — は .xodr に出力されません

各 road の仕様:

  • ジオメトリは直線のみ。 道路参照線はレーンの左右境界からサンプリングされ <line> セグメントとして出力されます。arcspiralpoly3 は生成されません。
  • 固定レーン構成。 すべての road に左レーン (id=1)、センターレーン (id=0)、右レーン (id=-1) の3本が type="driving" で配置されます。複数レーンや複数レーンセクションは非対応です。
  • Road markssolid white 0.13 m にハードコードされています。
  • ジャンクションなし。 すべての road は junction="-1" を持ち、<junction> 要素は一切生成されません。交差点の表現はポリゴンパッチ (ビジュアル) と、レーンの next / prev 接続 (先頭エントリのみ) から派生した predecessor/successor リンクで行います。
  • 高度・スーパーエレベーションなし。 elevationProfilelateralProfile は空で出力されます (平面の道路)。
  • スケールは 16.67 px/m 固定、地理的原点は 0

OpenSCENARIO (.xosc) に変換されるもの

Section titled “OpenSCENARIO (.xosc) に変換されるもの”
drawtonomy の図形OpenSCENARIO 要素
Vehicle<ScenarioObject> (<Vehicle> または <Pedestrian>)
パスフットプリント (先頭車両)<FollowTrajectoryAction>

「歩行者」はテンプレート名が pedestrian/walk パターンに一致する Vehicle 図形で、<Pedestrian> として出力されます。レーン、横断歩道、信号機、フリーラインストリングは .xosc出力されません

エクスポートされるシナリオは意図的にミニマルな構成:

  • 動的ふるまいは FollowTrajectoryAction (タイムスタンプ付きポリライン) のみです。速度アクション、車線変更、信号応答、衝突回避、インタラクション条件は含まれません。
  • 各移動エンティティは SimulationTime ≥ 0 から開始し、シナリオには StopTrigger が 60 秒で設定されます。

パスフットプリントから車両モーションへ

Section titled “パスフットプリントから車両モーションへ”

動的エクスポートの核心部分なので、正確に説明します。

フットプリントパネル: Variable positioning、Interval、Anchor の説明

パスは描いたラインストリング、フットプリントはそのパスに沿って並んだ車両のゴーストコピー (エディタに見える軌跡) です。エクスポート時の動作:

  1. 先頭フットプリント (最初の1つ) だけが移動する <ScenarioObject> になります。後続のゴーストはキャンバス側のプレビューであり破棄されます — 出力されるのはパス全体を走行する1台の車両であり、車列にはなりません。
  2. パスのコントロールポイントが軌跡頂点になり、ワールド座標 (ENU) のメートル単位で記録されます。
  3. 各頂点に time が付与され、<FollowTrajectoryAction> 内の <Trajectory><Polyline><Vertex time="…"> として書き出されます。

軌跡のタイミングは ハードコードで 10 m/s (≈ 36 km/h) で計算されます。drawtonomy の UI に速度フィールドはなく、エクスポータもデフォルト値を上書きしません。esmini では描いた内容に関係なく約 36 km/h が報告されます。速度を「設定する」のではなく、次に説明するフットプリントのレイアウトでタイミングを調整するのが基本的な操作モデルです。

パスの “Variable positioning” トグルが ON か OFF かで、軌跡への時間配分が変わります:

  • 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 ではメニューと異なり、2つのファイルを個別に出力することもできます。

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 全体と拡張ポイントについては Exporter SDK リファレンス を参照してください。

形式バージョン
OpenDRIVE1.8
OpenSCENARIO1.3

対応済み: レーンからの直線道路、OpenDRIVE オブジェクトとしての信号機・横断歩道・交差点パッチ、タイムスタンプ付き軌跡を走行する 1 台の車両、すぐに再生できる esmini zip。

未対応: OpenDRIVE のジャンクション、曲線ジオメトリ、複数レーン道路、道路高度、OpenSCENARIO の速度アクション、車線変更、信号ロジック、マルチエージェントインタラクション、車両ごとの速度制御。