コンテンツにスキップ

drawtonomy vs esmini — ブラウザシェルとネイティブランタイムの使い分け

esminiASAM 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 を 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) も、シミュレーションコアも共通で、シェルだけが異なります。

ランタイムが同じ esmini であるなら、なぜブラウザシェルが必要なのでしょうか。

  • CI の失敗をトリアージする — 手元のマシン、借りたデスクトップ、スマートフォン。esmini のビルド環境が手元にない場面でも .xosc の中身を確認できます。
  • シナリオの PR をコードレビューする — レビュアーがローカルで esmini を動かしていなくても、ブラウザでシナリオの内容を確認できます。
  • OpenSCENARIO を教える — 受講者に何もインストールさせずに授業を進められます。
  • .webm を録画する — スライド、バグレポート、SNS 投稿用に、drawtonomy は 16:9・9:16・1:1・4:3・Free のアスペクト比プリセットをエクスポートポップオーバーに直接用意しています。
  • 生成したシナリオを目視確認するscenariogenerationScenic で生成したシナリオを、フルシミュレータで実行する前にさっと確認できます。

逆に、ブラウザシェルを使わずネイティブ 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、RoadRunnerTruevision DesignerLaneMakerscenariogeneration — はそれぞれ異なる役割を担っています。esmini はシミュレータ、drawtonomy はその上に構築されたブラウザシェル (加えてシナリオを描いたりスケッチしたりするホワイトボード) という位置づけです。

drawtonomy の OpenSCENARIO シミュレータが存在できるのは、esmini プロジェクトがオープンライセンスで公開されているからです。何年もかけてクリーンで高速、かつ丁寧にドキュメント化された OpenSCENARIO 1.x ランタイムを作り上げ、OpenSCENARIO コミュニティ全体のリファレンスであり続けてくれている esmini のメンテナーとコントリビュータの皆さんに、心からの感謝を伝えたいと思います。drawtonomy のブラウザシミュレータを使っている方は、ぜひ esmini を GitHub でスターして、上流プロジェクトを応援してください。