drawtonomy vs esmini — ブラウザシェルとネイティブランタイムの使い分け
esmini
Section titled “esmini”esmini は ASAM OpenSCENARIO 1.x のオープンソースリファレンスシミュレータです。スウェーデンの ADAS コミュニティで長年にわたって開発・公開されており、OpenSCENARIO 1.x の実行エンジンとして現在もっとも広く使われています。drawtonomy をはじめ、OpenSCENARIO に対応するほぼすべてのオーサリングツールが、esmini を「検証の基準」として扱っています。esmini のメンテナーたちが高品質なオープンランタイムを何年もかけて育ててきた仕事に対して、drawtonomy チームは心からの敬意を持っています。
esmini がカバーする領域:
- OpenSCENARIO 1.x Storyboard のシミュレーション: Act、Sequence、Maneuver、条件付きトリガ、パラメータ宣言、コントローラ。
- OpenSceneGraph による 3D ビューア、2D 俯瞰ビュー、CI 向けヘッドレスモード。
- C++ / Python / JavaScript (WebAssembly) API。大規模シミュレータ、バリデータ、学習パイプラインへの組み込みが可能。
- 車両モデルを内蔵しているため、標準的な
.xosc+.xodrだけでシミュレーションを動かせます (.osgbアセットは不要)。 - 小さく高速で予測可能なバイナリ。シナリオのリグレッションスイートにも収まりやすい構成です。
条件付きトリガ、パラメータスイープ、カスタムコントローラ、フル Storyboard の実行など、OpenSCENARIO 1.x のシミュレーションセマンティクスが必要なら、esmini がコミュニティの標準的な選択肢です。
esmini は Mozilla Public License 2.0 のオープンソースソフトウェアです。drawtonomy がブラウザベースの OpenSCENARIO シミュレータを提供できているのは、この MPL-2.0 というライセンスを選んでくれた esmini チームのおかげです。オープンな選択をしてくれたことに、drawtonomy は深く感謝しています。drawtonomy は、バンドルしている esmini-WASM バイナリについて MPL-2.0 の表示義務とファイルレベルコピーレフト要件を遵守しています。
drawtonomy と esmini の関係
Section titled “drawtonomy と esmini の関係”drawtonomy は自動運転シナリオを扱う無料のブラウザホワイトボードです。そのブラウザ内シミュレータは esmini を WebAssembly にコンパイルした上に構築されています。.xosc をキャンバスにドロップしたとき、Storyboard を実行するシミュレーションコアは esmini 本体 そのものであり、パーサ、Storyboard セマンティクス、車両ステートもすべて esmini と同一です。シミュレーションの正確さは drawtonomy の成果ではなく、esmini とそのメンテナーに帰するものです。
drawtonomy が追加するのは、そのランタイムを包むキャンバスネイティブのシェルです。フレーム精度のシーク、キャンバスが Ego 車両に追従して動く Follow Ego カメラ、Path / Footprint のゴーストトレイル、ワンクリックの .webm エクスポート、そしてシナリオを描くのと同じキャンバスが一体になっています。drawtonomy が貢献しているのはこの層だけであり、esmini のフォークでも再実装でもありません。
両者の使い分けをまとめると:
| 機能 | esmini (ネイティブ) | drawtonomy (esmini-WASM を組み込んだブラウザシミュレータ) |
|---|---|---|
| OpenSCENARIO 1.x Storyboard の実行 (Act・トリガ・条件・コントローラ) | ✅ esmini ランタイム | ✅ esmini ランタイム (同一エンジン・esmini 本体の WebAssembly ビルド) |
| OpenSceneGraph 3D ビューア | ✅ 内蔵 | ❌ 2D キャンバスのみ |
| CI / リグレッションスイープ向けヘッドレスモード | ✅ ヘッドレスフラグ | ❌ ブラウザシェル |
| C++ / Python API | ✅ | ❌ JS のみ (esmini-WASM) |
| フレーム精度のシークとステップ移動 | ビューア依存 | ✅ スクラバー + 矢印キー |
| Ego 追従カメラ (Follow Ego — キャンバスが Ego についていく) | フラグで設定可能 | ✅ ワントグル |
| ゴーストトレイル (Path / Footprint) | 非内蔵 | ✅ インターバル設定可能 |
スライド / PR / SNS 用に .webm で録画 | 外部スクリーンキャプチャ | ✅ アプリ内エクスポート・アスペクト比プリセット付き |
| インストール | C++ ビルドまたはリリースバイナリ | ❌ モダンブラウザで即起動 |
| センサーシミュレーション (カメラ / LiDAR / レーダー) | ❌ | ❌ |
この 2 つのフローはエンドツーエンドでつながります。drawtonomy の OpenSCENARIO バンドルエクスポートは .xosc、.xodr、および run.sh を含む zip を出力します。run.sh をローカルの esmini で実行するだけで同じシナリオが動きます。標準 (OpenSCENARIO + OpenDRIVE) も、シミュレーションコアも共通で、シェルだけが異なります。
ブラウザシェルを使う理由
Section titled “ブラウザシェルを使う理由”ランタイムが同じ esmini であるなら、なぜブラウザシェルが必要なのでしょうか。
- CI の失敗をトリアージする — 手元のマシン、借りたデスクトップ、スマートフォン。esmini のビルド環境が手元にない場面でも
.xoscの中身を確認できます。 - シナリオの PR をコードレビューする — レビュアーがローカルで esmini を動かしていなくても、ブラウザでシナリオの内容を確認できます。
- OpenSCENARIO を教える — 受講者に何もインストールさせずに授業を進められます。
.webmを録画する — スライド、バグレポート、SNS 投稿用に、drawtonomy は 16:9・9:16・1:1・4:3・Free のアスペクト比プリセットをエクスポートポップオーバーに直接用意しています。- 生成したシナリオを目視確認する — scenariogeneration や Scenic で生成したシナリオを、フルシミュレータで実行する前にさっと確認できます。
逆に、ブラウザシェルを使わずネイティブ esmini を使うべき場面:
- OpenSceneGraph の 3D ビューアが必要なとき。
- 数百のシナリオに対して CI スイープを回すとき。
- Python や C++ から esmini をパイプラインとして呼び出したいとき。
- 別のシミュレータに esmini を組み込むとき。
同じ OpenSCENARIO エコシステムの一員として
Section titled “同じ OpenSCENARIO エコシステムの一員として”drawtonomy と esmini は、ASAM の OpenSCENARIO と OpenDRIVE という共通の標準を基盤にしており、シミュレーションコアも同一です。drawtonomy は文字どおり内部で esmini を呼び出しており、esmini プロジェクトなしには drawtonomy のブラウザ内 OpenSCENARIO シミュレータは存在しえません。OpenSCENARIO コミュニティはまだ小さく、そこにある各ツール — esmini、drawtonomy、RoadRunner、Truevision Designer、LaneMaker、scenariogeneration — はそれぞれ異なる役割を担っています。esmini はシミュレータ、drawtonomy はその上に構築されたブラウザシェル (加えてシナリオを描いたりスケッチしたりするホワイトボード) という位置づけです。
謝辞 — esmini への感謝
Section titled “謝辞 — esmini への感謝”drawtonomy の OpenSCENARIO シミュレータが存在できるのは、esmini プロジェクトがオープンライセンスで公開されているからです。何年もかけてクリーンで高速、かつ丁寧にドキュメント化された OpenSCENARIO 1.x ランタイムを作り上げ、OpenSCENARIO コミュニティ全体のリファレンスであり続けてくれている esmini のメンテナーとコントリビュータの皆さんに、心からの感謝を伝えたいと思います。drawtonomy のブラウザシミュレータを使っている方は、ぜひ esmini を GitHub でスターして、上流プロジェクトを応援してください。