こんにちは、ヒロです。今回は「SLAM(スラム)」という技術について、わかりやすく説明していこうと思います。
SLAMとは?
SLAMは Simultaneous Localization and Mapping の頭文字を取ったもので、日本語にすると「自己位置推定と地図作成を同時に行う技術」です。
例えば、自分が知らない部屋に目隠しされて連れてこられたとします。目隠しを外した瞬間、まず周囲を見渡して「ここはどこだろう?」と考えますよね。知っている景色と一致すれば「位置特定」ができるし、もし全く知らない場所なら、歩き回りながら頭の中に地図を描いていきます。
これと同じことをロボットや車にやらせるのがSLAMです。つまり、「自分がどこにいるのか」(Localization)と 「周囲がどうなっているのか」(Mapping)を同時に処理する仕組みなんです。
どこで使われているの?
SLAMはすでに色んな場面で使われています。
-
自動運転車:障害物や歩行者との距離を測って、安全に走るために必須
-
ドローン:GPSが届かない屋内でも、迷わず飛び回るために使う
-
倉庫内AGV(無人搬送車):棚の間をぶつからずにスイスイ走る
-
家庭用ロボット:掃除機ロボが部屋のレイアウトを覚えて効率よく掃除
-
AR/VR/MR:現実の部屋に正確にバーチャル物体を置く
いわば「機械の眼」として、周囲を理解するためのベースになっているわけです。
どんなセンサーを使うの?
SLAMを実現するには、センサーで外界を読み取る必要があります。代表的なのは以下の通り。
-
LiDAR(ライダー):レーザーで距離を正確に測れる。精度は高いけど高価。
-
カメラ:色や形がわかる。安価だけど暗闇や霧に弱い。
-
ToF(タイム・オブ・フライト)センサー:光の反射時間で距離を測る。暗所にも強い。
-
IMU(慣性計測装置):加速度・角速度から動きを推定。
-
オドメトリ:車輪の回転数などから進んだ距離を測る。
-
GNSS(GPSなど):屋外なら衛星から位置を取得。
アプリケーションによって必要な精度や環境が違うので、最適なセンサーを選んだり、複数を組み合わせたりして使います。
SLAMの種類
入力に使うセンサーの違いで、大きく3種類に分かれます。
-
LiDAR SLAM
-
LiDARの点群データをもとに自己位置と地図を作成。
-
高精度で遠くまで測れるけど、処理が重いのが課題。
-
-
Visual SLAM
-
カメラ映像の特徴点を追跡して位置を推定。
-
安価で手軽。IMUやToFと組み合わせるケースも多い。
-
-
Depth SLAM
-
デプスカメラで距離情報を直接取得。
-
暗所や特徴点の少ない環境でも動作可能。
-
以上のように、SLAMは、ロボットや自動運転だけじゃなく、僕たちが遊んでいる AR/VR/MRの世界 にも欠かせない基盤技術です。「自分がどこにいて、周りがどうなっているか」を理解することができるからこそ、仮想と現実がシームレスにつながるんですよね。HMDやフルトラデバイスでしたら、QuestシリーズやPICO、ViveUltimateTrackerなどに使われている技術です。これからもSLAMは進化を続けて、ますます身近なものになっていくと思います。
【解説】Visual SLAMってなに?
今回は、そのうち「Visual SLAM(ビジュアル・スラム)」について記載します。これ、実はロボットの世界で育ってきた技術なんだけど、最近はVRとかAR、そして僕らが遊んでるVRChatの中にも関わってくる大事な仕組みです。
Visual SLAMって?
SLAMっていうのは「Simultaneous Localization and Mapping」の略で、直訳すると「自己位置推定と地図生成を同時にやる」技術のこと。つまり、「自分が今どこにいるのか」と「周りがどんな環境なのか」を同時に把握する仕組みってこと。
昔は超音波センサーとかレーザーでやってたんだけど、最近はカメラの映像を使ってそれをやっちゃうのが主流になってる。それを特に Visual SLAM って呼ぶんだ。
どうやって動いてるの?
簡単に言うとね、カメラで撮った映像を連続して比べて、「この点はさっきのフレームでも同じ場所にあったな」って特徴点を追いかけていくんだよ。
-
最初に2枚の画像で三角測量をして、基準になる「3Dマップ」を作る。
-
その後は新しい画像が入るたびに、「過去の地図にある点」と照らし合わせてカメラの位置(ポーズ)を推定する。
-
新しい点が見つかったらどんどん追加して、マップを広げていく。
で、この推定を繰り返していくと、自分の動き+環境の3D地図が同時に出来上がっていくわけ。まさに“二兎を追って二兎を得る”技術ってやつだね。
誤差をどうやって抑えるの?
もちろん何回も計算してるとズレがたまります。だから「Bundle Adjustment(誤差を最小化する調整)」とか「Relocalization(見失った位置を再発見する処理)」、「Loop Closure(同じ場所に戻ったときに地図全体を修正する処理)」みたいな仕組みが入ってて、ズレを補正しながら進めています。
これを聞くと「ただ画像を比べてるだけじゃないんだな〜」って思います。
いろんなアルゴリズム
研究の世界ではたくさんの手法が出てきていて、代表的なのを挙げると…
-
MonoSLAM:1台のカメラだけでリアルタイムSLAMをやった先駆け。
-
PTAM:処理を並列化して高速化した。
-
ORB-SLAM:今でも広く使われてる定番。特徴点検出が安定しててオープンソース。
-
LSD-SLAMやDTAMは「密なマップ(すごく細かい3D地図)」を作れるのが特徴。
最近はAIの力を借りた手法も出てきてて、CNN-SLAMとかNeRF-SLAMなんかは深層学習を活用して、よりリアルで密なマップを作ろうとしています。
-
CNN-SLAM:CNNで推定したデプス画像を利用して密なマップ生成。
-
DeepSLAM:2台のステレオカメラ等からステレオ画像を入手し、深層学習により精度改善。
-
NeRF-SLAM:NeRFを活用し、視線依存の表現を学習して高密度3Dマップを獲得。
などがあります
VRChatとの関係は?
「いやいや、これロボットの話じゃん」って思うかもしれないけど、実はVRでも関係大あり。
例えば スタンドアロンVRヘッドセット(QuestとかPICOとか)って、ベースステーションなしで空間を認識してるよね? あれの裏側で動いてるのがVisual SLAMなんだ。
-
ヘッドセットが部屋の中をスキャンして、自分の位置を推定する。
-
だからベースステーションがなくてもVRChatで自由に動ける。
僕らが当たり前に使ってる「無線でフルボディ」とか「部屋のどこでも遊べる」って環境は、このVisual SLAMの進化のおかげなんだよね。
まとめ
仕組み
-
特徴点マッチング
-
特徴点を検出・記述し、画像間で対応付ける。
-
SIFTの登場以降、多様な特徴点検出・マッチング手法が提案されている。
-
-
三次元マップ初期化
-
最初の2枚の画像の特徴点ペアから三角測量で3D位置を推定し、基準座標系を構築。
-
-
ポーズ推定とマップ更新
-
新しい画像に対し、既存マップの3D点と2D特徴点を対応付け(PnP問題)。
-
新しい特徴点を追加し、マップを更新していく。
-
Visual SLAMは、「自分の位置」と「周りの地図」を同時に作り続ける技術。ロボット研究から始まったけど、今はVR機器やARアプリ、そして僕らが遊んでるVRChatにも深く関わってる。
これからAIを取り込んだ新しい手法もどんどん出てきて、さらに精度や安定性が上がっていくはず。そうなれば、フルボディやパススルー体験ももっと自然になって、VRChatの世界も“リアルを超える”くらい快適になるんじゃないかなぁ。
