SLAM(自己位置推定と地図構築)
地図が無い場所でロボットが迷わず動ける理由を、自己位置と地図を同時推定する仕組みから原理で理解できます。
- 1.SLAM は地図が無いと自己位置が定まらず、自己位置が無いと地図が作れないという鶏卵問題を、両者を1つの同時推定問題として解くことで突破する。
- 2.EKF-SLAMは状態に地図のランドマークまで含めて拡張し、パーティクルフィルタSLAMは自己位置の仮説を複数の粒子で保持して地図を粒子ごとに条件付ける。
- 3.グラフベースSLAMはポーズをノード、観測をエッジとして誤差を最小化し、ループクロージャで累積誤差を過去の再訪地点に配って地図全体を整合させる。
「地図が無いと自分の位置が分からない」という鶏卵問題
ロボットが未知の環境を動き回るとき、GPSが届かない屋内や惑星表面では絶対座標が得られません。地図さえあればセンサ観測と照合して自己位置を求められますし(既知地図でのローカリゼーション)、逆に自己位置さえ分かればセンサで見えた物体を地図に正しく配置できます(既知位置でのマッピング)。ところがSLAM(Simultaneous Localization and Mapping、自己位置推定と地図構築の同時実行)が対象とするのは、そのどちらも与えられていない状況です。
これが本質的に難しい理由は、位置の誤差と地図の誤差が互いに汚染し合う点にあります。オドメトリ(車輪の回転数などから移動量を積算する推定)には必ず誤差が乗り、その誤差は時間とともに積算されて発散します。誤った自己位置をもとにランドマークを地図に書き込めば地図がゆがみ、ゆがんだ地図で次の自己位置を推定すればさらに誤差が乗る——地図と位置の推定誤差が相関しながら循環的に増幅するため、単純に「まず地図を作ってから位置を求める」という分離ができません。SLAMはこの相関そのものを確率変数として同時に扱うことで、片方の情報がもう片方の誤差を訂正する構造を作ります。
時刻 t までのロボットの制御入力(オドメトリ)系列を u_{1:t}、センサ観測系列を z_{1:t} とすると、SLAMが求めたいのは経路 x_{0:t}(各時刻の姿勢)と地図 m(ランドマーク集合)の同時事後分布 p(x_{0:t}, m | z_{1:t}, u_{1:t}) です。ロボット工学特有の難しさは、この分布が経路と地図の間に強い相関を持つ点にあり、両者を独立に推定すると相関を無視した過小評価な不確かさになってしまいます。
EKF-SLAM:状態にランドマークごと詰め込む
最初期の実用的解法がEKF-SLAM(拡張カルマンフィルタSLAM)です。考え方は単純明快で、カルマンフィルタの状態ベクトルにロボットの姿勢だけでなく地図中の全ランドマーク座標も含めてしまいます。
状態ベクトル:
x = [ ロボット姿勢(x, y, θ), ランドマーク1(lx1, ly1), ランドマーク2(lx2, ly2), ... ]
共分散行列 P((3+2N)×(3+2N)):
ロボット-ロボット ブロック : 自己位置の不確かさ
ロボット-ランドマーク ブロック: 位置と各ランドマークの相関
ランドマーク-ランドマーク ブロック: ランドマーク間の相関
予測ステップではオドメトリでロボット姿勢だけを進め(ランドマークは動かないので不変)、更新ステップでは観測されたランドマークとの対応づけ(データアソシエーション)を行い、通常のカルマンゲインで姿勢とランドマーク座標を同時に補正します。ここでの核心は非対角の相関ブロックです。あるランドマークの観測でロボットの姿勢が補正されると、その相関を通じて他のランドマーク座標もつられて補正されます。これにより、一度でも正確な観測ができたランドマークを介して、地図全体の相対的な整合性が保たれます。
EKF-SLAM の弱点:
計算量: 状態次元が (3+2N) なので更新1回あたり O(N²)
→ ランドマーク数Nが増えると急速に破綻(N=数百が実用限界)
線形化: 姿勢の回転はF・Hを非線形にするためヤコビ行列で線形近似
→ 線形化誤差が蓄積し、特に大規模ループで不整合を起こす
単峰性: ガウス分布1つで不確かさを表すため、データアソシエーションを
誤ると(別のランドマークを同一と誤認)致命的に発散する
EKF-SLAMはガウス分布という単峰の仮説しか持てません。観測されたランドマークが地図中のどれに対応するかを一度誤って対応づけると、誤った補正が状態全体に伝播し、共分散が破綻的に収縮・発散します。マハラノビス距離によるゲーティングなど対応づけの信頼性を上げる工夫が実務上の生命線になります。
パーティクルフィルタSLAM:仮説を複数持って条件付ける
EKF-SLAMの単峰性の弱点を解消するのがパーティクルフィルタSLAM(代表例がFastSLAM)です。発想の転換は、ロボットの経路そのものを多数の仮説(パーティクル、粒子)としてサンプリングで表現する点にあります。
FastSLAM の構造(Rao-Blackwell化パーティクルフィルタ):
各パーティクル k が持つもの:
・経路の仮説 x_{0:t}^(k)(1つの姿勢系列のサンプル)
・その経路を「既知」とした条件付き地図 m^(k)
→ 経路が確定すればランドマークは互いに独立になる
→ 地図はランドマークごとの小さなEKF(あるいはヒストグラム)N個の集合で済む
1サイクル:
1. 各パーティクルをオドメトリ+雑音でサンプリング(経路仮説を1歩進める)
2. 各パーティクルの地図で観測の尤度を計算 → 重みを更新
3. 重みに応じてリサンプリング(尤もらしい経路仮説だけ生き残らせる)
ここで使われるのがRao-Blackwell化という数学的な分解です。経路 x_{0:t} が与えられれば、異なるランドマーク同士は観測を介した相関を持たず条件付き独立になるという性質を利用し、地図全体の同時分布を推定する代わりに、パーティクルごとにランドマークN個の独立な小さいフィルタに分解します。各パーティクルの地図を平衡木で管理すれば1回の観測更新はO(log N)で済み、これはEKF-SLAMの更新1回あたりO(N²)よりはるかに軽く、大規模な地図でも扱えるようになります(パーティクル数をMとすると1タイムステップ全体ではO(M log N))。加えて、パーティクルの集合は多峰性(複数の対応づけ仮説)を自然に表現できるため、データアソシエーションの曖昧さにもEKF-SLAMより頑健です。
| 観点 | EKF-SLAM | パーティクルフィルタSLAM(FastSLAM) |
|---|---|---|
| 不確かさの表現 | 単峰のガウス分布1つ | 多数の経路サンプル(多峰性を表現可) |
| 地図の扱い | 全ランドマークを1つの共分散に結合 | 経路ごとに条件付き独立なN個の小フィルタ |
| 計算量(ランドマークN) | 更新1回あたり O(N²) | パーティクル1個・観測1回あたり O(log N) |
| データアソシエーション誤りへの耐性 | 低い(単一仮説が壊れると発散) | 比較的高い(複数仮説が並存) |
| 弱点 | 大規模地図でスケールしない | パーティクル枯渇(粒子涸渇)で経路多様性を失う |
パーティクルフィルタSLAMにも弱点があります。リサンプリングを繰り返すと、過去の共通祖先へ多数のパーティクルが収束してしまう粒子涸渇が起き、特にループの閉じ込み(後述)のような長期の一貫性を要する場面で経路の多様性が失われがちです。
グラフベースSLAMとループクロージャ:後から地図を整合させる
現在の実用SLAM(LiDAR SLAM、Visual SLAMの多くを含む)で主流なのがグラフベースSLAMです。発想はEKF-SLAMやパーティクルフィルタSLAMのような逐次フィルタとは異なり、問題を1つの大きな最適化として後からまとめて解くことにあります。
グラフの構造:
ノード : 各時刻のロボット姿勢(またはランドマーク位置)
エッジ : ノード間の相対的な制約
・オドメトリ制約: 隣接する姿勢間の相対移動量(+その不確かさ)
・観測制約 : 姿勢とランドマークの間の相対観測(+不確かさ)
・ループクロージャ制約: 離れた時刻の姿勢同士が「同じ場所」だと分かったときの制約
最適化(グラフ最適化 / ポーズグラフ最適化):
全ノードの姿勢を変数として、
「各エッジの制約からの逸脱」の二乗和を最小化する
誤差関数: Σ_edges || 予測される相対関係 − エッジの観測値 ||²_Σ⁻¹
(Σ は各制約の不確かさ共分散、重み付き最小二乗)
→ 疎な非線形最小二乗問題としてガウス・ニュートン法や
レーベンバーグ・マーカート法で反復的に解く
このグラフには、地図とロボットの全履歴が「制約の集合」として蓄えられます。累積誤差が生じるのは避けられませんが、決定的に重要なのが**ループクロージャ(閉ループ検出)**です。ロボットが移動して、過去に訪れた場所へ再び戻ってきたことをセンサ観測(画像の類似度、点群のマッチングなど)から検出できると、時間的には遠く離れた2つのノード間に新しい制約エッジを追加できます。
ループクロージャが誤差を解消する仕組み:
1. ロボットが1周してスタート地点付近に戻る
2. 現在の観測が「過去のノードNの観測と一致する」と検出
(見た目の再認識・点群の位置合わせなど)
3. ノードNと現在ノードの間に「実は同一地点」という制約エッジを追加
4. グラフ最適化を再実行
→ 1周の間に積み上がった誤差が、経路全体の姿勢に再配分される
→ ループの起点から終点までの姿勢が滑らかに補正し直される
ループクロージャ以前は、経路上のオドメトリ誤差は消えることなく単調に積み重なるだけです。ループクロージャ制約が加わることで、それまで独立だった「行き」と「帰り」の推定が1つの制約でつながり、最適化が誤差を経路全体(特にループ内側のノード群)に分配し直します。これによって、局所的には粗くても大域的には閉じた地図が得られます。ただし、ループクロージャの検出自体を誤る(実際には別の場所なのに同一と誤認する)と、誤った制約が地図全体を破綻的にゆがめるため、検出の確からしさを別途検証する仕組み(幾何的整合性チェックなど)が欠かせません。
| 手法 | 推定の様式 | 地図の一貫性 | 計算資源の使い方 |
|---|---|---|---|
| EKF-SLAM | 逐次フィルタ(オンライン、過去は捨てる) | 局所的には良いが大域的にゆがみやすい | 状態次元に応じてO(N²)が常時 |
| パーティクルフィルタSLAM | 逐次フィルタ+多仮説サンプリング | 対応づけ誤りに比較的頑健 | パーティクル数M×O(log N) |
| グラフベースSLAM | バッチ最適化(過去の姿勢も変数として持つ) | ループクロージャで大域的な整合を回復 | 疎行列を利用した非線形最小二乗(オフラインまたは準リアルタイム) |
なぜ同時推定は本質的に難しいのか
3手法に共通する困難の根は同じです。第一に、誤差の相関です。ロボット工学特有の問題として、姿勢推定とランドマーク推定は独立変数ではなく、一方の誤差が他方に伝播し続ける結合系を成します。この相関を正しく保持しないと(例えば地図とロボットの不確かさを別々に扱うと)、実際より過小に見積もった自信過剰な推定になり、破綻に気づけません。第二に、データアソシエーションの組合せ爆発です。今見ているランドマークが地図上のどれに対応するかは事前には分からず、候補が多いほど誤対応のリスクも増えます。誤対応は上流の推定を汚染し、下流のすべての判断に波及します。第三に、線形化と多峰性のトレードオフです。EKF-SLAMは計算効率と引き換えに単峰・線形近似という仮定を置き、パーティクルフィルタSLAMは多峰性を扱える代わりに粒子数に比例した計算コストと粒子涸渇のリスクを負い、グラフベースSLAMはループクロージャで大域整合を回復できる代わりに、それまでの累積誤差にセンサ観測を頼った再検出(既訪認識)という別の困難な問題を新たに抱えます。SLAMは万能な一発解法ではなく、この3つの困難のどこにどれだけ計算資源を配分するかという設計判断の集合なのです。
SLAMは単体のセンサフュージョン(例えばIMUとGPSの融合による姿勢推定)とは目的が異なります。センサフュージョンは「既知の地図や基準系の中で自分の状態を求める」問題であるのに対し、SLAMは基準となる地図そのものが存在しないところから、自己位置と地図を相互参照的に構築します。SLAMの前段(オドメトリの積算、IMUの姿勢推定)や後段(構築した地図をもとにした経路計画・軌道追従)は制御工学や組み込みのセンサフュージョンの知見を土台にしますが、SLAM自体の核心である同時推定と対応づけ、ループクロージャは、ロボットが未知環境を自律的に動くために固有に生じる問題です。
- SLAM問題の本質:地図と自己位置の相互依存(鶏卵問題)を、同時事後分布
p(x_{0:t}, m | z, u)の推定として解く。 - EKF-SLAM:状態にランドマーク座標を含め共分散の相関で地図を補正。計算量はO(N²)、単峰性のため対応づけ誤りに弱い。
- パーティクルフィルタSLAM(FastSLAM):経路を粒子でサンプリングし、経路が既知なら地図は条件付き独立というRao-Blackwell化で1パーティクルあたりO(log N)に削減。粒子涸渇が弱点。
- グラフベースSLAM:姿勢をノード、制約をエッジとする疎な非線形最小二乗として一括最適化。
- ループクロージャ:再訪検出で離れたノード間に制約を追加し、累積誤差を経路全体に再配分して大域整合を回復。誤検出は破滅的。
まとめ
SLAMは、「地図が無いと位置が定まらず、位置が無いと地図が作れない」という相互依存を、自己位置と地図の同時推定として正面から扱う問題です。要点は、(1) 誤差が地図と位置の間で相関しながら循環するため単純な分離推定ができないこと、(2) EKF-SLAMは状態にランドマークを組み込み共分散の相関で地図全体を補正するが計算量O(N²)と単峰性が弱点であること、(3) パーティクルフィルタSLAM(FastSLAM)は経路を粒子でサンプリングしRao-Blackwell化で地図をランドマークごとの独立フィルタへ分解し多峰性と効率を両立させるが粒子涸渇のリスクを負うこと、(4) グラフベースSLAMは姿勢と制約をグラフとして持ち非線形最小二乗で一括最適化し、ループクロージャによって累積誤差を経路全体へ再配分して大域的な整合を回復すること。この「同時推定・データアソシエーション・線形化と多峰性のトレードオフ」という3つの困難の配分を理解することが、LiDAR SLAMやVisual SLAMなど個別実装を学ぶ土台になります。
ロボティクス Article
SLAM(自己位置推定と地図構築)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
SLAM
比較で見る軸
難易度: advanced / カテゴリ: ロボティクス / タグ数: 6
導入後に効く点
EKF-SLAMは状態に地図のランドマークまで含めて拡張し、パーティクルフィルタSLAMは自己位置の仮説を複数の粒子で保持して地図を粒子ごとに条件付ける。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ロボティクス
- タグ数
- 6
判断チェックリスト
- 自社の用途が「SLAM / ロボット工学」に近いか確認する。
- 強みである「SLAM は地図が無いと自己位置が定まらず、自己位置が無いと地図が作れないという鶏卵問題を、両者を1つの同時推定問題として解くことで突破する。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。