OpenDRIVE / OpenSCENARIO / esmini へエクスポート
drawtonomy で描いたシーンは ASAM
OpenDRIVE (.xodr)
の道路ネットワークと
OpenSCENARIO (.xosc)
のシナリオに変換され、esmini
でそのまま再生できる zip にまとめて出力されます。
変換は意図的に最小限の設計で、ASAM データモデルに素直に対応できる図形だけを対象にしています。このページでは「何が変換されるか」「エクスポートした車両は実際にどう動くか」「対象外の機能は何か」を正確に説明します。出力結果が過剰な約束をしないようにするためです。
全行程をデモ動画で確認
Section titled “全行程をデモ動画で確認”以下の動画はワンテイク撮影です。交差点を描いて、パスを描いて、フットプリントを生成し、esmini 用 zip をエクスポートして、出力した .xosc を esmini で再生するまでを一連で示しています。
エディタからエクスポート
Section titled “エディタからエクスポート”ASAM エクスポートの入口は1つだけです。drawtonomy に .xodr と .xosc の個別メニューは存在せず、両ファイルをまとめて zip に収めて出力します。

- シーンを描きます (レーン、交差点、車両、パスなど)。
- メニュー → Export →
.zip (esmini)を開きます。 - プロンプトが表示されたらベース名を入力します (デフォルトは
drawtonomy-<日付>)。 <name>.zipがダウンロードされ、中に<name>.xodr、<name>.xosc、そしてシナリオが参照する esmini の 3D モデルアセットが含まれます。
エクスポートの対象は現在のページ全体 — ASAM 出力には「選択範囲のみ」モードはありません。
esmini で再生
Section titled “esmini で再生”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レーン = 1独立した道路 |
| TrafficLight | 最近傍の road 上の <signal> | vehicle / pedestrian タイプのみ |
| Crosswalk | <object type="crosswalk"> | 道路に垂直に配置 |
| Polygon (3点以上) | <outline> 付きの <object type="patch"> | 交差点・エリアのビジュアル |
上記以外 — 車両、歩行者、独立した点、フリーラインストリング、テキスト、画像 — は .xodr に出力されません。
各 road の仕様:
- ジオメトリは直線のみ。 道路参照線はレーンの左右境界からサンプリングされ
<line>セグメントとして出力されます。arc、spiral、poly3は生成されません。 - 固定レーン構成。 すべての road に左レーン (
id=1)、センターレーン (id=0)、右レーン (id=-1) の3本がtype="driving"で配置されます。複数レーンや複数レーンセクションは非対応です。 - Road marks は
solid white 0.13 mにハードコードされています。 - ジャンクションなし。 すべての road は
junction="-1"を持ち、<junction>要素は一切生成されません。交差点の表現はポリゴンパッチ (ビジュアル) と、レーンのnext/prev接続 (先頭エントリのみ) から派生した predecessor/successor リンクで行います。 - 高度・スーパーエレベーションなし。
elevationProfileとlateralProfileは空で出力されます (平面の道路)。 - スケールは 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 “パスフットプリントから車両モーションへ”動的エクスポートの核心部分なので、正確に説明します。

パスは描いたラインストリング、フットプリントはそのパスに沿って並んだ車両のゴーストコピー (エディタに見える軌跡) です。エクスポート時の動作:
- 先頭フットプリント (最初の1つ) だけが移動する
<ScenarioObject>になります。後続のゴーストはキャンバス側のプレビューであり破棄されます — 出力されるのはパス全体を走行する1台の車両であり、車列にはなりません。 - パスのコントロールポイントが軌跡頂点になり、ワールド座標 (ENU) のメートル単位で記録されます。
- 各頂点に
timeが付与され、<FollowTrajectoryAction>内の<Trajectory>→<Polyline>の<Vertex time="…">として書き出されます。
速度は固定 (重要な制約)
Section titled “速度は固定 (重要な制約)”軌跡のタイミングは ハードコードで 10 m/s (≈ 36 km/h) で計算されます。drawtonomy の UI に速度フィールドはなく、エクスポータもデフォルト値を上書きしません。esmini では描いた内容に関係なく約 36 km/h が報告されます。速度を「設定する」のではなく、次に説明するフットプリントのレイアウトでタイミングを調整するのが基本的な操作モデルです。
2つのタイミングモード
Section titled “2つのタイミングモード”パスの “Variable positioning” トグルが ON か OFF かで、軌跡への時間配分が変わります:
- Uniform (トグル OFF) — フットプリントは等弧長の Interval ごとに配置され、時間は
距離 / 10 m/sで決まります。モーションは一定速度になります。Interval を変えると書き出される頂点数 (サンプル密度) が変わるだけで、パス形状と総所要時間は変わりません。 - Variable (トグル ON) — 各フットプリントはパス上の位置に固定され、総所要時間がフットプリント間で等時間スライスに分割されます。フットプリントを密集させた区間は遅く、広げた区間は速くなります。経路上の実効速度を変化させる唯一の手段です。
エディタ操作と .xosc への影響
Section titled “エディタ操作と .xosc への影響”| エディタでの操作 | エクスポートへの影響 |
|---|---|
| パスコントロールポイントを移動 | 軌跡頂点座標 + 総所要時間 (長さが変わり、速度は 10 m/s のまま) |
| Variable モードでフットプリントをドラッグ | そのフットプリントの正規化位置 → 頂点の time → その区間の実効速度 |
| Variable positioning をトグル | 等時間タイミングと等速タイミングの切り替え |
| Interval を変更 (Uniform モード) | 頂点数のみ変化 — 軌跡形状と速度は不変 |
| Anchor を変更 | フットプリントの描画オフセットのみ変化 — エクスポートされる軌跡には影響なし |
| 車両テンプレートを変更 | vehicleCategory、3D モデル、バウンディングボックスの高さ、パフォーマンスプリセット |
| 車両をリサイズ (w, h) | BoundingBox の寸法とアクスルジオメトリ |
| 車両を回転 | 初期ヘディング (軌跡がない車両のみ) |
| 車両を移動 | Init WorldPosition (軌跡がある場合は軌跡始点にスナップ) |
よくある質問に直接答えると: Variable モードでフットプリントをパス途中に移動させると、その区間が再タイミングされるのでエクスポートされる速度プランが変わります。Uniform モードでの移動や Anchor の変更は影響しません。
ハードコードされている値
Section titled “ハードコードされている値”スコープを正直に示すため、UI では変更できずに固定マップや定数から決まる値を列挙します: 車両カテゴリ / パフォーマンスプリセット、3D モデルのパス、カテゴリ別の車両高さ、アクスルジオメトリ (サイズから算出)、追従モード (position)、60 秒ストップトリガー、そして最も重要な 10 m/s の軌跡速度です。
プログラムからエクスポート
Section titled “プログラムからエクスポート”エクスポータは @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 リファレンス を参照してください。
出力されるバージョン
Section titled “出力されるバージョン”| 形式 | バージョン |
|---|---|
| OpenDRIVE | 1.8 |
| OpenSCENARIO | 1.3 |
対応状況まとめ
Section titled “対応状況まとめ”対応済み: レーンからの直線道路、OpenDRIVE オブジェクトとしての信号機・横断歩道・交差点パッチ、タイムスタンプ付き軌跡を走行する 1 台の車両、すぐに再生できる esmini zip。
未対応: OpenDRIVE のジャンクション、曲線ジオメトリ、複数レーン道路、道路高度、OpenSCENARIO の速度アクション、車線変更、信号ロジック、マルチエージェントインタラクション、車両ごとの速度制御。
- エクスポータアーキテクチャ — スナップショットからファイルまでのパイプラインの動作。
- ターゲット形式を追加する — CARLA、SUMO、Unity など、新しい出力先を組み込む。