文章目录
- Square Root SAM论文原理
- 核心原理
- SLAM问题的3种表示
- 贝叶斯网络
- 因子图(Factor graph)
- 马尔科夫随机场(Markov Random Field, MRF)
- SLAM最小二乘问题&线性化
- 因式分解 factorization
- 矩阵与图(Matrices ⇔ Graphs)
- 因式分解&变量消元(Factorization ⇔ Variable Elimination )
- Cholesky分解(或LDL分解)
- 变量消除在Cholesky分解中的作用
- 步骤
- QR分解
- 变量消除在QR分解中的作用
- 步骤
- 变量计算(回代Back-substitution)
- 基本概念
- 回代算法
- 具体步骤
- 例子
- 因式分解与变量顺序
- SAM流程
- Batch √ SAM
- Linear Incremental √ SAM
- Non-linear Incremental √ SAM
论文《Square Root SAM Simultaneous Localization and Mapping via Square Root Information Smoothing》
Square Root SAM论文原理
核心原理
关于SLAM问题的求解:
1、将非线性SLAM问题通过一阶泰勒展开化成线性问题Ax=b,再通过对A或A^TA进行因式分解(factoration基于Variable Elimination),得到上三角矩阵R,构建新问题Rx=d。
通过回代(backward substitution)的方法进行求解。
2、本文说明,变量在雅可比矩阵的排列顺序能够影响因式分解的稀疏性,本文使用colamd的排序方法应用于SLAM块结构(将位姿或特征点坐标均看成一个变量),增加因式分解及回代求解效率。
3、提出的smoothing approach的框架(利用a good order & factoration),即高效优化截止到当前帧的整个机器人的位姿及特征点。
SLAM问题的3种表示
贝叶斯网络
在贝叶斯概率网络表示中,机器人的状态 x x x 受顶部的马尔可夫链限制,而机器人的环境在底部由一组地标 l l l 表示。中间层的测量值 z z z 受机器人的状态和测量的地标参数限制。
P ( X , L , Z ) = P ( x 0 ) ∏ i = 1 M P ( x i ∣ x i − 1 , u i ) ∏ k = 1 K P ( z k ∣ x i k , l j k ) P(X, L, Z)=P\left(x_{0}\right) \prod_{i=1}^{M} P\left(x_{i} \mid x_{i-1}, u_{i}\right) \prod_{k=1}^{K} P\left(z_{k} \mid x_{i_{k}}, l_{j_{k}}\right) P(X,L,Z)=P(x0)i=1∏MP(xi∣xi−1,ui)k=1∏KP(zk∣xik,ljk)
其中:
P ( x 0 ) P(x_{0}) P(x0)表示先验
P ( x i ∣ x i − 1 , u i ) P(x_{i}|x_{i-1},u_{i}) P(xi∣xi−1,ui)表示状态传递概率
P ( z k ∣ x i k , l j k ) P(z_{k}|x_{i_{k}},l_{j_{k}}) P(zk∣xik,ljk)表示观测概率
因子图(Factor graph)
上图中,位姿和地标分别对应于圆形节点,每个测量值对应于因子节点(黑色实心圆圈)
状态传递方程与后验概率方程:
x i = f i ( x i − 1 , u i ) + w i ⇔ P ( x i ∣ x i − 1 , u i ) ∝ exp − 1 2 ∥ f i ( x i − 1 , u i ) − x i ∥ Λ i 2 ) x_{i}=f_{i}(x_{i-1},u_{i})+w_{i}\qquad\Leftrightarrow\qquad P(x_{i}|x_{i-1},u_{i})\propto\exp-{\frac{1}{2}}\|f_{i}(x_{i-1},u_{i})-x_{i}\|_{\Lambda_{i}}^{2}) xi=fi(xi−1,ui)+wi⇔P(xi∣xi−1,ui)∝exp−21∥fi(xi−1,ui)−xi∥Λi2)
观测方程与后验概率方程:
z k = h k ( x i k , l j k ) + v k ⇔ P ( z k ∣ x i k , l j k ) ∝ exp − 1 2 ∣ h k ( x i k , l j k ) − z k ∣ ∣ Σ k 2 z_{k}=h_{k}(x_{i k},l_{j k})+v_{k}\qquad\Leftrightarrow\qquad P(z_{k}|x_{i k},l_{j k})\propto\exp-{\frac{1}{2}}|h_{k}(x_{i k},l_{j k})-z_{k}||_{\Sigma_{k }}^{2} zk=hk(xik,ljk)+vk⇔P(zk∣xik,ljk)∝exp−21∣hk(xik,ljk)−zk∣∣Σk2
马尔科夫随机场(Markov Random Field, MRF)
MRF 的图形是无向的,没有因子节点:其邻接结构指示哪些变量由公共因子(度量或约束)链接。
P ( Θ ) ∝ ∏ i ϕ i ( θ i ) ∏ { i , j } , i < j ψ i j ( θ i , θ j ) ϕ 0 ( x 0 ) ∝ P ( x 0 ) ψ ( i − 1 ) i ( x i − 1 , x i ) ∝ P ( x i ∣ x i − 1 , u i ) ψ i k j k ( x i k , l j k ) ∝ P ( z k ∣ x i k , l j k ) \begin{gathered} P(\Theta)\propto\prod_{i}\phi_{i}(\theta_{i})\prod_{\{i,j\},i<j}\psi_{ij}(\theta_{i},\theta_{j}) \\ \phi_0(x_0)\propto P(x_0) \\ \psi_{(i-1)i}(x_{i-1},x_i)\propto P(x_i|x_{i-1},u_i) \\ \psi_{i_kj_k}(x_{i_k},l_{j_k})\propto P(z_k|x_{i_k},l_{j_k}) \end{gathered} P(Θ)∝i∏ϕi(θi){i,j},i<j∏ψij(θi,θj)ϕ0(x0)∝P(x0)ψ(i−1)i(xi−1,xi)∝P(xi∣xi−1,ui)ψikjk(xik,ljk)∝P(zk∣xik,ljk)
SLAM最小二乘问题&线性化
结合状态传递方程与观测方程:
Θ ∗ = Δ argmin Θ { ∑ i = 1 M ∥ f i ( x i − 1 , u i ) − x i ∥ Λ i 2 + ∑ k = 1 K ∥ h k ( x i k , l j k ) − z k ∥ Σ k 2 } \Theta^*\stackrel{\Delta}{=}\underset{\Theta}{\operatorname*{argmin}}\left\{\sum_{i=1}^M\|f_i(x_{i-1},u_i)-x_i\|_{\Lambda_i}^2+\sum_{k=1}^K\|h_k(x_{i_k},l_{j_k})-z_k\|_{\Sigma_k}^2\right\} Θ∗=ΔΘargmin{i=1∑M∥fi(xi−1,ui)−xi∥Λi2+k=1∑K∥hk(xik,ljk)−zk∥Σk2}
待解未知量:各个时刻的位姿(截至当前时刻): x i x_i xi, 观测路标点的位置 l j l_j lj
将状态传递方程与观测方程对变量进行线性化:
f i ( x i − 1 , u i ) − x i ≈ { f i ( x i − 1 0 , u i ) + F i i − 1 δ x i − 1 } − { x i 0 + δ x i } = { F i i − 1 δ x i − 1 − δ x i } − a i F i i − 1 = Δ ∂ f i ( x i − 1 , u i ) ∂ x i − 1 ∣ x i − 1 0 f_{i}(x_{i-1},u_{i})-x_{i}\approx\left\{f_{i}(x_{i-1}^{0},u_{i})+F_{i}^{i-1}\delta x_{i-1}\right\}-\left\{x_{i}^{0}+\delta x_{i}\right\}=\left\{F_{i}^{i-1}\delta x_{i-1}-\delta x_{i}\right\}-a_{i}\\F_{i}^{i-1}\stackrel{\Delta}{=}\frac{\partial f_{i}(x_{i-1},u_{i})}{\partial x_{i-1}}\Bigg|_{x_{i-1}^{0}} fi(xi−1,ui)−xi≈{fi(xi−10,ui)+Fii−1δxi−1}−{xi0+δxi}={Fii−1δxi−1−δxi}−aiFii−1=Δ∂xi−1∂fi(xi−1,ui) xi−10
关于x_i的雅可比矩阵为单位阵。
h k ( x i k , l j k ) − z k ≈ { h k ( x i k 0 , l j k 0 ) + H k i k δ x i k + J k j k δ l j k } − z k = { H k i k δ x i k + J k j k δ l j k } − c k H k i k ≜ ∂ h k ( x i k , l j k ) ∂ x i k ∣ ( x i k 0 , l j k 0 ) J k j k ≜ ∂ h k ( x i k , l j k ) ∂ l j k ∣ ( x i k 0 , l j k 0 ) ← h_{k}(x_{i_{k}},l_{j_{k}})-z_{k}\approx\left\{h_{k}(x_{i_{k}}^{0},l_{j_{k}}^{0})+H_{k}^{i_{k}}\delta x_{i_{k}}+J_{k}^{j_{k}}\delta l_{j_{k}}\right\}-z_{k}=\left\{H_{k}^{i_{k}}\delta x_{i_{k}}+J_{k}^{j_{k}}\delta l_{j_{k}}\right\}-c_{k}\\H_{k}^{i_{k}}\triangleq\frac{\partial h_{k}(x_{i_{k}},l_{j_{k}})}{\partial x_{i_{k}}}\bigg|_{(x_{i_{k}}^{0},l_{j_{k}}^{0})}\quad J_{k}^{j_{k}}\triangleq\frac{\partial h_{k}(x_{i_{k}},l_{j_{k}})}{\partial l_{j_{k}}}\bigg|_{(x_{i_{k}}^{0},l_{j_{k}}^{0})}\quad\leftarrow hk(xik,ljk)−zk≈{hk(xik0,ljk0)+Hkikδxik+Jkjkδljk}−zk={Hkikδxik+Jkjkδljk}−ckHkik≜∂xik∂hk(xik,ljk) (xik0,ljk0)Jkjk≜∂ljk∂hk(xik,ljk) (xik0,ljk0)←
得到线性化后的方程:
δ ∗ = argmin δ { ∑ i = 1 M ∥ F i i − 1 δ x i − 1 + G i i δ x i − a i ∥ Λ i 2 + ∑ k = 1 K ∥ H k i k δ x i k + J k j k δ l j k − c k ∥ Σ k 2 } \delta^{*}=\underset{\delta}{\operatorname*{argmin}} \left\{\sum_{i=1}^{M}\|F_{i}^{i-1}\delta x_{i-1}+G_{i}^{i}\delta x_{i}-a_{i}\|_{\Lambda_{i}}^{2}+\sum_{k=1}^{K}\|H_{k}^{i_{k}}\delta x_{i_{k}}+J_{k}^{j_{k}}\delta l_{j_{k}}-c_{k}\|_{\Sigma_{k}}^{2}\right\} δ∗=δargmin{i=1∑M∥Fii−1δxi−1+Giiδxi−ai∥Λi2+k=1∑K∥Hkikδxik+Jkjkδljk−ck∥Σk2}
该方程使用马氏距离来定义: ∥ e ∥ Σ 2 = Δ e T Σ − 1 e = ( Σ − T / 2 e ) T ( Σ − T / 2 e ) = ∥ Σ − T / 2 e ∥ 2 2 \|e\|_{\Sigma}^{2}\stackrel{\Delta}{=}e^{T}\Sigma^{-1}e=(\Sigma^{-T/2}e)^{T}(\Sigma^{-T/2}e)=\left\|\Sigma^{-T/2}e\right\|_{2}^{2} ∥e∥Σ2=ΔeTΣ−1e=(Σ−T/2e)T(Σ−T/2e)= Σ−T/2e 22
线性化方程的意义:
- 好的线性化点(该点与最优解与残差的变化成线性关系)直接将非线性问题转为线性问题。
- 使用迭代法完成求解时,使用该线性化方程求变量更新量,相当于一次牛顿法求\delta x
将整个整理成大矩阵:
A的维度为 ( N d x + K d z ) × ( N d x + M d l ) (N d_x + Kd_z) × (N d_x + M d_l) (Ndx+Kdz)×(Ndx+Mdl)。
因式分解 factorization
求解上述线性方程,可以使用因式分解,构成Rx=d,其中R为上三角矩阵的形式,而后使用反向消元方法来完成求解。
1、 对 A T A A^TA ATA进行Cholesky分解:
Cholesky 分解是把一个对称正定的矩阵表示成一个下三角矩阵L和其转置的乘积的分解。它要求矩阵的所有特征值必须大于零,故分解的下三角的对角元也是大于零的。Cholesky分解法又称平方根法,是当A为实对称正定矩阵时,LU三角分解法的变形。 A = L L T A=LL^T A=LLT
原问题可化为:
A T A δ ∗ = A T b A^TA\delta^*=A^Tb ATAδ∗=ATb I ≜ A T A = R T R \mathcal{I}\triangleq A^{T}A=R^{T}R I≜ATA=RTR R T y = A T b R^Ty=A^Tb RTy=ATb R T y = A T , R δ ∗ = y R^{T}y=A^{T}, R\delta^*=y RTy=AT,Rδ∗=y
从而得:
R δ ∗ = y R\delta^*=y Rδ∗=y
2、三角化LDL 分解
将信息矩阵三角化:
I = R T R = L D L T \mathcal{I}=R^TR=LDL^T I=RTR=LDLT
3、 QR分解
QR 分解将一个矩阵分解一个正交矩阵 (酉矩阵) 和一个三角矩阵的乘积. QR 分解被广泛应用于线性最小二乘问题的求解和矩阵特征值的计算. A=QR。
A ∈ C m × n A ∈ C_{m×n} A∈Cm×n(m ≥ n,约束方程远大于待求解变量个数). 则存在一个单位列正交矩阵 Q ∈ C m × n Q ∈ C_{m×n} Q∈Cm×n,(即 Q ∗ Q = I n × n Q∗Q =I_{n×n} Q∗Q=In×n) 和 一个上三角矩阵 R ∈ C n × n R∈C_{n×n} R∈Cn×n, 使得: A = Q R A = QR A=QR.
文中 Q ∈ C m × m , Q T ∗ A = R Q∈ C_{m×m},Q^T*A=R Q∈Cm×m,QT∗A=R的补充。
Q T A = [ R 0 ] Q T b = [ d e ] Q^TA=\left[\begin{array}{c}R\\0\end{array}\right]\quad Q^Tb=\left[\begin{array}{c}d\\e\end{array}\right] QTA=[R0]QTb=[de]
对于密集矩阵A的分解,首选方法是从左到右逐列计算R。对于每一列j,通过将左边的A与Householder reflection矩阵Hj相乘,将对角线下方的所有非零元素归零。在n次迭代之后,A被完全因子化:
H n . . H 2 H 1 A = Q T A = [ R 0 ] \left.H_{n}..H_{2}H_{1}A=Q^{T}A=\left[\begin{array}{c}{R}\\{0}\end{array}\right.\right] Hn..H2H1A=QTA=[R0]
得到分解矩阵(上三角矩阵R)后,可以将原先的最小二乘问题(LS problem)转化为如下方程:
∥ A δ − b ∥ 2 2 = ∥ Q T A δ − Q T b ∥ 2 2 = ∥ R δ − d ∥ 2 2 + ∥ e ∥ 2 2 \|A \delta-b\|_{2}^{2}=\left\|Q^{T} A \delta-Q^{T} b\right\|_{2}^{2}=\|R \delta-d\|_{2}^{2}+\|e\|_{2}^{2} ∥Aδ−b∥22= QTAδ−QTb 22=∥Rδ−d∥22+∥e∥22
即:
R δ = d R\delta =d Rδ=d
以上问题可以通过反向消元(back-substitution)的方法进行求解
因此QR分解的计算复杂度主要由Householder reflections 矩阵的计算决定:即2(m-n/3)n^2。
将 QR 与 Cholesky 因式分解进行比较,我们发现两种算法在 m>> n 时都需要 O(mn^2 ) 操作,但 QR 因式分解慢了 2 倍。虽然这些数字仅对密集矩阵有效,但我们已经看到,在实践中,LDL 和 Cholesky 因式分解在稀疏问题上也远远优于 QR 因式分解,而不仅仅是常数因子。
矩阵与图(Matrices ⇔ Graphs)
雅可比矩阵A对应SLAM因子图,表征观测与变量之间的关系;
信息矩阵ATA对应markov random field因子图,表征变量与变量之间的关系。
需要强调的是:SLAM问题的变量都是以参数块作为一个整体的,如特征点的3维位置作为一个参数块,6-DOF位姿作为一个参数块。矩阵与图的对应是块参数的对应关系。
从而:
A 的块结构与与 SAM 关联的因子图的邻接矩阵完全对应。
信息矩阵 I = ATA 是与 SLAM 问题相关的马尔可夫随机场矩阵。同样,在块级别,ATA 的稀疏性模式恰好是关联 MRF 的邻接矩阵。MRF 中的节点对应于机器人状态和地标。链接表示里程计或里程碑测量值。
在一些中,采用MRF图视图来揭示SLAM的滤波版本中固有的相关性结构。结果表明,当边缘化过去的轨迹 x 1 : M − 1 x_{1:M-1} x1:M−1 时,信息矩阵不可避免地变得完全密集。因此,这些方法的重点是选择性地删除链接以降低滤波器的计算成本,并取得了巨大的成功。相比之下,这篇文章考虑了与平滑信息矩阵 I 相关的 MRF,该矩阵不会变得密集,因为过去的状态永远不会被边缘化,SAM信息矩阵存放的是是完整的变量关系(从初始到当前)。
因式分解&变量消元(Factorization ⇔ Variable Elimination )
QR分解和Cholesky(或LDL)分解都是基于变量消除算法的矩阵分解方法。在求解线性方程组、最小二乘问题等数值计算中,它们都涉及通过逐步消除变量来简化问题。让我们深入理解它们如何基于变量消除。
Cholesky分解(或LDL分解)
Cholesky分解将一个对称正定矩阵 (A) 分解为一个下三角矩阵 (L) 及其转置 (L^T) 的乘积,即 ( A = L L T A = LL^T A=LLT)。LDL分解是Cholesky分解的一种变体,将矩阵分解为一个下三角矩阵 (L),一个对角矩阵 (D),和 ( L T L^T LT) 的乘积,即 ( A = L D L T A = LDL^T A=LDLT)。
变量消除在Cholesky分解中的作用
- 逐步消除变量:通过逐步消去矩阵中的非对角线元素,将矩阵转换为一个易于处理的形式。
- 保持稀疏性:在处理稀疏矩阵时,通过选择合适的消除顺序,可以最大限度地保持矩阵的稀疏性,提高计算效率。
步骤
- 从矩阵 (A) 的第一行和第一列开始,计算第一个对角元素和下三角矩阵 (L) 的第一列。
- 对剩余的子矩阵进行类似的操作,消去非对角线元素,逐步构建下三角矩阵 (L) 和对角矩阵 (D)。
- 重复这一过程,直到处理完所有元素。
QR分解
QR分解将一个矩阵 (A) 分解为一个正交矩阵 (Q) 和一个上三角矩阵 (R) 的乘积,即 (A = QR)。QR分解可以通过一系列的Givens旋转或Householder反射来实现,这两者本质上都是基于变量消除的过程。
变量消除在QR分解中的作用
- Householder反射:通过引入Householder矩阵,将一个向量反射到某个子空间,使得消去矩阵中的某些元素。这个过程等价于逐步消除变量,简化矩阵结构。
- Givens旋转:通过Givens旋转,可以将矩阵的某些元素变为零,从而逐步将矩阵转换为上三角形。这也是一种变量消除的形式。
步骤
- 从矩阵 (A) 的第一列开始,通过Householder反射或Givens旋转将下面的元素变为零。
- 处理下一列,通过类似的操作消除非对角线元素。
- 继续这一过程,直到得到上三角矩阵 (R)。
QR分解和Cholesky分解(或LDL分解)都基于变量消除的思想,通过逐步消去矩阵中的非对角线元素,将问题简化为易于处理的上三角或下三角形式。这些分解方法不仅用于求解线性方程组和最小二乘问题,还广泛应用于各种数值计算和优化问题中。
选择合适的消除顺序对于保持矩阵稀疏性和提高计算效率至关重要。通过合理的变量消除,可以有效地简化复杂问题,降低计算复杂度。
变量在信息矩阵及A阵中的排列序列即决定了变量消元(elimination)的顺序(列驱动:从左到右)。
变量的排列序列影响因式分解的结果,影响R阵的稀疏程度。
使用反向消元求解的方法依赖R阵的稀疏性,当分解的结果R阵比较稠密时,此时使得因式分解的计算量变大,或者大于直接的A阵求逆。
变量计算(回代Back-substitution)
在得到R\delta=d的关系后,该等式示意图如下:
回代(Back-substitution)是一种用于求解上三角矩阵线性方程组的算法。它通常用于解决通过Gaussian消去法或QR分解等方法得到的方程组。
基本概念
假设我们有一个上三角矩阵 (R) 和一个向量 (b),并希望求解线性方程组 (Rx = b)。上三角矩阵的特点是它的下三角部分全是零,即所有的非零元素都位于对角线及其上方。
回代算法
回代的基本思路是从最后一个方程开始,逐步向上求解每个变量。具体步骤如下:
- 初始化:从最后一个方程(倒数第一行)开始求解。
- 逐步求解:根据上一个变量的值,向上求解前一个变量,直到所有变量都求出。
具体步骤
假设我们有一个 ( n × n n \times n n×n) 的上三角矩阵 ( R R R),和一个 ( n n n) 维向量 ( b b b),我们的目标是求解 ( R x = b Rx = b Rx=b) 中的 ( x x x)。
-
从第 ( n n n) 个方程开始:
R n n x n = b n R_{nn} x_n = b_n Rnnxn=bn
求解:
x n = b n R n n x_n = \frac{b_n}{R_{nn}} xn=Rnnbn -
对于第 ( k k k) 个方程(从 ( n − 1 n-1 n−1) 到 1):
[ R_{kk} x_k + R_{k, k+1} x_{k+1} + \cdots + R_{kn} x_n = b_k ]
已知 (x_{k+1}, \ldots, x_n) 的值,求解:
[ x_k = \frac{b_k - \sum_{j=k+1}^{n} R_{kj} x_j}{R_{kk}} ]
例子
假设我们有以下上三角矩阵 (R) 和向量 (b):
R = ( 2 3 1 0 1 4 0 0 3 ) , b = ( 8 7 9 ) R = \begin{pmatrix} 2 & 3 & 1 \\ 0 & 1 & 4 \\ 0 & 0 & 3 \end{pmatrix}, \quad b = \begin{pmatrix} 8 \\ 7 \\ 9 \end{pmatrix} R= 200310143 ,b= 879
我们从最后一个方程开始:
3 x 3 = 9 ⇒ x 3 = 3 3x_3 = 9 \Rightarrow x_3 = 3 3x3=9⇒x3=3
然后是第二个方程:
x 2 + 4 x 3 = 7 ⇒ x 2 + 4 ( 3 ) = 7 ⇒ x 2 = 7 − 12 ⇒ x 2 = − 5 x_2 + 4x_3 = 7 \Rightarrow x_2 + 4(3) = 7 \Rightarrow x_2 = 7 - 12 \Rightarrow x_2 = -5 x2+4x3=7⇒x2+4(3)=7⇒x2=7−12⇒x2=−5
最后是第一个方程:
2 x 1 + 3 x 2 + x 3 = 8 ⇒ 2 x 1 + 3 ( − 5 ) + 3 = 8 ⇒ 2 x 1 − 15 + 3 = 8 ⇒ 2 x 1 − 12 = 8 ⇒ 2 x 1 = 20 ⇒ x 1 = 10 2x_1 + 3x_2 + x_3 = 8 \Rightarrow 2x_1 + 3(-5) + 3 = 8 \Rightarrow 2x_1 - 15 + 3 = 8 \Rightarrow 2x_1 - 12 = 8 \Rightarrow 2x_1 = 20 \Rightarrow x_1 = 10 2x1+3x2+x3=8⇒2x1+3(−5)+3=8⇒2x1−15+3=8⇒2x1−12=8⇒2x1=20⇒x1=10
所以,解 (x) 是:
x = ( 10 − 5 3 ) x = \begin{pmatrix} 10 \\ -5 \\ 3 \end{pmatrix} x= 10−53
回代是一种简单而高效的方法,用于求解上三角矩阵的线性方程组。通过从最后一个变量开始逐步向上求解,可以快速找到解。这个过程在许多数值算法中,如Gaussian消去法和QR分解后,是不可或缺的步骤。
因式分解与变量顺序
1、A good ordering
变量的排列顺序影响因式分解的结果,下图维用于良好排序的三角化(对信息矩阵进行分解得到的上三角R阵)图(colamd)。这是一个有向图,其中每条边对应于 Cholesky 三角形 R 中的非零。
The triangulated graph for a good ordering (colamd):
Triangulated 用于说明经过因式分解三角化后的R对应的图。
QR和Cholesky(或LDL)两种分解方法都基于变量消元算法。这些方法的区别在于,QR 从因子图中消除变量节点并获得 A = Q R A = QR A=QR,而 Cholesky 或 LDL 从 MRF 开始,因此获得 A T A = R T R A^TA = R^TR ATA=RTR。两种方法一次消除一个变量,从 δ 1 δ1 δ1 开始,对应于 A A A 或 I I I 的最左侧列。消元的结果是, δ 1 δ_1 δ1 现在表示为所有其他未知数 δ j > 1 δ_j>1 δj>1 的线性组合,系数位于 R R R 的相应行 R 1 R_1 R1 中。然而,在此过程中,连接到 δ 1 δ_1 δ1 的所有变量之间会引入新的依赖关系,这会导致边被添加到图形中。然后以类似的方式处理下一个变量,直到所有变量都被消除。消除所有变量的结果是一个有向的三角化(弦chordal)图。
2、LX ordering
一旦获得了关于 R R R的弦图,就可以得到 R R R的消元树,它被定义为消元后的弦图的深度优先生成树,它有助于说明回代阶段的计算流程。为了说明这一点,下图显示了通过使用众所周知的启发式方法获得的和弦图,该启发式方法首先消除地标,然后处理姿势(我们称之为 LX ordering)。
LX ordering triangulated graph
相应的消除树如下图所示。树的根对应于最后一个要消除的变量 δ n δ_n δn,这是在反向替换中要计算的第一个变量。然后,计算沿着树向下进行,虽然这通常是以相反的列顺序完成的,但不相交的子树中的变量可以按任何顺序计算,有关更详细的讨论。事实上,如果一个人只对某些变量感兴趣,就没有必要计算任何不包含它们的子树。
LX-ordering 排序的消元树,显示了如何通过反向替换来计算状态和地标估计值:首先计算根 - 这里是左侧的第一个姿势 - 然后沿着马尔可夫链向右继续。一旦计算出地标所连接的姿态,就可以计算出它们。
不同的参数排列顺序会影响因式分解后的结果,R的稀疏性。参数的排列会影响因式分解的效率(求R的复杂度)以及变量回代的效率。对于中等大小的问题,一种流行的方法是 colamd。
左侧是相关的雅可比 A A A 测量值,其中有 3 × 95 + 2 × 24 = 333 3×95+2×24 = 333 3×95+2×24=333 个未知数。行数 1126 等于(标量)测量值的数量。右边:(顶部)信息矩阵 I = A T A \mathcal{I} = A^T A I=ATA;(中)其上三角形Cholesky三角形 R R R;(下)通过更好的变量排序(使用colamd)获得的替代因子 amdR。能够看出使用colamd方法进行变量排序得到的R阵更为稀疏。
这篇文章将标量变量的集合(3维特征点位置以及6-DOF位姿)视为单个变量,并创建一个较小的图形,该图形封装了这些块之间的约束,而不是单个变量。在这个较小的图形上调用 colamd 更高效。是关于SLAM的变量问题基于块结构,colamd或任何其他近似排序算法都无法对块矩阵进行处理。虽然对 colamd 性能的影响可以忽略不计,但我们发现,让它直接在 SLAM MRF (块结构上,位置和位姿视为单变量)上工作而不是在稀疏矩阵 I \mathcal{I} I 上工作可以产生 2 倍到有时 100 倍的改进。
在某些情况下,任何排序都会导致相同的大填充。最坏的情况是完全连接的 MRF:从每个位置都可以看到每个地标。在这种情况下,消除任何变量将完全连接另一侧的所有变量,然后完全知道集团树的结构:如果先选择位姿pose,则根将是整个地图,一旦知道地图,所有姿势都将被计算出来。反之亦然,如果选择了一个地标,则轨迹将是集团树根集团,计算将通过(昂贵的)轨迹优化进行,然后(非常便宜的)计算地标。这两种情况的解决方法依赖于块标准分割逆或“舒尔补码”。
SAM流程
Batch √ SAM
- 构建雅可比 A A A 和 RHS b b b 测量。
- 找到一个好的列排序 p p p,并重新排序 A p ← A A_p ← A Ap←A.
- 使用 Cholesky 或 QR 分解方法求解 δ p ∗ = a r g m i n δ ∣ ∣ A p δ p – b ∣ ∣ 2 2 δ^∗_p = argmin_\delta ||A_pδ_p – b||^2_2 δp∗=argminδ∣∣Apδp–b∣∣22。
- 通过 δ ← δ p δ ← δp δ←δp,最优解,并恢复原始排序: r = p − 1 r = p^{−1} r=p−1
Linear Incremental √ SAM
当有新的观测到来时,信息矩阵会得到新的填充或更新:
I ′ = I ′ + a a T \mathcal{I}'=\mathcal{I}'+aa^T I′=I′+aaT
其中 T 是测量值雅可比 A 的新行,对应于在任何给定时间步长传入的新测量值。但是,这些算法通常仅针对密集矩阵实现,因此我们必须使用稀疏存储方案以获得最佳性能。虽然存在稀疏的Cholesky更新,但它们的实现相对复杂。第二种可能性,易于实现并适用于稀疏矩阵,是使用一系列给定旋转逐个消除新测量行中的非零。第三种可能性,我们在下面的模拟中采用,是更新矩阵 I \mathcal{I} I,并简单地使用完整的 Cholesky(或 LDL)因式分解。虽然这似乎很昂贵,但我们发现,有了良好的排序,主要成本不再是因式分解,而是更新信息矩阵I。
例如,实验结果表明,在运行结束时,通过稀疏乘法获得 Hessian 的成本大约是因式分解的 5 倍。重要的是,信息矩阵包含了从开始到当前时刻所有的测量信息,因此无需在每个时间步长进行因式分解。原则上,我们可以等到最后,然后计算整个轨迹和地图。然而,在实验过程中的任何时候,地图和/或轨迹都可以通过简单的因式分解和反向替换来计算,例如,用于可视化和/或路径规划目的。
Non-linear Incremental √ SAM
如果在增量设置中,SLAM问题是非线性的,并且线性化点可用,则上述线性增量解决方案适用。是否是这种情况很大程度上取决于传感器和机器人可用的先验知识。例如,在室内移动机器人中,通常没有良好的绝对方向传感器,这意味着我们必须围绕当前猜测的方向进行线性化。这正是EKF在更大规模环境中出现问题的原因,因为当过去的机器人姿势从MRF中消除时,这些可能错误的线性化点被“烘焙到”信息矩阵中。平滑方法的一个显著优点是,我们从不致力于给定的线性化,因为不会从图形中消除任何变量。有两种不同的方法可以重新线性化:在某些情况下,例如沿完整轨迹闭合一个大循环,重新线性化所有变量的成本更低。从本质上讲,这意味着我们每次都必须调用上面的批处理版本。从好的方面来说,我们的实验结果将表明,即使是这种看似昂贵的算法在EKF方法难以解决的大型问题上也相当实用。当只有较少数量的变量受到线性化点变化的影响时,另一种方法是有利的。在这种情况下,可以应用降级和更新技术暂时从因子中删除这些变量,然后使用新的线性化点再次添加它们。