非線形最適化

SLAMの推定は、最終的に以下のコスト関数を最小化する問題に帰着する

F(x)=12iei(x)Σi12F(\mathbf{x}) = \frac{1}{2}\sum_i \|\mathbf{e}_i(\mathbf{x})\|^2_{\Sigma_i^{-1}}

これは状態 x\mathbf{x}(姿勢、ランドマーク、バイアス)についての最小化であり、各 ei\mathbf{e}_i は残差——再投影誤差、オドメトリ誤差、IMU誤差など——であり、それぞれの逆共分散で重み付けされている。残差は状態に対して非線形である。カメラ投影は深度で除算を行い、回転は曲がったマニフォルド上に存在する。そのため閉形式の解は存在せず、反復計算が必要になる。

反復降下法のテンプレート

実用的なソルバーはすべて同じループを共有している。初期推定 x0\mathbf{x}_0 から出発し、コストを減少させる更新量 Δx\Delta\mathbf{x} を繰り返し求めて適用し、更新量または勾配がごく小さくなった時点で停止する。手法によって Δx\Delta\mathbf{x} の選び方が異なる。

マニフォルド上の最適化

カメラ姿勢は SE(3)\mathrm{SE}(3) の要素であり、ベクトルではない——回転行列に更新量を単純に加算すると直交性が破壊される。標準的な対処法は、リー代数における局所的な摂動 ξR6\boldsymbol{\xi} \in \mathbb{R}^6 を最適化し、指数写像を通じて適用することである。

TTexp(ξ^)T \leftarrow T \cdot \exp(\hat{\boldsymbol{\xi}})

ソルバーが目にするのは小さなベクトル ξ\boldsymbol{\xi} だけであり、リトラクション(retraction)によって状態はマニフォルド上に保たれる。すべてのSLAMライブラリがこれを実装している(Ceresのlocal parameterization、g2oの頂点oplus、GTSAMのretraction)。

SLAM問題を解けるようにしている要因

ソルバー出力の読み方

反復は実用的な基準で停止する。反復ごとのコスト減少が許容値を下回ったとき、更新量ノルム Δx\|\Delta\mathbf{x}\| が無視できるほど小さくなったとき、勾配ノルムがゼロに近づいたとき、あるいは反復回数/時間予算が尽きたとき(リアルタイム系ではキーフレームごとのバンドル調整を数回の反復に制限することが多い)である。解が失敗する場合、症状は原因と対応付けられる。コストが爆発するのは通常、初期推定が悪いかヤコビアンにバグがあることを意味する。小さなステップを何度も繰り返しながらコストが高いまま停滞するのは、悪い局所最小値への収束、あるいはモデル化されていない外れ値を示唆する。正規方程式の行列がランク落ちしているのは、観測不可能な方向(ゲージの自由度、制約のないランドマーク)を指しており、事前分布や固定が必要である。

SLAMにおける意義

バンドル調整、ポーズグラフ最適化、VIOのスライディングウィンドウ、直接測光アライメントなど、現代のあらゆるSLAMシステムのバックエンドは、マニフォルド上でGauss-Newton/LM反復によって解かれる疎な非線形最小二乗問題の一例である。確率論的な視点(MLE & MAP)は何を最小化すべきかを教え、非線形最適化はどのように最小化するかを教える。ここでの習熟度はどこでも役に立つ——論文の「we minimize the following energy」の節を読むこと、発散の診断(初期化が悪いのか、パラメータ化が間違っているのか、外れ値なのか)、Ceres/g2o/GTSAMを効果的に使うこと、これらすべてがこの内容に基づいている。

ハンズオン

関連ノート