SLAM--BA优化

一、BA优化

BA(Bundle Adjustment)优化,是指从视觉重建中提炼出最优的 3 D 3D 3D 模型和相机参数(内参数和外参数)。从每一个特征点反射出来的几束光线(bundles of light rays),在我们把相机姿态和特征点空间位置做出最优的调整 (adjustment) 之后,最后收束到相机光心的这个过程。和重投影不同的是,BA优化是对多段相机的位姿和位姿下的路标点的空间坐标进行优化。

我们的误差可以写成:
e ( ξ , p ) = z − 1 s K T P e(\xi,p)=z-\frac 1 s KTP e(ξ,p)=zs1KTP
即:
e ( ξ , p ) = z − 1 s K ⋅ exp ⁡ ( ξ ∧ ) ⋅ P e(\xi,p)=z-\frac 1 s K\cdot\exp(\xi^\land)\cdot P e(ξ,p)=zs1Kexp(ξ)P
根据我之前写的文章:

SLAM–最小化重投影误差

我们可以得出误差 e e e分别对位姿和路标坐标的偏导 J δ ξ J_{\delta \xi} Jδξ J p J_p Jp
J δ ξ = ∂ e ∂ δ ξ = − [ f x Z ′ 0 − f x X ′ Z ′ 2 − f x X ′ Y ′ Z ′ 2 f x + f x X ′ 2 Z ′ 2 − f x Y ′ Z ′   0 f y Z ′ − f y Y ′ Z ′ 2 − f y − f y Y ′ 2 Z ′ 2 f y Y ′ X ′ Z ′ 2 f y X ′ Z ′ ] J_{\delta \xi} =\frac{\partial \pmb e}{\partial \delta \xi}=-\begin{bmatrix} \frac {f_x}{Z'} & 0 &-\frac{f_xX'}{Z'^2} &-\frac{f_xX'Y'}{Z'^2} &f_x+ \frac{f_xX'^2}{Z'^2} & -\frac{f_xY'}{Z'} & \\ ~\\ 0&\frac{f_y}{Z'}&-\frac{f_yY'}{Z'^2} & -f_y-\frac{f_yY'^2}{Z'^2} & \frac{f_yY'X'}{Z'^2} & \frac{f_yX'}{Z'} & \\ \end{bmatrix} Jδξ=δξeee=Zfx 00ZfyZ2fxXZ2fyYZ2fxXYfyZ2fyY2fx+Z2fxX2Z2fyYXZfxYZfyX

J p = ∂ e ∂ P = − [ f x Z ′ 0 − f x X ′ Z ′ 2   0 f y Z ′ − f y Y ′ Z ′ 2 ] ⋅ R J_p=\frac {\partial \pmb e}{\partial \pmb P}=-\begin{bmatrix} \frac {f_x}{Z'}&0&-\frac{f_xX'}{Z'^2} \\ ~\\0&\frac{f_y}{Z'}&-\frac{f_yY'}{Z'^2}\\ \end{bmatrix}\cdot \pmb R Jp=PPPeee=Zfx 00ZfyZ2fxXZ2fyYRRR

我们令位姿变量为 ξ \xi ξ,特征点空间位置为 p p p,对于m个位姿和n个特征点:
x = [ ξ 1 ξ 2 . . . ξ m ∣ p 1 p 2 . . . p n ] T \pmb x=[\xi_1 \quad \xi_2 ...\xi_m| \quad p_1 \quad p_2...p_n]^T xxx=[ξ1ξ2...ξmp1p2...pn]T

优化的目标函数为:
1 2 ∥ f ( x + Δ x ) ∥ 2 = 1 2 ∑ i = 1 m ∑ j = 1 n ∥ e i j + F i j Δ ξ i + E i j Δ p j ∥ 2 \frac 1 2 \left\| f(x+\Delta x) \right\|^2=\frac 1 2\sum_{i=1}^m \sum_{j=1}^n\left\|e_{ij}+F_{ij}\Delta \xi_i+E_{ij}\Delta p_j \right\|^2 21f(x+Δx)2=21i=1mj=1neij+FijΔξi+EijΔpj2
其中, F i j F_{ij} Fij是相对姿态的偏导数, E i j E_{ij} Eij是相对与路标点的偏导;

为了简明公式,我们令:
x c = [ ξ 1 ξ 2   . . .   ξ m ] x p = [ p 1 p 2   . . .   p n ] x_c=[\xi_1 \quad \xi_2 \space...\space\xi_m]\\ x_p= [p_1 \quad p_2 \space...\space p_n]\\ xc=[ξ1ξ2 ... ξm]xp=[p1p2 ... pn]
我们的目标函数可以写成:
1 2 ∥ f ( x + Δ x ) ∥ 2 = 1 2 ∥ e + F Δ x c + E Δ x p ∥ 2 \frac 1 2 \left\| f(x+\Delta x) \right\|^2=\frac 1 2\left\|e+F\Delta x_c+E\Delta x_p \right\|^2 21f(x+Δx)2=21e+FΔxc+EΔxp2
对于线性增量方程: H Δ x = g H\Delta x=g HΔx=g,这里 H = J T J H=J^TJ H=JTJ

我们可以把雅克比矩阵分块:
J = [ F E ] , J T = [ F T E T ] J=[F \quad E],\quad J^T=\begin{bmatrix} F^T \\ \\E^T\end{bmatrix} J=[FE],JT=FTET
则:
H = J T J = [ F T F F T E E T F E T E ] H=J^TJ=\begin{bmatrix} F^TF &&F^TE \\ \\E^TF && E^TE\end{bmatrix} H=JTJ=FTFETFFTEETE
 

 

二、利用稀疏性求解

J i j J_{ij} Jij表示在位姿 ξ i \xi_i ξi只观测到 p j p_j pj时的雅克比矩阵,所以其他部分的导数为零。
J i j ( x ) = [ 0 , 0 , . . . , ( ∂ e i j ∂ δ ξ i ) 2 × 6 , . . . , 0 2 × 6 , ∣ 0 2 × 3 , . . . , ( ∂ e i j ∂ p i ) 2 × 3 ] \large {J_{ij}(x)=\begin{bmatrix}0, &0,...,(\frac{\partial \pmb e_{ij}}{\partial \delta \xi_i}) _{2\times 6},...,0_{2 \times 6},|0_{2\times 3},...,(\frac{\partial \pmb e_{ij}}{\partial p_i}) _{2\times 3} \end{bmatrix}} Jij(x)=[0,0,...,(δξieeeij)2×6,...,02×602×3...,(pieeeij)2×3]
所以对于整体:
H = ∑ i j J i j T J i j H=\sum_{ij}J_{ij}^TJ_{ij} H=ijJijTJij
由此可以把所有的 J i j J_{ij} Jij放到一个 J J J表达式里:
J = [ J 11 J 12 ⋮ J i 1 J i 2 ⋮ J i j ] J=\begin{bmatrix} J_{11}\\J_{12}\\ \vdots \\J_{i1}\\J_{i2}\\ \vdots\\J_{ij} \end{bmatrix} J=J11J12Ji1Ji2Jij
又有稀疏性和对称性,我们把 H H H分块化:
H = [ B E E T C ] H=\begin{bmatrix} B &E\\E^T &C \end{bmatrix} H=[BETEC]
H Δ x = g H\Delta x=g HΔx=g可变为:
[ B E E T C ] [ Δ x c Δ x p ] = [ v w ] \begin{bmatrix} B &E\\E^T &C \end{bmatrix} \begin{bmatrix} \Delta x_c \\\Delta x_p \end{bmatrix} = \begin{bmatrix} v\\w\end{bmatrix} [BETEC][ΔxcΔxp]=[vw]
利用稀疏性进行高斯消元:
[ I − E C − 1 0 I ] [ B E E T C ] [ Δ x c Δ x p ] = [ I − E C − 1 0 I ] [ v w ]     ⟹ [ B − E C − 1 E T 0 E T C ] [ Δ x c Δ x p ] = [ v − E C − 1 w w ] \begin{bmatrix} I & -EC^{-1}\\0 &I\end{bmatrix}\begin{bmatrix} B &E\\E^T &C \end{bmatrix} \begin{bmatrix} \Delta x_c \\\Delta x_p \end{bmatrix} = \begin{bmatrix} I & -EC^{-1}\\0 &I\end{bmatrix}\begin{bmatrix} v\\w\end{bmatrix}\\~\\~ \\ \Longrightarrow \begin{bmatrix} B-EC^{-1}E^T &0\\E^T &C \end{bmatrix} \begin{bmatrix} \Delta x_c \\\Delta x_p \end{bmatrix} = \begin{bmatrix} v-EC^{-1}w\\w\end{bmatrix} [I0EC1I][BETEC][ΔxcΔxp]=[I0EC1I][vw]  [BEC1ETET0C][ΔxcΔxp]=[vEC1ww]
整理得:
( B − E C − 1 E T ) Δ x c = v − E C − 1 w (B-EC^{-1}E^T)\Delta x_c =v-EC^{-1}w (BEC1ET)Δxc=vEC1w
继而可以求出:
∆ x p = C − 1 ( w − E T ∆ x c ) ∆x_p = C^{−1} (w − E^T ∆x_c ) xp=C1(wETxc)

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值