コンテンツにスキップ

OpenSCENARIO とは

OpenSCENARIOASAM が策定するオープン標準で、自車や他の交通参加者が時間とともにどう振る舞うかを記述するためのフォーマットです。自動運転システムのシナリオベーステストにおける事実上の交換フォーマットとして広く使われています。

同じ「OpenSCENARIO」という名前を共有していますが、中身はほぼ独立した 2 つの仕様があります。

  • OpenSCENARIO 1.x — XML ベース。長年使われており安定しています。現時点で実運用のターゲットになるのは 1.3 リビジョン。
  • OpenSCENARIO 2.0 / DSL — 抽象的・パラメトリック・確率的なシナリオを書ける専用言語。新しい仕様で、対応ツールが着実に増えています。

両者は互換ではなく、シミュレータや SOTIF / ISO 21448 のテスト基盤で実際に消費されるのは 1.x が中心です。

OpenSCENARIO 1.x のファイルは、おおむね次の構成になっています。

  • RoadNetwork — 通常は OpenDRIVE.xodr を参照。必要に応じて .osgb のようなシーングラフファイルも添える。
  • Entities — 車両、歩行者、その他の登場物。
  • Storyboard — 時系列に並んだ Act、Maneuver、Event。
  • Init — 開始時の位置・速度や、パラメータの初期値。

小さなシナリオであれば XML を直接書いても読みやすいのですが、バリエーションが増えてくると XML の管理コストが急に上がります。ここを楽にするための作成ツールや DSL がいくつも生まれています。

実際の現場では、以下を組み合わせることが多いです。

  • XML を手書き。小さなチームでの ground truth fixture などに向く。
  • DSL やコード生成OpenSCENARIO 2.0 DSLScenic、社内のスクリプトなどから XML を出力する方法。
  • Python ライブラリscenariogeneration (旧 pyoscx / pyodrx) は OpenSCENARIO V1.0 〜 V1.3.1 の大半をカバーするプログラマティックな API を提供。
  • シミュレータ付属のシナリオエンジンCARLA ScenarioRunner は CARLA 用のシナリオ実行エンジンで、Python インターフェースと OpenSCENARIO 1.0 / 2.0 をサポート。
  • GUI ベースの作成ツールMathWorks RoadRunner (XML / DSL 両対応)、Truevision Designer (OpenDRIVE 中心)、Blender Driving Scenario Creator (Blender アドオン)、そして drawtonomy (ブラウザホワイトボード + 部分的なエクスポート)。

実運用では「シナリオのロジックは Python ライブラリや DSL で書き、道路ネットワークは GUI ツールで作る」といった分担になることが多いです。

drawtonomy はブラウザ上で動く 2D ホワイトボードで、OpenSCENARIO 1.3 と OpenDRIVE 1.8 の 一部のみ をエクスポートできます。エクスポーターのドキュメント によれば、以下のような使い方ができます。

  • レーン、交差点、車両、歩行者、信号、路面標示を 2D 俯瞰のキャンバスに配置できる。
  • .xosc + .xodr + run.sh をひとまとめにした zip を書き出し、esmini で簡単なシーンを再生できる。

ただし、エクスポーターがカバーするのは仕様の一部です。SDK の roadmap にも書かれていますが、次のような項目には対応していません。

  • OpenDRIVE の <junction> 要素
  • 標識を OpenDRIVE の <signal> として出力すること
  • 加減速プロファイル、停止・滞留イベント、信号と連動した経路、車線変更アクション、複雑な Storyboard
  • 条件付きトリガ、パラメータ走査、カスタムコントローラ、ML ベースのコントローラ

そのため、drawtonomy の OpenSCENARIO 出力は「下書き」と考えるのが妥当です。手書き XML のたたき台にしたり、シナリオの説明用の図として使ったりするのに向いていて、本格的なシナリオ作成ツールとして使うものではありません。