舒尔补定义
给定任意的矩阵块 M,如下所示:
M = [ A B C D ] M = \begin{bmatrix} A & B \\ C & D \end{bmatrix} M=[ACBD]
- 如果矩阵块 D 是可逆的,则 A − B D − 1 C A - BD^{-1}C A−BD−1C称之为 D 关于 M 的舒尔补,对此可以边缘化掉D对应的变量,保留A对应变量的约束关系。
- 如果矩阵块 A 是可逆的,则 D − C A − 1 B D - CA^{-1}B D−CA−1B称之为 A 关于 M 的舒尔补,对此可以边缘化掉A对应的变量,保留D对应变量的约束关系。
边缘化
随着环境探索的深入,系统状态变量(包括机器人的位姿和环境特征点的位置等)不断增加而导致的计算复杂度和内存消耗过高,这时候需要去除之前的变量,不再优化其参数,但其新的数据仍然存在约束,直接丢掉这些数据会造成约束信息丢失,所以要将其封装成先验信息,加入到大的非线性优化问题中作为一部分误差,这一步即为边缘化。
优化过程中会得到增量方程:
J T J δ x = − J T e H δ x = b \begin{align*} J^TJ\delta x &= -J^Te\\ H\delta x &= b \end{align*} JTJδxHδx=−JTe=b
即:
[ H 11 H 12 H 12 T H 22 ] [ δ x 1 δ x 2 ] = [ b 1 b 2 ] \left[ \begin{matrix} H_{11} & H_{12} \\ H_{12}^T & H_{22} \end{matrix} \right] \left[ \begin{matrix} \delta x_1 \\ \delta x_2 \end{matrix} \right] =\left[ \begin{matrix} b_1 \\ b_2 \end{matrix} \right] [H11H12TH12H22][δx1δx2]=[b1b2]
对上式进行舒尔补,两边同时左乘一个矩阵 [ I 0 − H 12 T H 11 − 1 I ] \left[ \begin{matrix} I& 0 \\ -H_{12}^TH_{11}^{-1} &I \end{matrix} \right] [I−H12TH11−10I],得:
[ H 11 H 12 0 H 22 − H 12 T H 11 − 1 H 12 ] [ δ x 1 δ x 2 ] = [ b 1 b 2 ] \left[ \begin{matrix} H_{11} & H_{12} \\ 0 & H_{22}-H_{12}^TH_{11}^{-1}H_{12} \end{matrix} \right] \left[ \begin{matrix} \delta x_1 \\ \delta x_2 \end{matrix} \right] =\left[ \begin{matrix} b_1 \\ b_2 \end{matrix} \right] [H110H12H22−H12TH11−1H12][δx1δx2]=[b1b2]
则:
( H 22 − H 12 T H 11 − 1 H 12 ) δ x 2 = b 2 − H 12 T H 11 − 1 b 1 (H_{22} - H_{12}^TH_{11}^{-1}H_{12})\delta x_2 = b_2 - H_{12}^TH_{11}^{-1}b_1 (H22−H12TH11−1H12)δx2=b2−H12TH11−1b1
如此便把 δ x 1 \delta x_1 δx1 给边缘化了,得到只关于 δ x 2 \delta x_2 δx2 的公式,并最大化地利用了所有信息。
边缘化约束
令 H ′ = H 22 − H 12 T H 11 − 1 H 12 H' = H_{22} - H_{12}^TH_{11}^{-1}H_{12} H′=H22−H12TH11−1H12, b ′ = b 2 − H 12 T H 11 − 1 b 1 b' = b_2 - H_{12}^TH_{11}^{-1}b_1 b′=b2−H12TH11−1b1,则
H ′ δ x 2 = b ′ \begin{align*} H'\delta x_2 &= b' \end{align*} H′δx2=b′
从 H ′ H' H′、 b ′ b' b′中分解获取雅可比矩阵 J J J 和残差 e e e:
因为 H ′ H' H′是实对称矩阵,可进行特征值分解得:
H ′ = P D P T H' = PDP^T H′=PDPT
这里的 P P P 是由特征向量组成的矩阵,而 D D D 是对角矩阵,包含特征值。
因为 D D D 是对角矩阵,所以易分解为: D = D T D D = \sqrt{D}^T\sqrt{D} D=DTD,则
H ′ = P D P T = P D T D P T = ( D P T ) T ( D P T ) H' = PDP^T = P\sqrt{D}^T\sqrt{D}P^T = (\sqrt{D}P^T)^T(\sqrt{D}P^T) H′=PDPT=PDTDPT=(DPT)T(DPT)
因为 H ′ = J T J H' = J^TJ H′=JTJ,所以
J = D P T J = \sqrt{D}P^T J=DPT
因为 b ′ = − J T e b' = -J^Te b′=−JTe,且 P − 1 = P T , D T = D P^{-1}=P^T,\sqrt{D}^T = \sqrt{D} P−1=PT,DT=D,所以
e = − ( J T ) − 1 b ′ = − ( ( D P T ) T ) − 1 b ′ = − ( ( P D T ) ) − 1 b ′ = − P T D − 1 b ′ e = -(J^T)^{-1}b' = -((\sqrt{D}P^T)^T)^{-1}b' = -((P\sqrt{D}^T))^{-1}b' = -P^T\sqrt{D}^{-1}b' e=−(JT)−1b′=−((DPT)T)−1b′=−((PDT))−1b′=−PTD−1b′
约束优化
记录边缘化得到的 J 、 e 、 δ x 2 J、e、\delta x_2 J、e、δx2,这是优化过程中使用的变量。
在优化过程中, δ x 2 \delta x_2 δx2的值会改变,记为 δ x 2 ′ \delta x_2' δx2′,而边缘化是约束 δ x 2 \delta x_2 δx2尽量不变,因此
δ e = δ x 2 ′ − δ x 2 \delta e = \delta x_2' - \delta x_2 δe=δx2′−δx2
其中, δ x 2 \delta x_2 δx2是边缘化是剩余的变量值,是固定的,整个优化过程不变
在这个优化过程中,雅可比矩阵 J J J 保持不变,残差求取公式为:
e ′ = e + J δ e J ′ = J \begin{align*} e' &= e + J\delta e \\ J' &= J \end{align*} e′J′=e+Jδe=J
这里可以认为 e ′ = f ( e ) e'=f(e) e′=f(e),通过一阶泰勒展开后就有 e + J δ e e + J\delta e e+Jδe。因为边缘化时求取了 J J J ,认为在 e e e 附近的导数为 J J J ,这个值是保持不变的,由边缘化来固定这个值。换个说法,可以认为边缘化的目的是了解剩余变量在上一次优化后的值附近是如何变化的,即导数是什么。