Basic Linear Algebra
線形代数はSLAMの作業言語である。点、ポーズ、残差、観測はすべてベクトルと行列であり、あらゆるソルバーは最終的に行列計算に帰着する。
ベクトルと行列
ベクトル は 個の実数からなる列である。SLAMでは、ベクトルは点、平行移動、速度、残差を表す。行列 は から への線形写像を表す。SLAMの幾何における中心的な対象は、行列とベクトルの積 である。
行列式
正方行列の行列式 は、線形写像 による符号付きの体積スケーリング係数を測る。重要な事実:
- は正則である。
- 回転行列 について: 。
- 。
内積と外積
の内積は であり、射影や直交性のチェックに使われる。外積 は両方に垂直なベクトルを生成し、その大きさは である。これは基本行列(essential matrix)の歪対称行列表現や、法線ベクトルの計算に現れる。
外積は歪対称行列を用いた行列とベクトルの積として書くことができる:
この小さな恒等式はSLAMのあらゆる場所に現れる。基本行列(essential matrix)は であり、 のリー代数元は歪対称行列である。
ランク、逆行列、転置
のランクはその列空間の次元である。SLAMでは、基礎行列(fundamental matrix)は構成上ランク2であり、点群の行列はすべての点が同一平面上にある場合(SLAM初期化における縮退構成)にランク不足となる。逆行列 は を満たし、 のときに限り存在する。回転行列については (直交性)が成り立ち、これは完全な逆行列の計算を避けるために常に活用される。
行列が有効な回転であることをチェックする簡単なNumPyの例:
import numpy as np
theta = np.pi / 4
R = np.array([[np.cos(theta), -np.sin(theta), 0],
[np.sin(theta), np.cos(theta), 0],
[0, 0, 1]])
print(np.allclose(R.T @ R, np.eye(3))) # True: orthogonal
print(np.linalg.det(R)) # 1.0: proper rotation
線形システムを解く
SLAMのバックエンドは明示的に行列を逆行列化することはない。分解して解くのである:
- コレスキー分解()は対称正定値システムに用いられる — バンドル調整の正規方程式 はこの方法で解かれる(実際には疎コレスキーを使う)。
- QR分解は、 を作らずに に直接作用するため( は条件数を二乗してしまう)、最小二乗法に対して数値的により安全な代替手段である。
- SVDは最も頑健(かつ最も計算コストが高い)な選択肢であり、ランク不足の斉次系 を明確に扱える唯一の方法である。
特異値分解(SVD)
SVDはSLAMにおいて最も重要な行列分解である。任意の行列 は次のように分解される:
ここで と は直交行列であり、 は非負の特異値 を持つ対角行列である。幾何学的には、任意の線形写像は回転/反転、続いて座標ごとのスケーリング、そして再度の回転/反転として表される。SLAMにおける用途:
- 基本行列(essential matrix)の分解: のSVDから4つの候補となる相対ポーズ が得られる。
- DLT三角測量: 解は の最小特異値に対応する右特異ベクトルである。
- ICP位置合わせ: 相互共分散行列 のSVDから最適な回転が得られる。
比 は条件数である。これは線形方程式を解く際に入力雑音がどの程度増幅されるかを測る。悪条件のシステム(巨大な条件数)は、8点アルゴリズムやDLTにおいて座標の正規化が重要である理由である。
固有値と固有ベクトル
を満たす非零ベクトル とスカラー は、 の固有ベクトルと固有値である。ハリスコーナー検出器は、構造テンソルの固有値から画像パッチを分類し、点群のPCAは共分散行列の固有ベクトルを用いて主方向(例えば平面のフィッティング)を求める。対称行列(共分散、構造テンソル、)については、固有値は実数であり固有ベクトルは直交する — そして固有値分解はSVDと一致する。
よくある落とし穴
- 行列を明示的に逆行列化すること(
inv(A) @ b)は、解を求めること(np.linalg.solve、コレスキー)よりも遅く、精度も低い。 - 斉次系を解く前に正規化を忘れること — DLTと8点アルゴリズムは、生のピクセル座標に対しては大きく性能が低下する。
- SVDベースの回転復元における符号/反転の曖昧性: 常に を確認し、反転が得られた場合は符号反転で修正すること。
SLAMにおける意義
SLAMパイプラインのあらゆる段階は、変装した線形代数である。点の投影には行列積が使われ、最小限のソルバー(8点法、DLT、ICP)はSVDに帰着し、バンドル調整の正規方程式は大きな疎な線形システムである。ここでの習熟度 — 特にSVD、直交行列、ランクに関するもの — が、SLAMの論文を読み、幾何コードをデバッグする力を与えてくれる。