VINS-Mono之外參標定和視覺IMU聯合初始化

1.前言

本博客主要介紹VINS-Mono初始化時相機與IMU對齊,主要包括相機到IMU的外參估計、陀螺儀偏置、相機位移和估計空間點的尺度、重力加速度、每幀速度,主要參考了深藍學院的VIO課程及博客VINS-Mono理論學習——視覺慣性聯合初始化與外參標定和崔華坤的《VINS 論文推導及代碼解析》。
總體而言,視覺IMU對齊流程主要包括以下幾部分:

  1. 若旋轉外參數qcbq^{b}_{c}未知,則先估計旋轉外參數
  2. 利用旋轉約束估計陀螺儀偏置:qbkc0=qckc0(qcb)1q^{c_{0}}_{b_{k}} = q_{c_{k}}^{c_{0}}\otimes (q^{b}_{c})^{-1}
  3. 利用平移約束估計重力方向,速度,以及尺度初始值spˉbkc0=spˉckc0Rbkc0pcbs\bar p^{c_{0}}_{b_{k}} = s \bar p^{c_{0}}_{c_{k}} - R^{c_{0}}_{b_{k}}p^{b}_{c}
  4. 對重力向量gc0g^{c_{0}}進行進一步的優化
  5. 求解世界座標系ww和初始相機座標系c0c_{0}之間的旋轉矩陣qc0wq^{w}_{c_{0}},並將軌跡對齊到世界座標系中

2. 外參標定 (利用旋轉約束估計外參數旋轉qcb)q^{b}_{c})

相鄰倆時刻kk,k+1k+1之間,kk時刻的IMU到k+1k+1時刻的相機外參旋轉矩陣有:Rck+1bk=Rbk+1bkRcb=RcbRck+1ckR^{b_{k}}_{c_{k+1}}=R^{b_{k}}_{b_{k+1}} \cdot R^{b}_{c} = R^{b}_{c} * R^{c_{k}}_{c_{k+1}} 轉換爲四元素有: qbk+1bkqcb=qcbqck+1ckq^{b_{k}}_{b_{k+1}} \otimes q^{b}_{c} = q^{b}_{c} \otimes q^{c_{k}}_{c_{k+1}} 上式可寫爲:(L(qbk+1bk)R(qck+1ck))qcb=Qk+1kqcb=0(\mathcal{L}(q^{b_{k}}_{b_{k+1}})-\mathcal{R}(q^{c_{k}}_{c_{k+1}}))q^{b}_{c} = Q^{k}_{k+1} \cdot q^{b}_{c} = 0
將多個時刻的上式方程累計起來,並加上魯棒核權重,可構建超定方程:[w10Q10w21Q21wNN1QNN1]qcb=QNqcb=0(1)\begin{bmatrix}w^{0}_{1} \cdot Q^{0}_{1} \\ w^{1}_{2} \cdot Q_{2}^{1} \\ \cdots \\ w^{N-1}_{N} \cdot Q_{N}^{N-1}\end{bmatrix} q^{b}_{c} = Q_{N}\cdot q^{b}_{c} = 0 \tag{1} 其中:
wk+1k={1,  rk+1k<thresholdthresholdrk+1k,  otherwisew_{k+1}^{k} = \left\{\begin{matrix} 1, \ \ r^{k}_{k+1}<threshold \\ \frac{threshold}{r^{k}_{k+1}}, \ \ otherwise \end{matrix}\right. 由旋轉和軸角之間的關係tr(R)=1+2cosθtr(R)=1+2\cos\theta,能得到角度誤差rr的計算爲:rk+1k=acos((tr((Rbk+1bkR^cb)1R^cbRck+1ck)1)/2)=acos((tr(R^cb 1Rbk+1bk 1Rcb^Rck+1ck)1)/2)r^{k}_{k+1}=acos((tr((R^{b_{k}}_{b_{k+1}}\hat{R}^{b}_{c})^{-1}\hat{R}^{b}_{c}R^{c_{k}}_{c_{k+1}})-1)/2) \\ = acos((tr(\hat{R}^{b \ -1}_{c}R^{b_{k}\ -1}_{b_{k+1}}\hat{R^{b}_{c}}R^{c_{k}}_{c_{k+1}})-1)/2)
公式(1)的求解同樣採用SVD分解,即最下奇異值對應的奇異向量即爲IMU座標系到相機座標系的旋轉(四元素表示),具體代碼見initial_ex_rotation.cpp 函數 CalibrationExRotation()


對於tr(R)=1+2cosθtr(R)=1+2\cos \theta的推導如下:
旋轉矩陣和軸角的關係爲:R=cosθI+(1cosθ)aaTsinθ[a]×R=\cos\theta I +(1-\cos \theta) aa^{T} - \sin \theta [a]_{\times} 其中a=[a1,a2,a3]Ta=[a_{1}, a_{2}, a_{3}]^{T}爲單位旋轉軸,θ\theta爲繞着旋轉軸轉動的角度,[a]×=[0a3a2a30a1a2a10][a]_{\times}=\begin{bmatrix} 0 & -a_{3} & a_{2} \\ a_{3} & 0 & -a_{1} \\ -a_{2} & a_{1} &0\end{bmatrix}
同時,由於aa爲單位旋轉軸,有tr(aaT)=1tr(aa^{T})=1,故:
tr(R)=cosθ tr(I)+(1cosθ)tr(aaT)+sinθ tr([a]×)=3cosθ+(1cosθ)=1+2cosθtr(R)=\cos \theta \ tr(I)+(1-\cos \theta) tr(aa^{T}) + \sin\theta \ tr([a]_{\times}) \\ = 3\cos\theta + (1-\cos \theta) = 1+2\cos \theta 同時也有Ra=aRa=a,即旋轉軸上在旋轉後並不發生變化,旋轉軸aa爲旋轉矩陣RR的特徵值爲1對應的特徵向量。
關於旋轉矩陣和軸角的關係可參考:https://en.wikipedia.org/wiki/Rotation_matrix


3. 視覺IMU聯合初始化

假如我們已經有一個初始的IMU到相機的外參(Rcb,pcb)(R^{b}_{c}, p^{b}_{c}),同時又有不同時刻幀的位姿(Rckc0,pcbR^{c_{0}}_{c_{k}}, p^{b}_{c}) (基於第一幀座標系下),那麼我們可以知道姿態從相機座標系到IMU座標系的關係:Tckc0=Tbkc0TcbT^{c_{0}}_{c_{k}} = T^{c_{0}}_{b_{k}}T^{b}_{c} 則有:[Rckc0spˉckc001]=[Rbkc0spˉbkc001][Rcbpcb01]\begin{bmatrix}R^{c_{0}}_{c_{k}} & s\bar{p}^{c_{0}}_{c_{k}} \\ 0 & 1\end{bmatrix} = \begin{bmatrix}R^{c_{0}}_{b_{k}} & s\bar{p}^{c_{0}}_{b_{k}} \\ 0 & 1\end{bmatrix} \begin{bmatrix}R^{b}_{c} & {p}^{b}_{c} \\ 0 & 1\end{bmatrix} 將式子展開有【論文公式(14)】:Rckc0=Rbkc0RcbRbkc0=Rckc0(Rcb)1R^{c_{0}}_{c_{k}}=R^{c_{0}}_{b_{k}}R^{b}_{c} \rightarrow R^{c_{0}}_{b_{k}}=R^{c_{0}}_{c_{k}}(R^{b}_{c})^{-1} spˉckc0=Rbkc0pcb+spˉbkc0spˉbkc0=spˉckc0Rbkc0pcb(2)s\bar{p}^{c_{0}}_{c_{k}}=R^{c_{0}}_{b_{k}}p^{b}_{c}+s\bar{p}^{c_{0}}_{b_{k}} \rightarrow s\bar{p}^{c_{0}}_{b_{k}}=s\bar{p}^{c_{0}}_{c_{k}}-R^{c_{0}}_{b_{k}}p^{b}_{c} \tag{2}
視覺IMU聯合初始化中的視覺SFM位姿與IMU位姿的對齊主要在vins_estimator/src/initial/initial_aligment.cpp中的VisualIMUAlignment()函數中。

3.1 陀螺儀偏置的估計 (利用旋轉約束估計bwb_{w})

對於窗口的連續倆幀bkb_{k}bk+1b_{k+1},已經從SFM中得到了旋轉qbkc0q^{c_{0}}_{b_{k}}qbk+1c0q^{c_{0}}_{b_{k+1}},從IMU預積分中得到了相鄰幀的旋轉γ^bk+1bk\hat{\gamma}^{b_{k}}_{b_{k+1}}。根絕約束方程,聯立所有相鄰幀,可以得到最小化代價函數【論文公式(15)】:
minδbwkBqbk+1c0 1qbkc0γbk+1bk2(3)\underset{\delta b_{w}}{min}\sum_{k\in\mathcal{B}} \left \| q^{c_{0} \ -1}_{b_{k+1}} \otimes q^{c_{0}}_{b_{k}} \otimes \gamma^{b_{k}}_{b_{k+1}}\right \|^{2} \tag{3} 其中B\mathcal{B}爲滑動窗口內的所有圖像幀,另外對預積分進行一階泰勒展開近似,即對其線性化:γbk+1bkγ^bk+1bk[112Jbwγδbw](4)\gamma^{b_{k}}_{b_{k+1}} \approx \hat {\gamma}^{b_{k}}_{b_{k+1}} \otimes \begin{bmatrix} 1 \\ \frac{1}{2}J^{\gamma}_{b_{w}}\delta b_{w} \end{bmatrix} \tag{4} 由於在理想情況下,即當qbkc0 1qbk+1c0=γbk+1bkq^{c_{0} \ -1 }_{b_{k}} \otimes q^{c_{0}}_{b_{k+1}} = \gamma^{b_{k}}_{b_{k+1}},這倆個旋轉的差異(qbkc0 1qbk+1c0)1γbk+1bk(q^{c_{0} \ -1 }_{b_{k}} \otimes q^{c_{0}}_{b_{k+1}})^{-1}\gamma^{b_{k}}_{b_{k+1}}的旋轉角度爲0,根據四元素的表示,可得虛部爲0\mathbf{0},實部爲1:qbk+1c0 1qbkc0γbk+1bk=[10]q^{c_{0} \ -1}_{b_{k+1}} \otimes q^{c_{0}}_{b_{k}} \otimes \gamma^{b_{k}}_{b_{k+1}} = \begin{bmatrix} 1 \\ \mathbf{0} \end{bmatrix} 則有:γbk+1bk=qbkc0 1qbk+1c0[10](5)\gamma^{b_{k}}_{b_{k+1}} = q^{c_{0} \ -1}_{b_{k}} \otimes q^{c_{0}}_{b_{k+1}} \otimes \begin{bmatrix} 1 \\ \mathbf{0} \end{bmatrix} \tag{5} 將公式(4)代入公式(5),得:γ^bk+1bk[112Jbwγδbw]=qbkc0 1qbk+1c0[10]\hat {\gamma}^{b_{k}}_{b_{k+1}} \otimes \begin{bmatrix} 1 \\ \frac{1}{2}J^{\gamma}_{b_{w}}\delta b_{w} \end{bmatrix} = q^{c_{0} \ -1}_{b_{k}} \otimes q^{c_{0}}_{b_{k+1}} \otimes \begin{bmatrix} 1 \\ \mathbf{0}\end{bmatrix} 當只考慮虛部(虛部爲三維向量)的時候,我們有:Jbwγδbw=2γ^bk+1bk 1qbkc0 1qbk+1c0xyzJ^{\gamma}_{b_{w}}\delta b_{w} =2 \left \lfloor \hat{\gamma}^{b_{k} \ -1}_{b_{k+1}} \otimes q^{c_{0} \ -1}_{b_{k}} \otimes q^{c_{0}}_{b_{k+1}} \right \rfloor_{xyz} 將左邊轉爲對稱矩陣,這樣就可以直接用LDLT對係數矩陣進行分解了:Jbwγ TJbwγδbw=2Jbwγ Tγ^bk+1bk 1qbkc0 1qbk+1c0xyzAx=bJ^{\gamma \ T}_{b_{w}}J^{\gamma}_{b_{w}}\delta b_{w} =2 J^{\gamma \ T}_{b_{w}} \left \lfloor \hat{\gamma}^{b_{k} \ -1}_{b_{k+1}} \otimes q^{c_{0} \ -1}_{b_{k}} \otimes q^{c_{0}}_{b_{k+1}} \right \rfloor_{xyz} \rightarrow Ax=b 求出陀螺儀的偏置bias後,需要對IMU預積分進行重新計算。
代碼見vins_estimator/initial/initial_aligment.cpp中的solveGyroscopeBias

3.2 速度、重力和尺度初始化 (利用預積分約束估計vbkbkv^{b_{k}}_{b_{k}}gc0g^{c_{0}}ss)

對於當前部分需要了估計的變量有:【論文式(16)】XI3(n+1)+3+1=[vb0b0,vb1b1,,vbnbn,gc0,s]\mathcal{X}_{I}^{3(n+1)+3+1}=[v_{b_{0}}^{b_{0}}, v_{b_{1}}^{b_{1}}, \cdots ,v_{b_{n}}^{b_{n}}, g^{c_{0}}, s] 其中,vbkbkv_{b_{k}}^{b_{k}}表示kk時刻(捕獲到圖像的時刻)IMU body座標系的速度在IMU body座標系的表示,gc0g^{c_{0}}爲重力向量在第00幀相機座標系下的表示,ss表示尺度因子,將視覺軌跡拉伸到米制單位。

在IMU預積分中我們已經推導過基於世界座標系ww(東北天座標系)的預積分量約束:Rwbkpbk+1w=Rwbk(pbkw+vbkwΔtk12gwΔtk2)+αbk+1bkR^{b_{k}}_{w}p^{w}_{b_{k+1}} = R^{b_{k}}_{w}(p_{b_{k}}^{w}+\underline{v_{b_{k}}^{w}}\Delta t_{k}-\frac{1}{2}g^{w}\Delta t_{k}^{2})+\alpha_{b_{k+1}}^{b_{k}} Rwbkvbk+1w=Rwbk(vbkwgwΔtk)+βbk+1bkR^{b_{k}}_{w}\underline{v^{w}_{b_{k+1}}} = R^{b_{k}}_{w}(\underline{v^{w}_{b_{k}}}-g^{w}\Delta t_{k})+\beta_{b_{k+1}}^{b_{k}} 將世界座標系ww 換成相機初始時刻座標系c0c_{0}有: αbk+1bk=Rc0bk(s(pˉbk+1c0pˉbkc0)+12gc0Δtk2Rbkc0vbkbkΔtk)\alpha_{b_{k+1}}^{b_{k}} = R^{b_{k}}_{c_{0}}(s(\bar{p}^{c_{0}}_{b_{k+1}}-\bar{p}^{c_{0}}_{b_{k}})+\frac{1}{2} g^{c_{0}}\Delta t^{2}_{k}-\underline{R^{c_{0}}_{b_{k}}v^{b_{k}}_{b_{k}}}\Delta t_{k}) βbk+1bk=Rc0bk(Rbk+1c0vbk+1bk+1Rbkc0vbkbk+gc0Δtk)\beta_{b_{k+1}}^{b_{k}} = R^{b_{k}}_{c_{0}}(\underline{R^{c_{0}}_{b_{k+1}}v^{b_{k+1}}_{b_{k+1}}}-\underline{R^{c_{0}}_{b_{k}}v^{b_{k}}_{b_{k}}}+g^{c_{0}} \Delta t_{k})
將論文式(14) (即本文公式(2)) 代入αbk+1bk\alpha_{b_{k+1}}^{b_{k}}有:δαbk+1bk=αbk+1bkRc0bk(spˉbk+1c0spˉbkc0+12gc0Δtk2Rbkc0vbkbkΔtk)=αbk+1bkRc0bk(spˉck+1c0Rbk+1c0pcb(spˉckc0Rbkc0pcb)+12gc0Δtk2Rbkc0vbkbkΔtk)=αbk+1bksRc0bk(pˉck+1c0pˉckc0)+Rc0bkRbk+1c0pcbpcb+vbkbkΔtk12Rc0bkgc0Δtk2)=03×1\delta \alpha^{b_{k}}_{b_{k+1}} = \alpha^{b_{k}}_{b_{k+1}}-R^{b_{k}}_{c_{0}}(s\bar{p}^{c_{0}}_{b_{k+1}}-s\bar{p}^{c_{0}}_{b_{k}}+\frac{1}{2} g^{c_{0}}\Delta t^{2}_{k}-R^{c_{0}}_{b_{k}}v^{b_{k}}_{b_{k}}\Delta t_{k}) \\= \alpha^{b_{k}}_{b_{k+1}}-R^{b_{k}}_{c_{0}}( s\bar{p}^{c_{0}}_{c_{k+1}}-R^{c_{0}}_{b_{k+1}}p^{b}_{c} -(s\bar{p}^{c_{0}}_{c_{k}}-R^{c_{0}}_{b_{k}}p^{b}_{c})+\frac{1}{2} g^{c_{0}}\Delta t^{2}_{k}-R^{c_{0}}_{b_{k}}v^{b_{k}}_{b_{k}}\Delta t_{k}) \\ = \alpha^{b_{k}}_{b_{k+1}}-sR^{b_{k}}_{c_{0}}( \bar{p}^{c_{0}}_{c_{k+1}}-\bar{p}^{c_{0}}_{c_{k}}) + R^{b_{k}}_{c_{0}}R^{c_{0}}_{b_{k+1}}p^{b}_{c} - p^{b}_{c}+v^{b_{k}}_{b_{k}}\Delta t_{k}-\frac{1}{2}R^{b_{k}}_{c_{0}} g^{c_{0}}\Delta t^{2}_{k}) = 0_{3 \times 1} 這裏vbkbkv_{b_{k}}^{b_{k}}gc0g^{c_{0}}ss均爲待優化變量,將其轉成Ax=bAx=b的形式:
Rc0bk(pˉck+1c0pˉckc0)svbkbkΔtk+12Rc0bkgc0Δtk2=αbk+1bk+Rc0bkRbk+1c0pcbpcb(6)R^{b_{k}}_{c_{0}}(\bar{p}^{c_{0}}_{c_{k+1}}-\bar{p}^{c_{0}}_{c_{k}})s-v^{b_{k}}_{b_{k}}\Delta t_{k}+\frac{1}{2}R^{b_{k}}_{c_{0}}g^{c_{0}}\Delta t_{k}^{2} = \alpha^{b_{k}}_{b_{k+1}}+R^{b_{k}}_{c_{0}}R^{c_{0}}_{b_{k+1}}p^{b}_{c}-p^{b}_{c} \tag{6} 對於βbk+1bk\beta^{b_{k}}_{b_{k+1}}, 則有 δβbk+1bk=βbk+1bkRc0bk(Rbk+1c0vbk+1bk+1Rbkc0vbkbk+gc0Δtk)=03×1\delta \beta_{b_{k+1}}^{b_{k}}=\beta^{b_{k}}_{b_{k+1}}-R^{b_{k}}_{c_{0}}(R^{c_{0}}_{b_{k+1}}v^{b_{k+1}}_{b_{k+1}}-R^{c_{0}}_{b_{k}}v^{b_{k}}_{b_{k}}+g^{c_{0}}\Delta t_{k}) = 0_{3\times 1} 這裏的優化變量vbkbkv^{b_{k}}_{b_{k}}vbk+1bk+1v^{b_{k+1}}_{b_{k+1}}gc0g^{c_{0}},將其轉成Ax=bAx=b的形式:
Rc0bkRbk+1c0vbk+1bk+1Rc0bkRbkc0vbkbk+Rc0bkgc0Δtk=βbk+1bk(7)R^{b_{k}}_{c_{0}}R^{c_{0}}_{b_{k+1}}v^{b_{k+1}}_{b_{k+1}}-R^{b_{k}}_{c_{0}}R^{c_{0}}_{b_{k}}v^{b_{k}}_{b_{k}}+R^{b_{k}}_{c_{0}}g^{c_{0}}\Delta t_{k} = \beta^{b_{k}}_{b_{k+1}} \tag{7} 將公式(6)(7)寫出矩陣的形式:論文式【(18)(19)】
Hbk+1bkXI+nbk+1bk=[IΔtk012Rc0bkΔtk2Rc0bk(pˉck+1c0pˉckc0)IRc0bkRbk+1c0Rc0bkΔtk0]6×10[vbkbkvbk+1bk+1gc0s]10×1+nbk+1bk=[αbk+1bk+Rc0bkRbk+1c0pcbpcbβbk+1bk]6×1=z^bk+1bk(8)H^{b_{k}}_{b_{k+1}} \mathcal{X}_{I} + n^{b_{k}}_{b_{k+1}}= \begin{bmatrix} -I \Delta t_{k} & 0 &\frac{1}{2}R^{b_{k}}_{c_{0}}\Delta t_{k}^{2} & R^{b_{k}}_{c_{0}}(\bar{p}^{c_{0}}_{c_{k+1}}-\bar{p}^{c_{0}}_{c_{k}}) \\ -I & R^{b_{k}}_{c_{0}}R^{c_{0}}_{b_{k+1}} & R^{b_{k}}_{c_{0}}\Delta t_{k} & 0\end{bmatrix}_{6\times10}\begin{bmatrix} v^{b_{k}}_{b_{k}} \\ v^{b_{k+1}}_{b_{k+1}}\\ g^{c^{0}} \\ s\end{bmatrix}_{10 \times 1} + n^{b_{k}}_{b_{k+1}} \\ = \begin{bmatrix} \alpha^{b_{k}}_{b_{k+1}}+R^{b_{k}}_{c_{0}}R^{c_{0}}_{b_{k+1}}p^{b}_{c}-p^{b}_{c} \\ \beta^{b_{k}}_{b_{k+1}}\end{bmatrix}_{6 \times 1} = \hat{z}^{b_{k}}_{b_{k+1}} \tag{8}其中Rbkc0R_{b_{k}}^{c_{0}}Rbk+1c0R^{c_{0}}_{b_{k+1}}pˉbkc0\bar{p}_{b_{k}}^{c_{0}}pˉckc0\bar{p}_{c_{k}}^{c_{0}}可從視覺的SFM獲得,Δtk\Delta t_{k}爲相鄰倆幀圖像之間的時間間隔。
公式(8)轉換成線性最小二乘問題對狀態量進行求解:minXIkBz^bk+1bkHbk+1bkXIk2\underset{\mathcal{X_{I}}}{min}\sum_{k\in \mathcal{B}} ||\hat{z}^{b_{k}}_{b_{k+1}}-H^{b_{k}}_{b_{k+1}}\mathcal{X}^{k}_{I}||^{2} 從矩陣角度來看,也看看做解方程 Hbk+1bkXIk=z^bk+1bkAx=bH^{b_{k}}_{b_{k+1}}\mathcal{X}^{k}_{I}=\hat{z}^{b_{k}}_{b_{k+1}} \rightarrow Ax=b
具體代碼見 vins_estimator/initial/initial_aligment.cpp中的LinearAlignment().

3.3 優化重力向量gc0g^{c_{0}}

爲什麼需要優化重力向量?
利用公式(8)求解的重力向量並沒有模長的限制,即gc0=9.81||g^{c_{0}}||=9.81,因此重力向量gc0g^{c_{0}}實際上只有倆個自由度。

採用球面座標,在切面空間上用兩個變量重新參數化重力,將其表示爲:gc0^=ggˉ^c0+w1b1+w2b2=ggˉ^c0+bw\hat{g^{c_{0}}} = ||g|| \cdot \hat{\bar{g}}^{c_{0}}+w_{1}\overrightarrow{b}_{1}+w_{2}\overrightarrow{b}_{2} = ||g|| \cdot \hat{\bar{g}}^{c_{0}} + \overrightarrow{b}w 其中gˉ^c0\hat{\bar{g}}^{c_{0}}爲上一部分公式(8)得到的重力向量初始值的單位向量,w2×1=[w1,w2]w_{2 \times 1} = [w_{1}, w_{2}]爲待優化變量,b3×2=[b1,b2]\overrightarrow{b}_{3\times 2} = [\overrightarrow{b}_{1},\overrightarrow{b}_{2}]​中的b1,b2\overrightarrow{b}_{1},\overrightarrow{b}_{2}ggˉ^c0||g|| \cdot \hat{\bar{g}}^{c_{0}}的正切平面上且正交,定義如下:b1={(gˉ^c0×[1,0,0]), gˉ^c0[1,0,0]T(gˉ^c0×[1,0,0]), otherwise , b2=gˉ^c0×b1\overrightarrow{b}_{1}= \left\{\begin{matrix} (\hat{\bar{g}}^{c_{0}} \times [1, 0 ,0]), \ \hat{\bar{g}}^{c_{0}} \neq [1,0,0]^{T} \\ (\hat{\bar{g}}^{c_{0}} \times [1, 0 ,0]), \ otherwise \end{matrix}\right. \ , \ \overrightarrow{b}_{2} = \hat{\bar{g}}^{c_{0}} \times \overrightarrow{b}_{1} 因此優化變量將從gc0g^{c_{0}}(三個自由度)變爲wc0w^{c_{0}}(倆個自由度):
Hbk+1bkXI+nbk+1bk=[IΔtk012Rc0bkΔtk2bRc0bk(pˉck+1c0pˉckc0)IRc0bkRbk+1c0Rc0bkΔtkb0]6×9[vbkbkvbk+1bk+1ws]9×1+nbk+1bk=[αbk+1bk+Rc0bkRbk+1c0pcbpcb12Rc0bkΔtkggˉ^c0βbk+1bkRc0bkΔtkggˉ^c0]6×1=z^bk+1bk(8)H^{b_{k}}_{b_{k+1}} \mathcal{X}_{I} + n^{b_{k}}_{b_{k+1}}= \begin{bmatrix} -I \Delta t_{k} & 0 &\frac{1}{2}R^{b_{k}}_{c_{0}}\Delta t_{k}^{2} \overrightarrow{b} & R^{b_{k}}_{c_{0}}(\bar{p}^{c_{0}}_{c_{k+1}}-\bar{p}^{c_{0}}_{c_{k}}) \\ -I & R^{b_{k}}_{c_{0}}R^{c_{0}}_{b_{k+1}} & R^{b_{k}}_{c_{0}}\Delta t_{k} \overrightarrow{b} & 0\end{bmatrix}_{6\times 9}\begin{bmatrix} v^{b_{k}}_{b_{k}} \\ v^{b_{k+1}}_{b_{k+1}}\\ w \\ s\end{bmatrix}_{9 \times 1} + n^{b_{k}}_{b_{k+1}} \\ = \begin{bmatrix} \alpha^{b_{k}}_{b_{k+1}}+R^{b_{k}}_{c_{0}}R^{c_{0}}_{b_{k+1}}p^{b}_{c}-p^{b}_{c}-\frac{1}{2}R^{b_{k}}_{c_{0}}\Delta t_{k}||g|| \cdot \hat{\bar{g}}^{c_{0}}\\ \beta^{b_{k}}_{b_{k+1}}-R^{b_{k}}_{c_{0}}\Delta t_{k}||g|| \cdot \hat{\bar{g}}^{c_{0}}\end{bmatrix}_{6 \times 1} = \hat{z}^{b_{k}}_{b_{k+1}} \tag{8}
採用最小二乘對待優化變量XI\mathcal{X}_{I}進行重新優化。
具體代碼見 vins_estimator/initial/initial_aligment.cpp中的RefineGrivity().

3.4 對齊導航世界座標系

由於我們的求解都是在第一幀相機座標系c0c^{0}的,因此需要計算Rc0wR^{w}_{c_{0}}將所有c0c^{0}座標系下的變量轉到世界座標系下,令
Rc0w=exp([θa])R^{w}_{c_{0}}=exp([\theta \mathbf{a}])g^c0\hat{g}^{c_{0}}爲重力細化後得到的c0c^{0}座標系的重力向量,gw=[0,0,9.81]Tg^{w}=[0,0,9.81]^{T}爲世界座標系下的重力向量,故單位旋轉軸a\mathbf{a}爲: a=g^c0×g^wg^c0×g^w\mathbf{a}=\frac{\hat{g}^{c_{0}} \times \hat{g}^{w}}{||\hat{g}^{c_{0}} \times \hat{g}^{w}||} 旋轉角度θ\theta爲:θ=atang^c0×g^wg^c0g^w=atang^c0g^wsinθg^c0g^wcosθ\theta=atan \frac{\hat{g}^{c_{0}} \times \hat{g}^{w}}{\hat{g}^{c_{0}} \cdot \hat{g}^{w}} =atan \frac{||\hat{g}^{c_{0}}|| \cdot ||\hat{g}^{w}|| \sin \theta}{||\hat{g}^{c_{0}}|| \cdot ||\hat{g}^{w}|| \cos \theta}

問題1: 加速度的偏置batb_{at}爲什麼沒有估計?
由於線性加速度的模型爲:a^t=at+bat+Rwtgw+na\hat{a}_{t} = a_{t}+b_{at}+R_{w}^{t}g^{w}+n_{a},由於有重力的作用,加速度偏置bab_{a}RwtgwR_{w}^{t}g^{w}幾個數量級,很難在初始化的時候估計重力向量的同時估計出加速度偏置,故沒必要初始化加速度偏置的初始值batb_{at}

問題2:平移外參數pcbp^{b}_{c}爲何沒有初始化?
由於平移相比於旋轉而言,對於系統來說是線性的,因爲平移與其他變量量幾乎爲加法運算。同時,IMU與相機可能距離很近,因此在初始化過程沒有必要初始化pcbp^{b}_{c},而是留到非線性優化的時候。

發佈了144 篇原創文章 · 獲贊 144 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章