OpenSCENARIO とは
OpenSCENARIO は ASAM が策定するオープン標準で、自車や他の交通参加者が時間とともにどう振る舞うかを記述するためのフォーマットです。シミュレータがそのまま再生できる形になっており、自動運転システムのシナリオベーステストにおける事実上の交換フォーマットとして広く使われています。
2 つの系統
Section titled “2 つの系統”同じ「OpenSCENARIO」という名前を共有していますが、中身はほぼ独立した 2 つの仕様があります。
- OpenSCENARIO 1.x — XML ベース。長年使われており安定しています。現時点でほとんどのツールが実運用のターゲットにしているのは 1.3 リビジョン。
- OpenSCENARIO 2.0 / DSL — 抽象的・パラメトリック・確率的なシナリオを書ける専用言語。新しい仕様で、対応ツールが着実に増えています。
両者に互換性はなく、シミュレータや SOTIF / ISO 21448 のテスト基盤が実際に消費しているのは今も 1.x が中心です。
1.x ファイルの中身
Section titled “1.x ファイルの中身”OpenSCENARIO 1.x のファイルは、おおむね次の構成になっています。
- RoadNetwork — 通常は OpenDRIVE の
.xodrを参照します。必要に応じて.osgbのようなシーングラフファイルも添えられます。 - Entities — 車両、歩行者、その他の登場物。
- Storyboard — 時系列に並んだ Act、Maneuver、Event。
- Init — 開始時の位置・速度や、パラメータの初期値。
短いシナリオ 1 本であれば XML を直接書いても十分読みやすいのですが、バリエーションが数十本規模に増えると途端に管理コストが跳ね上がります。ここを楽にするために、作成ツールや DSL がいくつも生まれています。
実際の現場では、以下のうち複数を組み合わせることが多いです。
- XML を手書き。 小さなチームや ground truth fixture でよく使われます。
- DSL やコード生成。 OpenSCENARIO 2.0 DSL や Scenic、社内製のジェネレータなどが、より高レベルな記述から XML を出力します。
- Python ライブラリ。 scenariogeneration (旧
pyoscx/pyodrx) は OpenSCENARIO V1.0 〜 V1.3.1 をカバーするプログラマティックな API を提供します。 - シミュレータ付属のシナリオエンジン。 CARLA ScenarioRunner は CARLA 用にシナリオを定義・実行するエンジンで、Python と OpenSCENARIO 1.0 / 2.0 に対応しています。
- ビジュアルエディタ。 MathWorks RoadRunner (XML / DSL 双方を出力)、Truevision Designer (OpenDRIVE 中心)、Blender Driving Scenario Creator (Blender アドオン)、そして drawtonomy (OpenSCENARIO 1.x の Storyboard 全体をブラウザ上で作成し、esmini-WASM でそのまま実行) があります。
実運用のシナリオ作成では、このうち複数を組み合わせるのが一般的です。シナリオのロジック自体は Python ライブラリや DSL で書き、道路ネットワークはビジュアルエディタで作る、といった分担がよく見られます。
drawtonomy の位置づけ
Section titled “drawtonomy の位置づけ”drawtonomy はブラウザで動く OpenSCENARIO 1.x の作成・実行環境です。描いたシーンがそのまま実行可能な Storyboard になる、ホワイトボードのようなツールだと考えてください。OpenSCENARIO 1.x をインポートでき、OpenSCENARIO 1.0〜1.2 (1.3 は近日対応予定) と OpenDRIVE 1.8 をエクスポートできます。
- レーン、交差点、車両、歩行者、信号、路面標示を 2D 俯瞰のキャンバスに配置できます。
- Phase・Event・35 種類の Action・19 種類の Trigger 条件 を使って Storyboard をビジュアルに組み立て、WebAssembly にコンパイルした esmini 上でブラウザ内でそのまま再生できます。2D キャンバスに加えて、Chase / 俯瞰 / ドライバー視点を切り替えられる 3D プレビューも備えています。
- 既存の
.xosc+.xodrのペアをインポートして編集したり、逆にそのペアをエクスポートしてネイティブの esmini で実行したりできます。 - 自然言語の説明からシナリオを生成できます。drawtonomy が Storyboard の下書きを作り、4 段階の検証ゲート (実際の esmini 実行を含む) でチェックしたうえでキャンバスに反映します。
エクスポーターは現在、OpenDRIVE の <junction> / <connection> / <laneLink> 構造と <signal> エントリの出力に対応しています。これはもうロードマップ項目ではありません。ただし精度には差があり、そこが重要なポイントです。インポートした .xodr のうち未編集のまま持ち越された道路は、元の交差点トポロジーを高い忠実度で再現します。一方、ゼロから描いたレーンから合成した交差点はまだ十分な信頼性がありません。パラメータ走査 (parameter sweep) と、カスタムまたは ML ベースのコントローラは依然として未対応です。
大量にパラメータ化されたシナリオ群 (シナリオフリート) の生成は、今も DSL や Python ライブラリが得意とする領域で、これはビジュアルエディタの対象外のままです。drawtonomy が加えるのは、アイデア (あるいは自然言語のプロンプト) から実行可能でレビューしやすいシナリオまでを一気に作る、素早いビジュアルな経路です。
- シナリオエディタ — Phase・Event・Action・Trigger をブラウザ上で作成し、実行します。
- はじめてのシナリオ作成 — 空のキャンバスから車線変更シナリオを作る手順。
- RoadRunner と OpenSCENARIO の用語対応表 — 2 つの語彙の対応表。
- OpenDRIVE とは
- esmini とは
- 比較: drawtonomy と手書き OpenSCENARIO XML