🕌

自動運転AIチャレンジで複数台のデジタルツインシミュレーションしようぜ!

に公開

🎮 AWSIM × 複数台デジタルツイン

― ワイワイ走らせるための最小構成ガイド ―

👤 この記事の対象者

  1. 自動運転AIチャレンジで単独走行はもうマスターした! という方
  2. 複数人で AWSIM を同時に動かして対戦・協調的に遊んでみたい方
  3. シミュレーションの可能性を広げたい、試してみる時間がある方

🎯 この記事が目指していること

  • 複数台デジタルツインシミュレーションの “面白さ” と “可能性” を体験してもらうこと
  • 競うだけではなく、複数体同時走行が生み出す新しい遊び方/共創のスタイル を紹介すること

https://github.com/user-attachments/assets/1aa18ddf-d6cd-4c3c-817c-c9f3566ae5d6

🚫 この記事が目指していないこと

  • ガチガチの競技ルールで行うハイレベルなコンペの構築
  • 公式の技術仕様書や完全な最適解の提示

この記事を書いた時点では達成できていないこと

  • [] 2d lidarのパッケージの整備(一旦velodyneを2dにして実現しています)
  • [] cameraの、lidarのtopic hz
  • [] CPU friendlyな構成(一旦 GPU onlyの記事です。CPU onlyもそのうちでてきます)
  • [] ちゃんとしたドキュメントの作成(貢献者求む!)
  • [] ゲーム性を向上させるおもしろギミック(アイデアください!)
  • [] E2E sampleコードの提供

単独走行の課題を用意して改善していく “課題更新型” の大会だけでなく、
参加者同士のソフトウェアがリアルに対戦・協調する大会も面白いのでは?
というアイデアから、今回の記事をまとめています。


🛠️ 環境構築

まずはリポジトリをクローンします。

git clone https://github.com/taikitanaka3/aichallenge-2025.git -b feat/multi-vehicle2

✅ AWSIMの場所 E2ESimPracticeのフォルダ

今は個人のレポジトリですが、来年度3月ごろにAIチャレンジのレポジトリに移ります。

追加された機能

以下のように新規パッケージが増えています。
dockerとautowareのbuildし直しが必要です。

  • packages.txt
  • ros-humble-domain-bridge今回の主役

複数台の同時走行では、
ROS Domain Bridge の活用がキモ になります。

あとは下記のセンサが追加されています。

  • 2d lidar
  • camera

🔗 Topic の全体構造

全体像はこんな感じです。

  • simulation(AWSIM)と複数の Autoware が 異なる domain ID で起動
  • Domain Bridge が topic を受け取り、必要に応じて remap → 特定車両へ転送

これにより、AWSIM 1つ+Autoware複数台という構成が実現できます。


▶️ シミュレーションを実行してみる

今回は例として以下の構成で起動します:

  • docker 5つ

    • simulation:1個
    • Autoware:4個

Simulatorを立ち上げるコマンド

./dokcer_exec.bash dev
./run_simulator.bash 0
  • dockerの立ち上げてターミナルを作成
  • simulatorの起動
  • AWSIM の domain ID を 0 に設定して起動

1台目(Autoware 側)で実行するコマンド

./dokcer_exec.bash dev
./run_autoware.bash awsim 1
  • 既存のdockerを利用してターミナルを作成
  • Autoware を起動しつつ
  • Autoware の domain ID を 1 に設定して起動

この時点で下記のような画面が見えると思います。

2台目(Autoware 側)で実行するコマンド

./dokcer_exec.bash dev
./run_autoware.bash awsim 2
  • 既存のdockerを利用してターミナルを作成
  • Autoware を起動しつつ
  • Autoware の domain ID を 2 に設定して起動

.
.
.
このノリでID4まで起動しましょう。

それぞれの車両に対して初期位置をいれます。
その後走行開始のフラグを送ります。とりあえず3秒ごとに走行開始していますが、タイミングは一斉でもなんでもOKです。

timeout 3s ros2 topic pub --once /d1/awsim/control_mode_request_topic std_msgs/msg/Bool data:\ true
sleep 4
timeout 3s ros2 topic pub --once /d2/awsim/control_mode_request_topic std_msgs/msg/Bool data:\ true
sleep 4
timeout 3s ros2 topic pub --once /d3/awsim/control_mode_request_topic std_msgs/msg/Bool data:\ true
sleep 4
timeout 3s ros2 topic pub --once /d4/awsim/control_mode_request_topic std_msgs/msg/Bool data:\ true

https://github.com/taikitanaka3/aichallenge-2025/blob/feat/multi-vehicle-2/aichallenge/start_request.bash


👥 4人のコードを集めて対戦したい場合

正直まだ "公式なベストプラクティス" があるわけではないですが、
最小構成でやるなら以下の方法がシンプル です。

参加者ごとに4つのリポジトリを準備

aichallenge-2026-p1
aichallenge-2026-p2
aichallenge-2026-p3
aichallenge-2026-p4

あとはそれぞれにコードを入れ込み、同じように docker立ち上げてビルド → Autoware 起動でOK。
お互い差分を完璧に管理できるなら、1つのレポジトリで引数などを使って、複数のAutowareのバリエーションを起動するでOKです。


🚀 まとめ

  • ROS Domain Bridge を使うことで 複数台の Autoware を AWSIM に接続可能
  • docker × (AWSIM + Autoware複数台) で手軽に "対戦" や "協調" の環境が作れる
  • 技術検証だけでなく、ワイワイ遊べるシミュレーション環境としても伸びしろあり

複数台のデジタルツインは、
「走らせる」から「一緒に遊ぶ」へ ステージを引き上げてくれます。

次は実際に、

  • 衝突回避バトル
  • 追いかけっこ
  • チーム走行
  • 自律 vs 手動
    など、いろんな遊び方を試してみましょう。

TODOについて(下記優秀な皆様向けのコメントです)

■ 2D LiDARパッケージの整備状況
現在は Velodyne の description を流用して 2D LiDAR を実現しています。
2D LiDAR をスクラッチで新規実装する工数を避けるため、一旦既存アセットをベースに構成しています。
実装はこちら:
https://github.com/taikitanaka3/aichallenge-2025/tree/feat/multi-vehicle-2/aichallenge/workspace/src/aichallenge_submit/descriptions/velodyne_description

モデルは S2E を参考に作成し、角度分解能は 0.12 deg → 0.2 deg に一時的に低減しています。
(それほど重くないため、今後 0.12 deg に戻す可能性あり)
また、

実機の取り付け位置の物理制約から、前方 180° のみを検知するよう設定しています。
→ 参考:https://www.switch-science.com/products/8798
10 20 Hz に設定しています。処理負荷とのトレードオフなので、悩ましい。

■ カメラパッケージの整備状況
現状は 10 Hz に設定していますが、精度面を考えると 20 Hz 程度ほしいという課題があるかもしれません。処理負荷とのトレードオフなので、悩ましい。

カメラは 視野角(FOV) 約 57° で生成しています。
ステアリングが映り込むものの、情報量を増やすためには、もう少し広角でも良いかもしれません。
(ステア部分は後処理でクロップ可能ですし)

■ CPU-friendly 構成について
※ 現時点の実装は GPU 前提 です。CPU 版は後日公開予定です。
CPU モードでは、カメラ・LiDARが使用できないため、V2X により他車両を検知する構成を予定しています。
→ 今後のアップデートで追加予定です。

■ ドキュメント整備
正式なドキュメントは未整備の状態です。
コントリビューターを募集中です!

■ ゲーム性向上のためのギミック(アイデア募集中)
「アタックモード」や「減速アイテム」など、レースとしての面白さを出すギミックを検討中です。

■ E2Eサンプルコードとの連携
田中新田さんが作成してくれた、仮想的な2d lidarを使ったコードと組み合わせてE2Eのサンプルコードを提供できたらいいなと考えています。もちろん自作のコードでも動きますし、いろいろな取り組みがあってもいいと思っています。
https://zenn.dev/iasl/articles/b5594bfb0c2483

その他項目メモ

下記の内容は変わる可能性があります!

カメラ
解像度 384 X 256
位置 ベースリンクから前に0.8 上に0.7の位置に取り付けました

GNSSセンサ
実車で圧倒的な性能を出すことができてしまったため、ノイズはほとんど無くします。

IMU方位角
基本合わないので、信頼しないようにお願いします。

アクセルマップの逆変換(actuation cmd converter)
来年度多分Unity内に実装します。

余談

E2Eの勝負になってくると、走行データが学習の鍵を握るようになってきます。自動車部の方や、普段車両を扱っている方の走行データは非常に貴重でそういった方々にアドバンテージが出てくるかもしれません。一方で、E2Eの前段階では優秀なアルゴリズムでの学習を挟むことも大事であるというDataFlywheelsという考えもあります。https://speakerdeck.com/rpc/corl2025su-bao?slide=10

ではどっちが大事なのか!?
来年度の大会結果が楽しみですね!!

Discussion