CommonRoad シナリオを書き出す
drawtonomy の CommonRoad 対応でできることは 3 つあり、いずれも同じキャンバス上で 完結します。
| 何ができるか | 入口 | |
|---|---|---|
| 描いて書き出す | 手描き・AI 生成・開いた OpenSCENARIO ファイルのどのシーンも、lanelet 網・dynamicObstacle の軌跡・planningProblem を持つ CommonRoad 2020a シナリオになります | Export ▸ .xml (CommonRoad) |
| 読み込んで往復させる | CommonRoad .xml を開くと lanelet の id と接続関係を保ったままキャンバスに載ります。drawtonomy が描かない要素はそのまま持ち越されるので、無編集で書き出せば原文どおりに戻ります | キャンバスにドロップ、または Import… |
| 再生して判定する | planner の solution.xml が ego として再生され、公式 checker の判定が再生バッジに載ります | solution.xml (+ .verdict.json) をドロップ、または drawtonomy-cr open |
このページで扱うのは 1 行目、CommonRoad の書き出しがファイルを書く前に何を必要と するかです。
2 つの前提
Section titled “2 つの前提”planningProblem を持たない CommonRoad シナリオには、planner が解くべきものが
どこにもありません。そのためエクスポートが求めるのはちょうど 2 つで、揃うまでは
1 行の理由を出して止まります。
- ego: 外部制御される車両を 1 台指定します。これが planning problem の初期状態 になります
- ゴールレーン: ego が到達すべき lanelet。
<goalState><position>になります
これ以外 (道路網、他車、その軌跡) はすべて描いたものから導出されます。
1. ego に印を付ける
Section titled “1. ego に印を付ける”車両に印が付くまで、その事実は再生状態と同じ場所 (transport 行) に出ています。

No ego marked。ホバーすると直し方が出ます。車両を選んで Attributes パネルの 「Ego (external control)」を入れる。
車両を選択し、Attributes パネル上部のチェックボックスを入れます。

チェックボックス 1 つ。この車両を「被試験対象 (SUT)」= drawtonomy ではなく planner (または外部シミュレータ) が動かす actor として指定します。
この印が、あらゆる場面での「ego」を決めます。エクスポート時の planning problem に なるのもこの車両で、読み戻した解が適用されるのもこの車両です。印を持てるのは 1 台だけです。
2. ゴールレーンを選ぶ
Section titled “2. ゴールレーンを選ぶ”チェックボックスの下の COMMONROAD グループがゴールを持ちます。Pick lane を押すと、 キャンバスは「ゴールを始めたいレーン上の位置」のクリックを待ちます。

Pick lane でキャンバスが待機状態になります。Esc ならゴールを変えずに中断します。
レーンをクリックすると、その地点から前方 50 m の区間がゴール領域になり、キャンバス上で ハイライトされ、パネルに名前が出ます。

ゴール区間。道路上でハイライトされ、パネルにはレーン名が出ます。レーン名の横の 2 つの数値がレーン沿いの始点と終点 (メートル) です。レーン名はそのまま別のレーンを 選び直すボタンで、× はゴールを消します。
ゴールについて知っておくとよいことが 2 つあります。
- レーンに沿った区間は伸縮できます。 Pick lane はクリックした地点から 50 m を置きます。
ハイライトされた帯の両端のハンドルをドラッグするか、2 つの欄に始点と終点のメートルを
打ち込みます (Enter か欄を離れると反映され、undo 1 回で戻ります)。どちらで直しても
もう一方が追従します。ゴールは lanelet 全長ではなくその区間 (
s0–s1) です。 値はレーンの中に収まり、始点と終点は 2 m 以上離れます。区間をレーン全体 (0 から レーン長まで) にすると区間指定は消え、50 m より短いレーンは最初からレーン全体が ゴールになります。 - ゴール速度区間は任意です。 ゴールレーンの下の Goal speed limit を入れると、
エクスポートは
<velocity><intervalStart>0</intervalStart><intervalEnd>v</intervalEnd>を 書きます。これが「ゴールに v 以下の速度で 到達する」の表し方です (停止まで 求めるなら v を 0 にします)。
再生中、ego はゴールに向かって走りません。ゴールは planner に渡す制約であって 経路ではありません。
既存の OpenSCENARIO を開いて CommonRoad として書き出す
Section titled “既存の OpenSCENARIO を開いて CommonRoad として書き出す”シーンを描く必要はありません。既に持っている .xosc も、同じ 2 つの前提を通せば
CommonRoad シナリオになります。
-
OpenSCENARIO ファイルを開く。
.xoscと.xodrを一緒にキャンバスへ ドロップするか、Import… で.xoscを選び、続けて.xodrを指定します。 道路網はレーンに、各アクターは軌跡を持つ車両になります。詳しい手順は .xosc を開いて再生する。 -
GitHub から直接開くこともできます。 ダウンロード不要で、ファイルの GitHub URL を
?open=に続けるだけです。隣にある.xodrとカタログはその URL からの相対で解決されます。https://drawtonomy.com/?open=https://github.com/esmini/esmini/blob/master/resources/xosc/cut-in.xosc -
一度再生する。 軌跡は再生の記録から作られるので、書き出しには 1 回の 再生が必要です。無い場合は他車の初期状態だけが書かれ、その旨が表示されます。
-
ego に印を付け、ゴールレーンを選ぶ (上記のとおり)。OpenSCENARIO の ego は そのままでは CommonRoad の planning problem になりません。CommonRoad には ゴールも必要で、それがどのレーンかを知っているのは作った人だけです。
-
Export ▸
.xml (CommonRoad)。
引き継がれるもの: lanelet としての道路網、各アクターが走った軌跡を持つ
dynamicObstacle、ego の初期状態、選んだゴールレーン。引き継がれないもの:
OpenSCENARIO の storyboard そのもの。CommonRoad にはトリガーもアクションも
無いので、planner が受け取るのはストーリーそのものではなく、それを
dt = 0.1 s でサンプリングした 結果 です。
途中で現れる / 消える障害物
Section titled “途中で現れる / 消える障害物”シーン上の他の車両はすべて、記録済み軌跡を持つ dynamicObstacle になります。
ある actor がシナリオの一部の時間しか存在しない場合 (ストーリーボードの
Add Entity で t = 4 s に登場し、Delete Entity で消える)、エクスポートは
その区間をそのまま障害物の [initial, final] タイムステップとして書き、区間外では
その障害物は存在しません。再生も同じで、追加前と削除後はキャンバスに居ません。
ファイルを読む planner からは「終端後もずっと走り続ける障害物」ではなく、
終わりのある障害物として見えます。
lanelet の接続関係
Section titled “lanelet の接続関係”描いたレーン 1 本が、長さにかかわらず lanelet 1 つになります。1 本のレーンが短い
lanelet の連なりに分割されることはありません。横並びのレーンには
adjacentLeft / adjacentRight が書かれますが、successor / predecessor が
書かれるのは、あるレーンの終端が次のレーンの始端に実際に接している場合
(境界の左右両方の角が 5 cm 以内) だけです。したがって並走する通し車線だけの
シーンは、隣接関係はあるが successor も predecessor も 1 つも無い
ファイルとして書き出されます。
直線の lanelet は頂点が 2 個しかありません
Section titled “直線の lanelet は頂点が 2 個しかありません”境界は、描いたレーンが持つ点の数だけで書き出されます。直線は 2 点で足りるので、
leftBound / rightBound / centerVertices はいずれも、lanelet がどれだけ長くても
ちょうど 2 頂点になります。一定間隔に点を水増しすることはしません。120 m の直線は
120 m 離れた 2 頂点です。
エクスポート
Section titled “エクスポート”CommonRoad の 2 項目は同じ Export サブメニューにあります。

| 項目 | 何を書き出すか |
|---|---|
.xml (CommonRoad) | シナリオ。lanelet 網、dynamicObstacle の軌跡、ego の planningProblem。planner が読むのはこのファイルです。 |
.xml (CommonRoad solution) | 解。drawtonomy 自身が記録した ego の軌跡を、公式の CommonRoadSolution 形式で書きます。参照解として、また「planner のものではない軌跡を checker が何と言うか」を見る手段として使えます。 |
エクスポートを止めるものは 2 つあり、いずれも直す場所を 1 行で言います。
- ego なし / ゴールレーンなし。 上の 2 つの前提です。
Play the scenario first. The solution needs a recorded ego trajectory.solution のエクスポート限定。1 度も再生していなければ書くものがありません。 1 回再生してから書き出します。
録画なしでもシナリオのエクスポート自体は通りますが、そのことを言います
(Play the scenario first to include NPC trajectories)。他車は軌跡なしの初期状態
だけになります。完全なファイルが欲しければ 1 回再生してから書き出してください。
- 自作 planner をつなぐ: このファイルから、解の再生と判定までの 1 周。
- Verdict リファレンス: 公式 checker が何を検査し、その答えをどう読むか。
- CommonRoad 概要: 対応範囲と現在の状況。