コンテンツにスキップ

CommonRoad シナリオ作成・エクスポートと planner 結果の再生

シナリオを描く、あるいは手元のファイルを開く。CommonRoad XML として書き出す。 自作の motion planner で解く。その結果を drawtonomy で再生し、公式 checker の 判定をバッジで見る。

CommonRoad はミュンヘン工科大学が公開している モーションプランニング研究のベンチマーク形式です。lanelet で表した道路網、 周囲の交通を記録した軌跡、そして ego に解かせる planning problem を持ちます。 drawtonomy はその流れの両端、つまり作る側と見る側です。

GitHub 上の cut-in .xosc をそのまま開き、ego とゴールレーンを指定して CommonRoad XML を書き出し、commonroad-reactive-planner に解かせて、その結果を drawtonomy で再生するまで。

どの行も行き着く先は同じです。planner が読む CommonRoad XML、再生できる solution、そしてバッジに載る判定です。

出発点やること得られるもの
自分で描いたシナリオレーン・車両・初速を置き、ego に印を付けてゴールレーンを選ぶlanelet と dynamicObstacle の軌跡と planningProblem を持つ CommonRoad 2020a シナリオ
手元の OpenSCENARIO ファイル.xosc.xodr をドロップする、または ?open= で GitHub から直接開く同じ書き出しが、既に持っているシナリオから得られる。手順は シナリオを書き出す
CommonRoad ベンチマークシナリオ.xml をキャンバスにドロップする編集できるキャンバス上のシナリオ。drawtonomy が描かない要素はそのまま持ち越されるので、編集せずに再エクスポートすれば元のファイルに戻る

solution ができたあとの再生はどれも同じです。solution.xml をドロップすると ego が planner の軌跡をたどり、自分が描いた ego はゴーストとして残ります。 隣に .verdict.json を置けば run バッジが RUN PASSRUN FAIL で終わり、 tooltip とトーストに Checker PASS 4/4Checker FAIL 2/4、通らなかった 検査・関係した障害物・時刻範囲が tooltip とタイムラインに出ます。

  • motion planner を開発していて、ベンチマークコーパス以外のシナリオが欲しい自作 planner をつなぐpip install から始まり、同じシーンで naive planner が FAIL、IDM planner が PASS になるところまで通します。
  • OpenSCENARIO 資産があり、それを planner のテストに使いたい → まず シナリオを書き出す、 続けて 自作 planner をつなぐ
  • 公式の判定と、その根拠を証拠として残したいVerdict リファレンス に 4 つの検査・サイドカーの形式・バッジの読み方があります。

再生前の drawtonomy のキャンバス。右のレーンに 50 m のゴール区間が薄い黄土色でハイライトされ、Ego の Attributes パネルでは「Ego (external control)」がチェックされ Goal 行が「Lane 10」とその横の 62.1 から 112.1 m と読める

再生前: Ego の印を付けた車両と、クリック 1 回で置いた 50 m のゴール区間。 これが planning problem のすべて。

t = 12.9 s の drawtonomy 画面。反応しない ego が割り込んできた車両と重なっており、transport バーに RUN FAIL のバッジが点いている

描いたままのシナリオ: 108 km/h で走る反応しない ego が t = 12.9 s で割り込みに 出会い、バッジは RUN FAIL。これが planner に解かせる問題。

Export メニュー。.xml (CommonRoad) と .xml (CommonRoad solution) が Lanelet2 や OpenDRIVE と並んでいる

Export で CommonRoad シナリオ XML を書き出す。自分が描いた ego を参照解として 書き出す項目も並んでいる。

同じファイルを commonroad-io の公式レンダラで描画したもの。灰色の lanelet の上でオレンジの ego が青い障害物と重なり、その先に点線の未来軌跡が伸びている

書き出したファイルを planner なしで commonroad-io が再生したところ。描いた ままの ego は同じ 12.9 s で割り込みに当たる。

commonroad-reactive-planner の ego が割り込み車両の左を抜けていく様子を公式レンダラで描画したもの

reactive planner が解いてゴールまで走るところ。障害物衝突・道路境界・ ゴール到達・運動学的実現可能性のすべてが PASS。

planner の solution を drawtonomy で再生したところ。ego が緑の計画軌跡に沿って割り込み車両の左を抜けている

drawtonomy に戻ったところ: planner の ego (白) が緑の計画軌跡に沿って割り込みの 左を抜け、最後にバッジは RUN PASS になる。

シナリオ・solution・判定を GitHub リポジトリに置けば、URL 1 本でこの 3 つが 開きます。インストールも拡張機能も要りません。シナリオの GitHub ファイル URL を ?open= に続け、&solution=&verdict= を足します (シナリオファイルからの相対パスでも、完全な GitHub URL でも構いません)。 必須なのは ?open= だけです。同じ 3 つのパラメータは drawtonomy-cr open が配信しているローカルフォルダに対しても使えます。

https://drawtonomy.com/?open=https://github.com/acme/scenarios/blob/main/cut-in/ZAM_CutIn-1_1_T-1.xml
&solution=ZAM_CutIn-1_1_T-1_solution.xml
&verdict=ZAM_CutIn-1_1_T-1_solution.verdict.json

OpenSCENARIO を CommonRoad に変換できますか

Section titled “OpenSCENARIO を CommonRoad に変換できますか”

できます。.xosc とその .xodr を開き、ego に印を付け、ゴールレーンを選び、 Export ▸ .xml (CommonRoad) を選びます。道路網は lanelet に、他の各 アクターは軌跡付きの dynamicObstacle に、ego は planningProblem に なります。手順は シナリオを書き出す

CommonRoad のどのバージョンに対応していますか

Section titled “CommonRoad のどのバージョンに対応していますか”

シナリオファイル・solution ファイルとも CommonRoad XML 2020a です。出力は 公式 XSD で検証済みで、commonroad-io・drivability checker・ commonroad-reactive-planner がそのまま読み込めます。

drawtonomy は公式の drivability checker を実行しますか

Section titled “drawtonomy は公式の drivability checker を実行しますか”

しません。drawtonomy はシナリオを書き出して solution を再生するだけで、合否は commonroad-drivability-checker が決めます。drawtonomy-cr verdict コマンドが 公式の 4 検査を実行し、drawtonomy が RUN バッジに表示する小さな JSON サイドカーを 書き出します。詳細は Verdict リファレンス

不要です。必須なのは solution.xml だけです。 planning trace は任意で、 走った軌跡に加えて「各再計画サイクルで planner が何をするつもりだったか」を 足します。

エディタ・エクスポート・再生はどのブラウザでも動きます。Linux x86_64 が要るのは 公式 checker だけです (commonroad-drivability-checker が wheel を出しているのが その環境だけのため)。checker が無い場合、verdict は exit code 3 と 1 行の説明を 返して終わり、それ以外はすべて動きます。

CommonRoad ファイルを開くのに何かインストールが要りますか

Section titled “CommonRoad ファイルを開くのに何かインストールが要りますか”

要りません。drawtonomy.com がブラウザで CommonRoad の .xml を読みます。pip install drawtonomy-commonroad が要るのは verdict の ステップと drawtonomy-cr open のループだけです。

自分の車両モデルを使えますか

Section titled “自分の車両モデルを使えますか”

使えます。solution には checker が判定に使う CommonRoad の vehicle model (KS, PM, …) と vehicle type (BMW_320i など) を宣言します。 planning trace にも同じ車体を 宣言すれば、drawtonomy は checker が見たものと同じ形で描画します。

形式CommonRoad XML 2020a (シナリオ + solution)
パッケージpip install drawtonomy-commonroad (PyPI), Python 3.11+
検証済み公式 XSD · commonroad-io の読み書き往復 · drivability checker · commonroad-reactive-planner · 公式ベンチマークコーパスの手作りシナリオ 635 件でのインポート → 再エクスポート往復
ego / ゴールego を external control として印を付け、キャンバス上でゴールレーンを選ぶ
インポートCommonRoad シナリオ .xml (2020a): lanelet、障害物、planning problem、ゴールレーン。非対応要素は再エクスポートまで持ち越し
再生できる入力CommonRoad solution.xml · checker の判定 (.verdict.json) · planning trace · esmini の .csv ログ · drawtonomy の録画
共有?open=<GitHub ファイル URL>&solution= / &verdict=
描画対象外交通標識・信号・交差点はインポートと再エクスポートで持ち越されるが、キャンバス上では編集できない
利用drawtonomy.com 上で動作、インストール不要

合わせたい planner のワークフローや、うまく開けないベンチマークシナリオが あれば お問い合わせ ください。

関連: .xosc を開いて再生するエクスポート形式drawtonomy for GitHub