Square Root SAM論文原理

文章目錄

    • 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=1M?P(xi?xi?1?,ui?)k=1K?P(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?Λi?2?)

觀測方程與后驗概率方程:
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?Σk?2?

馬爾科夫隨機場(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?)ψik?jk??(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=1M?fi?(xi?1?,ui?)?xi?Λi?2?+k=1K?hk?(xik??,ljk??)?zk?Σk?2?}

待解未知量:各個時刻的位姿(截至當前時刻): 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?}?ai?Fii?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?(xik?0?,ljk?0?)+Hkik??δxik??+Jkjk??δljk??}?zk?={Hkik??δxik??+Jkjk??δljk??}?ck?Hkik????xik???hk?(xik??,ljk??)? ?(xik?0?,ljk?0?)?Jkjk????ljk???hk?(xik??,ljk??)? ?(xik?0?,ljk?0?)?

得到線性化后的方程:

δ ? = 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=1M?Fii?1?δxi?1?+Gii?δxi??ai?Λi?2?+k=1K?Hkik??δxik??+Jkjk??δljk???ck?Σk?2?}

該方程使用馬氏距離來定義: ∥ 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?

線性化方程的意義:

  1. 好的線性化點(該點與最優解與殘差的變化成線性關系)直接將非線性問題轉為線性問題。
  2. 使用迭代法完成求解時,使用該線性化方程求變量更新量,相當于一次牛頓法求\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=ATRδ?=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} ACm×n?(m ≥ n,約束方程遠大于待求解變量個數). 則存在一個單位列正交矩陣 Q ∈ C m × n Q ∈ C_{m×n} QCm×n?,(即 Q ? Q = I n × n Q?Q =I_{n×n} Q?Q=In×n?) 和 一個上三角矩陣 R ∈ C n × n R∈C_{n×n} RCn×n?, 使得: A = Q R A = QR A=QR.

文中 Q ∈ C m × m , Q T ? A = R Q∈ C_{m×m},Q^T*A=R QCm×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?..H2?H1?A=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δ?b22?= ?QTAδ?QTb ?22?=Rδ?d22?+e22?
即:
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分解中的作用
  1. 逐步消除變量:通過逐步消去矩陣中的非對角線元素,將矩陣轉換為一個易于處理的形式。
  2. 保持稀疏性:在處理稀疏矩陣時,通過選擇合適的消除順序,可以最大限度地保持矩陣的稀疏性,提高計算效率。
步驟
  1. 從矩陣 (A) 的第一行和第一列開始,計算第一個對角元素和下三角矩陣 (L) 的第一列。
  2. 對剩余的子矩陣進行類似的操作,消去非對角線元素,逐步構建下三角矩陣 (L) 和對角矩陣 (D)。
  3. 重復這一過程,直到處理完所有元素。
QR分解

QR分解將一個矩陣 (A) 分解為一個正交矩陣 (Q) 和一個上三角矩陣 (R) 的乘積,即 (A = QR)。QR分解可以通過一系列的Givens旋轉或Householder反射來實現,這兩者本質上都是基于變量消除的過程。

變量消除在QR分解中的作用
  1. Householder反射:通過引入Householder矩陣,將一個向量反射到某個子空間,使得消去矩陣中的某些元素。這個過程等價于逐步消除變量,簡化矩陣結構。
  2. Givens旋轉:通過Givens旋轉,可以將矩陣的某些元素變為零,從而逐步將矩陣轉換為上三角形。這也是一種變量消除的形式。
步驟
  1. 從矩陣 (A) 的第一列開始,通過Householder反射或Givens旋轉將下面的元素變為零。
  2. 處理下一列,通過類似的操作消除非對角線元素。
  3. 繼續這一過程,直到得到上三角矩陣 (R)。

QR分解和Cholesky分解(或LDL分解)都基于變量消除的思想,通過逐步消去矩陣中的非對角線元素,將問題簡化為易于處理的上三角或下三角形式。這些分解方法不僅用于求解線性方程組和最小二乘問題,還廣泛應用于各種數值計算和優化問題中。

選擇合適的消除順序對于保持矩陣稀疏性和提高計算效率至關重要。通過合理的變量消除,可以有效地簡化復雜問題,降低計算復雜度。

變量在信息矩陣及A陣中的排列序列即決定了變量消元(elimination)的順序(列驅動:從左到右)。
變量的排列序列影響因式分解的結果,影響R陣的稀疏程度。
使用反向消元求解的方法依賴R陣的稀疏性,當分解的結果R陣比較稠密時,此時使得因式分解的計算量變大,或者大于直接的A陣求逆。

變量計算(回代Back-substitution)

在得到R\delta=d的關系后,該等式示意圖如下:
在這里插入圖片描述
回代(Back-substitution)是一種用于求解上三角矩陣線性方程組的算法。它通常用于解決通過Gaussian消去法或QR分解等方法得到的方程組。

基本概念

假設我們有一個上三角矩陣 (R) 和一個向量 (b),并希望求解線性方程組 (Rx = b)。上三角矩陣的特點是它的下三角部分全是零,即所有的非零元素都位于對角線及其上方。

回代算法

回代的基本思路是從最后一個方程開始,逐步向上求解每個變量。具體步驟如下:

  1. 初始化:從最后一個方程(倒數第一行)開始求解。
  2. 逐步求解:根據上一個變量的值,向上求解前一個變量,直到所有變量都求出。
具體步驟

假設我們有一個 ( 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)。

  1. 從第 ( n n n) 個方程開始:
    R n n x n = b n R_{nn} x_n = b_n Rnn?xn?=bn?
    求解:
    x n = b n R n n x_n = \frac{b_n}{R_{nn}} xn?=Rnn?bn??

  2. 對于第 ( 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= ?200?310?143? ?,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
  1. 構建雅可比 A A A 和 RHS b b b 測量。
  2. 找到一個好的列排序 p p p,并重新排序 A p ← A A_p ← A Ap?A.
  3. 使用 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?b22?
  4. 通過 δ ← δ 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方法難以解決的大型問題上也相當實用。當只有較少數量的變量受到線性化點變化的影響時,另一種方法是有利的。在這種情況下,可以應用降級和更新技術暫時從因子中刪除這些變量,然后使用新的線性化點再次添加它們。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41346.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kafka系列之Kafka知識超強總結

一、Kafka簡介 Kafka是什么 Kafka是一種高吞吐量的分布式發布訂閱消息系統&#xff08;消息引擎系統&#xff09;&#xff0c;它可以處理消費者在網站中的所有動作流數據。 這種動作&#xff08;網頁瀏覽&#xff0c; 搜索和其他用戶的行動&#xff09;是在現代網絡上的許多社…

14-22 劍和遠方2 - 深度神經網絡中的學習機制

概論 在第一部分中&#xff0c;我們深入探討了人工智能的興衰簡史以及推動人工智能發展的努力。我們研究了一個簡單的感知器&#xff0c;以了解其組件以及簡單的 ANN 如何處理數據和權重層。在簡單的 ANN 中&#xff0c;不會對數據執行特定操作。ANN 中的激活函數是一個線性函…

Surface splatting (2D Gaussian splatting)代碼分析

源碼地址 colab.research.google.com/drive/1qoclD7HJ3-o0O1R8cvV3PxLhoDCMsH8W 核心代碼 surface_splatting def surface_splatting(means3D, scales, quats, colors, opacities, intrins, viewmat, projmat):# Rasterization setupprojmat torch.zeros(4,4).cuda()projm…

flask使用定時任務flask_apscheduler(APScheduler)

Flask-APScheduler描述: Flask-APScheduler 是一個 Flask 擴展&#xff0c;增加了對 APScheduler 的支持。 APScheduler 有三個內置的調度系統可供您使用&#xff1a; Cron 式調度&#xff08;可選開始/結束時間&#xff09; 基于間隔的執行&#xff08;以偶數間隔運行作業…

c#中的超時終止

在C#中&#xff0c;可以使用CancellationToken和Task的超時機制來實現調用方法時的超時終止。 一 用Task.Delay(int)模擬耗時操作 static async Task Main(string[] args){using (var cts new CancellationTokenSource(1 * 1000)){await doSomething(cts.Token);}Console.Wr…

移動校園(7)ii:uniapp響應攔截器處理token,以及微信小程序報錯當前頁面正在處于跳轉狀態,請稍后再進行跳轉....

依據昨天的寫完&#xff0c;在token過期之后&#xff0c;再次調用接口&#xff0c;會觸發后端攔截&#xff0c;扔進全局錯誤處理中間件 前端說明提示都沒有&#xff0c;只有一個這個&#xff0c;現在優化一下&#xff0c;再寫一個類似全局后置守衛&#xff0c;當狀態碼是401的時…

RAID 冗余磁盤陣列

RAID也是Linux操作系統中管理磁盤的一種方式。 只有Linux操作系統才支持LVM的磁盤管理方式。 而RAID是一種通用的管理磁盤的技術&#xff0c;使用于多種操作系統。 優勢&#xff1a;提升數據的讀寫速度&#xff0c;提升數據的可靠性。具體實現哪什么功能&#xff0c;要看你所…

RGB樹-美團2023筆試(codefun2000)

題目鏈接 RGB樹-美團2023筆試(codefun2000) 題目內容 塔子哥是一位著名的冒險家&#xff0c;他經常在各種森林里探險。今天&#xff0c;他來到了道成林&#xff0c;這是一片美麗而神秘的森林。在探險途中&#xff0c;他遇到了一棵 n 個節點的樹&#xff0c;樹上每個節點都被涂…

LVGL移植與VS模擬器使用

一、移植文件介紹 二、移植部分 第一步&#xff1a;創建LVGL文件夾 第二步&#xff1a; 構造LVGL文件夾&#xff1a;LVGL - GUI - lvgl - 第三步&#xff1a;添加文件 3.1 從examples中添加2個.c文件 3.2 從src中添加文件 draw文件 extra文件 第四步&#xff1a; 三、Ke…

Linux系統安裝軟件包的方法rpm和yum詳解

起因&#xff1a; 本篇文章是記錄學習Centos7的歷程 關于rpm 常見命令 1&#xff09;查看已經安裝的軟件包 rpm -q 軟件包名 2&#xff09;查看文件的相關信息 rpm -qi 軟件包名 3&#xff09;查看軟件包的依賴關系 就是說要想安裝這個軟件包&#xff0c;就必須把一些前…

三級_網絡技術_04_中小型網絡系統總體規劃與設計

1.下列關于路由器技術特征的描述中&#xff0c;正確的是()。 吞吐量是指路由器的路由表容量 背板能力決定了路由器的吞吐量 語音、視頻業務對延時抖動要求較低 突發處理能力是以最小幀間隔值來衡量的 2.下列關于路由器技術特征的描述中&#xff0c;正確的是()。 路由器的…

springboot公寓租賃系統-計算機畢業設計源碼03822

摘要 1 緒論 1.1 研究背景與意義 1.2選題背景 1.3論文結構與章節安排 2 公寓租賃系統系統分析 2.1 可行性分析 2.1.1 技術可行性分析 2.1.2 經濟可行性分析 2.1.3 法律可行性分析 2.2 系統功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系統用例分析 2.4 系…

韋東山嵌入式linux系列-第一個實驗

1 前言 筆者使用的是韋東山STM32MP157 Pro的板子&#xff0c;環境搭建部分按照說明文檔配置完成。配置橋接網卡實現板子、windows、ubuntu的通信&#xff0c;也在開發板掛載 Ubuntu 的NFS目錄 &#xff0c;這里就不再贅述了。 板子: 192.168.5.9 windows: 192.168.5.10 ubunt…

【linux】服務器創建RAID1

【linux】服務器創建RAID1 文章目錄 【linux】服務器創建RAID1一、配置介紹raid介紹raid類型RAID 0:RAID 1:RAID 5:RAID 6:二、配置RAID硬件RAID:軟件RAID:三、軟件配置RAID1(以linux為例)1.先進入管理員模式2.安裝mdadm工具3.創建raid1數組4.查看RAID數組狀態5.格式化和掛載…

機械鍵盤如何挑選

機械鍵盤的選擇是一個關鍵的決策&#xff0c;因為它直接影響到我們每天的打字體驗。在選擇機械鍵盤時&#xff0c;有幾個關鍵因素需要考慮。首先是鍵盤的鍵軸類型。常見的鍵軸類型包括藍軸、紅軸、茶軸和黑軸等。不同的鍵軸類型具有不同的觸發力、觸發點和聲音。藍軸通常具有明…

神經網絡和安全結合:一種基于神經網絡的智能攻擊檢測與防御系統;構建攻擊行為預測模型

目錄 神經網絡和安全結合 摘要 引言 理論基礎 技術實現與創新點 實驗驗證 結論與展望 一種基于神經網絡的智能攻擊檢測與防御系統 一、系統概述 二、主要功能 三、技術特點 四、應用前景 構建攻擊行為預測模型 一、構建攻擊行為預測模型的步驟 1. 數據收集 2. …

單鏈表的學習與基礎運用p

當我們在實際做項目&#xff0c;或者是自主開發一點小東西的時候&#xff0c;往往會儲存一些數據&#xff0c;有時候我們需要添加這些數據&#xff0c;有時候需要刪除&#xff0c;而有時候&#xff0c;僅僅只需要查找到就行。鏈表中的每一個節點都是一個獨立開辟的空間&#xf…

聚類分析方法(一)

目錄 一、聚類分析原理&#xff08;一&#xff09;聚類分析概述&#xff08;二&#xff09;聚類的數學定義&#xff08;三&#xff09;簇的常見類型&#xff08;四&#xff09;聚類框架及性能要求&#xff08;五&#xff09;簇的距離 二、劃分聚類算法&#xff08;一&#xff0…

Java 有什么必看的書?

Java必看經典書有這兩本&#xff1a; 1、Java核心技術速學版&#xff08;第3版&#xff09; 經典Java開發基礎書CoreJava速學版本&#xff01;Java入門優選書籍&#xff0c;更新至Java17&#xff0c;內容皆是精華&#xff0c;讓Java學習更簡單&#xff0c;讓Java知識應用更快速…

【Linux】什么是進程間通信?方式有哪些?本質理解?

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;個人主頁 &#xff1a;阿然成長日記 …