Pose graph optimization

Pose graph optimization (PGO) は、SLAMバックエンドを縮小した形式であり、変数はロボット/カメラの姿勢 {Ti}SE(3)\{T_i\} \subset SE(3) のみ — 3Dマップ点は含まれない。グラフの構成は次の通り。

各エッジは「ノード ii から見て、ノード jj は相対姿勢 TijT_{ij} に現れるはずだ」と述べている。最適化は、すべての制約を同時に最もよく満たす姿勢の配置を見つける。

min{Ti}(i,j)Elog ⁣(Tij1Ti1Tj)Σij12\min_{\{T_i\}} \sum_{(i,j) \in \mathcal{E}} \left\| \log\!\left(T_{ij}^{-1}\, T_i^{-1} T_j\right) \right\|^2_{\Sigma_{ij}^{-1}}

残差は SE(3)SE(3) の対数写像を用いて計算されるため、誤差は6自由度の接空間に存在する。問題は多様体上のGauss-NewtonまたはLevenberg-Marquardt法で解かれ、バンドル調整とまったく同様だが、変数の数は遥かに少ない。

視覚SLAMシステムにおける典型的な使用パターンは以下の通り。

  1. フロントエンドがカメラを追跡し、オドメトリエッジを構築する。ドリフトが蓄積していく。
  2. 場所認識がループ閉じ込みを検出し、幾何学的検証により、時間的に離れた2つのキーフレーム間の相対姿勢エッジが生成される。
  3. PGOは蓄積されたドリフトを軌跡全体に再分配し、ループを「パチンと閉じる」。
  4. 任意選択で、その後に完全なバンドル調整で姿勢と点を精密化する。

(多数の)ランドマーク変数を除外しているため、PGOは完全なバンドル調整よりもはるかに高速であり、ループ閉じ込み後のグローバルな軌跡補正における標準的なツールである — これはORB-SLAMのessential-graph最適化や、大半のLiDAR SLAMバックエンド(例えばGTSAMやg2o経由)が実行している処理である。単眼SLAMでは、スケールドリフトも補正できるように、SE(3)SE(3) の代わりに Sim(3)\mathrm{Sim}(3) 上でグラフを最適化することが多い。

一つ注意点がある。PGOはそのエッジを信頼する。1つの偽ループ閉じ込みエッジが、マップ全体を自身に折り畳んでしまう可能性があり、これがrobust pose-graph optimization手法を必要とする理由である。

最適化はどのように実行されるか

PGOは多様体上の非線形最小二乗問題である。回転は単純な加算で更新できないため、各Gauss-Newton/LM反復は接空間で作業する。

  1. 各エッジについて、残差 eij=log ⁣(Tij1Ti1Tj)R6\mathbf{e}_{ij} = \log\!\left(T_{ij}^{-1} T_i^{-1} T_j\right) \in \mathbb{R}^6 と、2つの姿勢の微小な摂動 δi,δj\boldsymbol{\delta}_i, \boldsymbol{\delta}_j に関するそのヤコビアンを計算する。
  2. 正規方程式 Hδ=bH \boldsymbol{\delta} = -\mathbf{b} を構築して解く。ここで H=JijTΣij1JijH = \sum J_{ij}^T \Sigma_{ij}^{-1} J_{ij} はスパースである。各エッジは2つの姿勢にのみ関わるため、HH のスパース性パターンはグラフの隣接構造そのものになる。
  3. リトラクション TiTiExp(δi)T_i \leftarrow T_i \cdot \mathrm{Exp}(\boldsymbol{\delta}_i) で各姿勢を更新し、収束するまで反復する。

構造上、重要な点が2つある。まずゲージの自由度: コストは、すべての姿勢を一斉に剛体変換しても不変であるため、HH はゲージを固定するまで特異である — 最初の姿勢を固定する(または事前分布因子を追加する)必要がある。次に情報行列 Σij1\Sigma_{ij}^{-1}: これは補正がどのように分配されるかを決めるノブである。信頼できるオドメトリエッジはわずかにしか曲がらず、不確かなエッジがループ誤差の大半を吸収する。すべてのエッジの情報を単位行列に設定することも「動作する」が、ドリフトを非現実的に分配してしまう。

直感的な理解

大きな正方形を走行するロボットを想像してみよう。オドメトリは各コーナーで少しずつ方位誤差を蓄積し、推定された終端姿勢は開始点から明らかに離れた位置にある。場所認識が最終視点と最初の視点を照合し、「この2つの姿勢は一致する」と述べる1本のループエッジを追加する。PGOを実行する前は、そのエッジは巨大な残差を持ち、オドメトリエッジには残差がない。最適化器は誤差が共有される配置を見つける。すべての姿勢がわずかに回転・移動し(そのエッジの共分散によって重み付けされる)、各オドメトリエッジは小さな残差を持つようになり、ループエッジの残差は同じ統計的スケールまで縮小する — 軌跡は目に見えて閉じた正方形に「パチンと収まる」。何も再度計測されたわけではない。同じ計測値が単に一貫性を持って再説明されただけである。この誤差再分配の描像は、すべてのグラフベースSLAMバックエンドに対する正しいメンタルモデルである。

よくある落とし穴

SLAMにおける意義

PGOはループ閉じ込みの主力であり、ドリフトしたオドメトリ軌跡を大域的に整合したマップに変換するステップである。グラフベースSLAMの最も単純な例であるため、完全なバンドル調整やファクターグラフに取り組む前に、多様体上の非線形最小二乗、スパース性、情報行列を最初に理解するのに最適な場所でもある。

ハンズオン

関連ノート