1. 程式人生 > >VINS-Mono預積分公式推導

VINS-Mono預積分公式推導

寫在前面

最近看了ESKF之後,收穫蠻大的,特別是對於四元數的殘差的推導,感覺給出了一個很標準的推導方式,因此就趁熱打鐵,把VINS中的預積分部分殘差推導了一下,也算是對上了VINS中imu_factor.h中的程式碼部分。

殘差

設狀態變數為x=[PiPjViVjQiQjBaiBajBgiBgj]x=[Pi,Pj,Vi,Vj,Qi,Qj,Bai,Baj,Bgi,Bgj]
兩幀之間預積分為m=[αij,βij,θij]m=[\alpha_{ij}, \beta_{ij}, \theta_{ij}]

[αij,βij,θij]
那麼對於兩幀之間的狀態變數有
δPij=Rwi(PjPi+0.5gt2Vit)αijδVij=Rwi(VjVi+gt)βijδqij=Qij1Qi1QjδBaij=BajBaiδBgij=BgjBgi \delta P_{ij}=R_w^i(P_j-P_i+0.5gt^2-V_it)-\alpha_{ij} \\ \delta V_{ij}=R_w^i(V_j-V_i+gt)-\beta_{ij} \\ \delta q_{ij}=Q_{ij}^{-1}\otimes{Q_i^{-1}}\otimes{Q_j} \\ \delta Ba_{ij}=Baj-Bai \\ \delta Bg_{ij}=Bgj-Bgi \\

可見上述的公式類似於一個位姿圖的樣子

殘差對於狀態變數的jacobian

其實我們都知道,在整個優化問題中,jacobian的求解還是比較重要的,因為它直接構成了增量方程,我們下面主要看一下關於上面殘差關於狀態變數的jacobian

a. 對於i時刻的位姿Pi,Qi

  • δPij\delta P_{ij}對於Pi,Qi的導數很明顯為
    dδPijdPi=Rwid
    δPijdQi=dδPijdRiw=(RiwExp(δθ))T(PjPi+0.5gt2Vit)(Riw)T(PjPi+0.5gt2Vit)δθ=(Riwδθ×)T(PjPi+0.5gt2Vit)=((Riw)T(PjPi+0.5gt2Vit))×δθ \frac{d\delta P_{ij}}{dPi}=-R_w^i \\ \frac{d\delta P_{ij}}{dQi}=\frac{d\delta P_{ij}}{dR_i^w}=\frac{(R_i^wExp(\delta \theta))^T(P_j-P_i+0.5gt^2-V_it)-(R_i^w)^T(P_j-P_i+0.5gt^2-V_it)}{\delta \theta} = (R_i^w\delta \theta_×)^T(P_j-P_i+0.5gt^2-V_it)=((R_i^w)^T(P_j-P_i+0.5gt^2-V_it))_×\delta\theta \\
  • δVij\delta V_{ij}對於Pi,Qi的導數很明顯為
    dδVijdPi=RwidδVijdQi=dδVijdRiw=(RiwExp(δθ))T(VjVi+gt)(Riw)T(VjVi+gt)δθ=(Riwδθ×)T(VjVi+gt)=((Riw)T(VjVi+gt)×δθ \frac{d\delta V_{ij}}{dPi}=-R_w^i \\ \frac{d\delta V_{ij}}{dQi}=\frac{d\delta V_{ij}}{dR_i^w}=\frac{(R_i^wExp(\delta \theta))^T(V_j-V_i+gt)-(R_i^w)^T(V_j-V_i+gt)}{\delta \theta} = (R_i^w\delta \theta_×)^T(V_j-V_i+gt)=((R_i^w)^T(V_j-V_i+gt)_×\delta\theta
  • δrij\delta r_{ij}對於Pi的導數很明顯為0,但是對於Qi的導數,這裡我們要進行一下簡單的推導

qijt=(qi[10.5δθ])1qj,qij=qijq_{ijt}=(q_i\otimes{\begin{bmatrix}1\\0.5\delta \theta\end{bmatrix}})^{-1}\otimes q_j,\quad q_{ij}=q_{ij}