🚘

MIRU2025で3DGSドライビングシミュレータを展示しました

に公開

はじめに

Turing基盤AIチームの荒居上田です。2025 年 7 月 29 日〜8 月 1 日に京都・国立京都国際会館で開催された国内最大規模のコンピュータビジョン会議 MIRU 2025(画像の認識・理解シンポジウム) にブース出展し、3D Gaussian Splatting(3DGS)を活用したドライビングシミュレータを実機デモしました。

ブース
MIRU2025で展示したチューリングのブース

会場には 3 面ディスプレイとステアリングコントローラを備えた運転リグを持ち込み、実写データから再構成した街並みを“運転席目線”で自由に走行できる体験を提供しました。試乗待ちの行列ができるほどの盛況ぶりで、研究者・学生・企業エンジニアの方々から、

  • 「実写のようにリアル」
  • 「動きが滑らかですごい」
  • 「本当に運転しているような感じがする」

といった声を寄せていただきました。特に"3DGS×インタラクティブ操作"が生む臨場感は想像以上だったようで、体験後に技術的な質問をいただく場面も多々ありました。
本記事では、このデモがどのような仕組みで動いているのかを簡単に紹介しつつ、開発から展示までの裏側を振り返ります。まずは「3D Gaussian Splattingって何?」をライトにおさらいしていきます。

3D Gaussian Splattingって何?

3D Gaussian Splatting(3DGS)とは、異なる視点から撮影した画像セットから3次元空間の表現を構築する技術です。3次元空間の表現が得られると、新しい視点から見たときの画像を合成すること(新規視点合成、Novel View Synthesis)ができ、シミュレーションなどの用途に用いることができます。

3DGSではシーンの表現として色と透明度を持った3次元ガウス分布の集合を用います。やや単純化はしてありますが、以下の図のような楕円体が空間上にばら撒かれたような表現になっています。

この表現を空間内の画像平面に投影することで画像を合成することができます。合成画像と実画像の誤差を逆伝播することでパラメータの学習をすることができるという仕組みです。

より詳しくは、以下の動画でも解説しているので興味がある方はぜひご覧ください。

https://youtu.be/QI_jJztuWjU

3DGSは今回のドライビングシミュレータのような、リアルタイムの画像合成を必要とする場合に適したシーンの表現構築方法です。類似の技術としてNeRFが挙げられますが、画像合成のリアルタイム性が低いことが指摘されており今回のようなユースケースでは3DGSの方が適していると言えるでしょう。

チューリングが取り組む自動運転分野では近年、3DGSやNeRF等の新規視点合成技術が自動運転システムの学習や評価をするためのシミュレーションを実現する技術として注目されています。

次章では、3DGSを用いたドライビングシミュレータのハードウェア・ソフトウェア構成を簡単に紹介します。

シミュレータの構成

ハードウェア

シミュレータ全体の流れとしては、ハンドルコントローラーがハンドルやペダルの操作を数値データに変換し、ソフトウェア側で処理してGPUからディスプレイに描画しています。


3画面表示の様子

今回ハードウェアで一番目を引くのは画面が3つ並んでいることだと思います。これはレーシングシミュレータの分野では標準的な構成であり、運転者を包み込むように配置することで視野を大きく拡張し、速度感を高める効果があります。MIRUの会場では最も一般的な左右45度でディスプレイを設置しましたが、この取付角度によって没入感や走行感覚が大きく変化することが知られています。

ハンドルコントローラーは市販品(Thrustmaster T-GT II)を使用しています。このコントローラーにはフォースフィードバック(FFB)という機能があり、今回はハンドルがニュートラルポジションに戻る力をかけることで実車の感覚に近づけています。他にも路面の状況やタイヤがグリップを失う感覚を再現することも可能です。

使用したPCに搭載されているRTX 4090にはDisplayPort端子が3つ、HDMI端子が1つあります。このうち3つのDisplayPort端子を3台のディスプレイに接続し、各画面に個別の映像を表示しています。描画負荷を抑えるために1画面あたり1,720×720ピクセルでレンダリングし、ディスプレイの本来の解像度である3,440×1,440ピクセルへ2倍にアップスケールして表示しています。

ソフトウェア

ドライビングシミュレータのソフトウェアは大きく分けると「コントローラ」「ダイナミクスシミュレータ」「レンダラー」の3つの要素に分かれています。ここでは、それぞれがどんな役割を担い、どう連携しているのかをざっくり紹介します。


システムのソフトウェア構成図

コントローラは、運転者が握るハンドルやペダルの動きから送られてくるバイナリ信号を「ハンドルの回転角」「アクセルの踏み込み量」「リセットボタンが押されたか」といった数値データに変換し次の工程に渡します。

ダイナミクスシミュレータは車の動きを決める部分になります。PyBulletという物理エンジンを使い、チューリングがデータ収集や自動運転システムの検証に使っているトヨタアルファードを参考に重量やホイールベースなどを実車に近いパラメータを設定した移動台車を動かします。LiDAR点群から自動作成されたシーンのメッシュ表現と移動台車の間で働く力を計算して車両の姿勢(位置と向き)を更新し、次の工程にその情報を流すのがダイナミクスシミュレータの役割です。


シーンのメッシュ表現の中で物理シミュレータを使って移動台車を走行させている様子


ほぼ同じ位置にカメラを置いて3DGSでレンダリングを行った結果

ドライビングシミュレータで表示される映像は3DGSを用いて合成された映像ですが、その裏側では上の図のようなメッシュ表現の中を移動台車が運転指示に合わせて走行しています。

レンダラーはダイナミクスシミュレータが出した車両の姿勢を受け取り、車に取り付けた3台のカメラ視点を算出します。その視点とあらかじめ3DGSで学習しておいた街並みの3D Gaussian表現を組み合わせて3枚の画像を20FPSで合成しOpenGL経由で3面モニターに表示を行います。

三つの要素はPub/Subと呼ばれる方式でメッセージをやり取りしています。この方式は、メッセージを送る側がメッセージを受け取る側のことを気にする必要がないため、処理ごとの最適な速度で動かすことができるようになっていて、どれか一つの処理が重たくなってしまっても他の工程が止まりにくい柔軟なアーキテクチャになっています。

より詳しい解説は、今後別のブログ記事で紹介していく予定です。

開発から展示までの裏側

今回の展示は4月に開発を開始しました。開発最初期は、画面は一枚だけで、自動運転システムの開発用UIをそのまま使うかたちで表示を行っており、車両の挙動も平面運動を仮定したものでした。


開発最初期のドライビングシミュレータ(4月初旬)

この後、筆者らが自宅にレースゲーム用のコックピットを構築した経験を活かし、3面ディスプレイとハンドルコントローラを組み合わせた筐体を構築しました。

次のバージョンではこの3面ディスプレイそれぞれにWebブラウザを並べ、3DGSを使って合成した画像をWebサーバーで配信しブラウザで画像を表示するという方式を取りました。


3画面を用いた初めてのバージョン(5月初旬)

このバージョンはWebサーバで画像を配信するためにGPU上の画像を一度CPUに移す必要があり、画面に描画するのが遅くなってしまうという問題がありました。そこで、3DGSでレンダリングしてできたGPU上の画像をOpenGLを使って直接3画面に描画するようにしました。


OpenGLを使用してGPUから直接描画したバージョン(7月初旬)

このバージョンで視覚的な品質は大きく向上しましたが、物体と衝突した時にすり抜けてしまったり、平面運動を仮定しているために斜面などがあるシーンで用いることができないといった課題がありました。そこで、シーンのメッシュを作成した上でそれまで使っていた平面運動2輪モデルを使ったダイナミクスシミュレータから、PyBulletを用いたダイナミクスシミュレータへの切り替えを行いました。


ダイナミクスシミュレータに物理エンジンを組み込んだ後のドライビングシミュレータ(7月中旬)

この後、車両の挙動の微調整などを行い、MIRU2025の開催される京都国際会館に筐体の配送を行いました。輸送時の振動からPCを守りつつ、モニタースタンドやシートなどの大型荷物も同時に配送していただける業者を探したところ、通常の精密機器輸送サービスでは対応が難しかったため、トラックを1台貸し切って会場へ搬送しました。


運搬のために分解した時の様子

これからのアップデート

このシミュレータは「狙ったデータを収集する」ことを目的に作られたドライビングシミュレータです。「先行車が急ブレーキをかける」といったレアケースシナリオを作成し、そのようなシナリオにおける"正解行動"をこのドライビングシミュレータで熟練のドライバーに運転をしてもらうことで収集をしたいと考えています。

そのためには狙ったシナリオをこのシミュレータ上で作成する機能が欠かせません。特に他の車両や歩行者などのエージェントについて作成したいシナリオに合わせた動きを行わせるような機能が今後必要になってきます。


他の車両がまっすぐ進むようなシナリオに合わせて自車を走行させている様子

また、熟練のドライバーに実際の車を運転しているように感じていただける工夫も欠かせません。車両のダイナミクスはもちろん、コントローラからのフィードバックや走行音の合成、車体の動きに合わせて筐体を動かす(モーションシミュレータ)の作成なども今後は実施していきたいと考えています。

終わりに

MIRU 2025 での初披露は、想像以上に多くのフィードバックを得る貴重な機会となりました。特に学会での展示だったということもあり、「自動運転にどう活用するのか」ということに関してさまざまな技術的な質問を寄せていただきました。

今後はレアケースシナリオ生成マルチエージェント制御といった要素を強化し、「狙ったデータを集められるドライビングシミュレータ」を目指して開発を進めていきます。開発に一緒に取り組んでくれるエンジニア、リサーチャーのみなさまの応募をお待ちしております。

Tech Blog - Turing

Discussion