SLAM後端:BA優化(Bundle Adjustment)

BA是一種優化方法,最小化重投影誤差優化PnP得到的R、t

應用場景:利用共視點的3D座標與相機內參矩陣,根據PnP計算位姿R、t(有誤差)。利用R、t及相機的投影模型可以計算出這些特徵點在第二幀圖像上的投影(有誤差),本身這些點在第二幀圖像上有真實投影,利用這兩個投影構建函數進行優化可以優化位姿。

1 BA解決的代價函數

觀測模型如下:

(1)世界座標系轉相機座標系

設P點的世界座標(x,y,z),轉到相機座標系:

                                                                             P^{'} = RP+t=(x^{'},y^{'},z^{'})

(2)歸一化

                                                                      P^{'}_c = [u_c,v_c,1]^T=[x^{'}/z^{'},y^{'}/z^{'},1]^T

(3)去畸變

                                                                                 P^{'}_c(u_c,v_c)\rightarrow (u_c^{'},v_c^{'})

(4)相機座標系轉像素座標系

                                                                                    \\ u_s = f_x\cdot u_c^{'}+c_x\\ v_s = f_y\cdot v_c^{'}+c_y\\

(5)得到相機的觀測模型:

                                                                         g(u_s,v_s) = h(R,t,x,y,z)

(6)構建重投影誤差模型:

                                                                             e = z - h(R,t,x,y,z)

z是實際值,h是通過觀測模型得到的值,知識針對空間中一點。

2 LM算法求解

BA優化一般通過LM算法求解,參考最優化八:高斯牛頓法、LM法

1中(6)方程中表示了一個點一個位姿構成的重投影誤差,利用多個位姿多個點構建優化方程(m個位姿,n個點):

                                          minf(x) = min\sum_{1}^{m*n}e_{ij} = \sum_{i=1}^{m}\sum_{j=1}^{n}(z_{ij} -h(R_{ij},t_{ij},x_{ij},y_{ij},z_{ij}))               (2-1)

f(x)中的x是R、t、xyz。位姿用李代數表示,並將變量分爲兩部分,位姿\xip點,變量如下:

                                                         [\xi,p ]= [\xi_1,\xi_2,\xi_3...,\xi_m, p_1,p_2,p_3,...,p_n]                                        (2-2)

則優化目標變爲問題如下:

                                                         minf(\xi ,p) =min \sum_{i=1}^{m}\sum_{j=1}^{n}(z_{ij} -h(\xi ,p))                                      (2-3)

優化函數f(x)有m+n個變量待求取,一般用LM法求解,爲什麼不用最速下降法?我覺得是最速下降法迭代次數過多,效率低。LM法要用到梯度,梯度計算如下:

                                                                  [\frac{\partial f}{\partial \xi _1},...,\frac{\partial f}{\partial \xi _m},\frac{\partial f}{\partial p _1},...,\frac{\partial f}{\partial p _n}]                                                    (2-4)

參考最優化八:高斯牛頓法、LM法,針對函數f(x)求解更新變量\bigtriangleup x需要求解如下方程:

                                                          J^T(x_0)J(x_0)\bigtriangleup x = -J^T(x_0)f(x_0)                                              (2-5)

J是一階導數。爲了計算方便,將一階梯度替換如下:

                                                             [F,E]=[\frac{\partial f}{\partial \xi _1},...,\frac{\partial f}{\partial \xi _m},\frac{\partial f}{\partial p _1},...,\frac{\partial f}{\partial p _n}]                                         (2-6)

F代表\xi的偏導數,E代表p的偏導數,則參考式(2-5),用g代替等式右邊,本問題方程如下:

                                                                     [F E]^T\cdot [F E] \bigtriangleup x=g                                                         (2-7)

等式左邊展開並用H表示得到:

                                                                       H=\left [ \begin{matrix} F^TF & F^TE \\ E^TF & E^TE \\ \end{matrix} \right ]                                                           (2-8)

目的是求解(2-7)中的\bigtriangleup x,需要求取H的逆,但是H矩陣很大,一般幾百個點就會有幾百個參數,求解需要用到H矩陣的稀疏特性。

3 H矩陣的稀疏性

這據說是21世紀最重要的發現。

最優化問題minf(\xi ,p)中包含了m個位姿n個特徵點,公式(2-4)可以寫成如下方程:

                 [\frac{\partial f}{\partial \xi _1},...,\frac{\partial f}{\partial \xi _m},\frac{\partial f}{\partial p _1},...,\frac{\partial f}{\partial p _n}]= [\sum_{m}^{i=1}\sum_{n}^{j=1}\frac{\partial e_{ij}}{\partial \xi _1},...,\sum_{m}^{i=1}\sum_{n}^{j=1}\frac{\partial e_{ij}}{\partial \xi _m},\sum_{m}^{i=1}\sum_{n}^{j=1}\frac{\partial e_{ij}}{\partial p _1},...,\sum_{m}^{i=1}\sum_{n}^{j=1}\frac{\partial e_{ij}}{\partial p _n}]

即:

                                     [\frac{\partial f}{\partial \xi _1},...,\frac{\partial f}{\partial \xi _m},\frac{\partial f}{\partial p _1},...,\frac{\partial f}{\partial p _n}]= \sum_{i,j}[\frac{\partial e_{ij}}{\partial \xi _1},...,\frac{\partial e_{ij}}{\partial \xi _m},\frac{\partial e_{ij}}{\partial p _1},...,\frac{\partial e_{ij}}{\partial p _n}]

對其中一項令:

                                                     J_{ij}(\xi ,p) = (0_{2*6},...,\frac{\partial e_{ij}}{\partial \xi _i},...,0_{2*3},...\frac{\partial e_{ij}}{\partial p_j},..,0_{2*3} )

則:

                                                                                H = \sum_{i,j}J_{ij}^TJ_{ij}=\left [ \begin{matrix} H_{11} & H_{12} \\ H_{21} & H_{22} \\ \end{matrix} \right ]

H的稀疏性如下:

(1)H_{11},H_{22}是對角陣。

(2)H_{12},H_{21}有可能稀疏有可能稠密

利用H的稀疏性計算方程(2-7)需要用到蘇耳消元法。

4 Schur消元

求解問題如下:

                                                                        \left [ \begin{matrix} H_{11} & H_{12} \\ H_{21} & H_{22} \\ \end{matrix} \right ]\bigtriangleup x=g\left [ \begin{matrix} H_{11} & H_{12} \\ H_{21} & H_{22} \\ \end{matrix} \right ]                                  (4-1)

\bigtriangleup x變量分開寫爲: 

                                                                                \left [ \begin{matrix} H_{11} & H_{12} \\ H_{21} & H_{22} \\ \end{matrix} \right ] \left [ \begin{matrix} \bigtriangleup \xi \\ \bigtriangleup p \\ \end{matrix} \right ]= \left [ \begin{matrix} v \\ w \\ \end{matrix} \right ]                                      (4-2)

消去矩陣H中右上角部分,等式左右同乘以矩陣:

                                               \left [ \begin{matrix} I & -H_{21}^{T}H_{22}^{-1} \\ 0 & I \\ \end{matrix} \right ] \left [ \begin{matrix} H_{11} & H_{12} \\ H_{21} & H_{22} \\ \end{matrix} \right ] \left [ \begin{matrix} \bigtriangleup \xi \\ \bigtriangleup p \\ \end{matrix} \right ]=\left [ \begin{matrix} I & -H_{21}^{T}H_{22}^{-1} \\ 0 & I \\ \end{matrix} \right ] \left [ \begin{matrix} v \\ w \\ \end{matrix} \right ]                (4-3)

整理得到:

                                                      \left [ \begin{matrix} H_{11}- H_{21}^TH_{22}^{-1}H_{21}& 0 \\ H_{21} & H_{22} \\ \end{matrix} \right ] \left [ \begin{matrix} \bigtriangleup \xi \\ \bigtriangleup p \\ \end{matrix} \right ]= \left [ \begin{matrix} v-H_{21}^TH_{22}^{-1}w \\ w \\ \end{matrix} \right ]                  (4-4)

方程第一項與爲位置點p無關,取出:

                                                               \left [ H_{11}- H_{21}^TH_{22}^{-1}H_{21} \right ] \cdot \left [ \begin{matrix}\bigtriangleup \xi \\ \end{matrix} \right ]= \left [ \begin{matrix} v-H_{21}^TH_{22}^{-1}w \\ \end{matrix} \right ]                   (4-5)

求解\bigtriangleup \xi代入(4-4)求解\bigtriangleup x

消元優勢在於矩陣H_{22}爲對角陣, 逆矩陣很容易求解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章