ORB_SLAM3中IMU预积分过程原理分析

ORB_SLAM3中IMU预积分过程原理分析

1. 特殊正交群SO(3)的一些性质

指数映射:
e x p ( ϕ ^ ) = I + s i n ( ∥ ϕ ∥ ) ∥ ϕ ∥ ϕ ^ + 1 − c o s ( ∥ ϕ ∥ ) ∥ ϕ ∥ 2 ( ϕ ^ ) 2 (1) exp(\phi^{\hat{ }}) = \mathbf{I} + \frac{sin(\left\|\phi \right\|)}{\left\|\phi \right\|}\phi^{\hat{ }} + \frac{1-cos(\left\|\phi \right\|)}{\left\|\phi \right\|^{2}}(\phi^{\hat{ }})^{2} \tag{1} exp(ϕ^)=I+ϕsin(ϕ)ϕ^+ϕ21cos(ϕ)(ϕ^)2(1)
指数映射的一阶近似:
e x p ( ϕ ^ ) ≈ I + ϕ ^ (2) exp(\phi^{\hat{ }}) \approx \mathbf{I} + \phi^{\hat{ }} \tag{2} exp(ϕ^)I+ϕ^(2)
对数映射:
l o g ( R ) = φ ⋅ ( R − R T ) 2 s i n ( φ ) 其 中 φ = c o s − 1 ( t r ( R ) − 1 2 ) (3) log(\mathbf{R}) = \frac{\varphi\cdot(\mathbf{R}-\mathbf{R}^{T})}{2sin(\varphi)}其中\varphi=cos^{-1}(\frac{tr(\mathbf{R})-1}{2}) \tag{3} log(R)=2sin(φ)φ(RRT)φ=cos1(2tr(R)1)(3)
BCH公式与近似形式(14讲72页):
E x p ( ϕ + δ ϕ ) ≈ E x p ( ϕ ) E x p ( J r ( ϕ ) δ ϕ ) (4) Exp(\phi + \delta\phi) \approx Exp(\phi)Exp(\mathbf{J}_{r}(\phi)\delta\phi) \tag{4} Exp(ϕ+δϕ)Exp(ϕ)Exp(Jr(ϕ)δϕ)(4)
式4中:
J r ( ϕ ) = I − 1 − c o s ( ∥ ϕ ∥ ) ∥ ϕ ∥ 2 + ∥ ϕ ∥ − s i n ( ∥ ϕ ∥ ) ∥ ϕ 3 ∥ ( ϕ ^ ) 2 (5) \mathbf{J}_{r}(\phi) = \mathbf{I} - \frac{1-cos(\left\|\phi \right\|)}{\left\|\phi \right\|^{2}} + \frac{\left\|\phi \right\|-sin(\left\|\phi \right\|)}{\left\|\phi ^{3}\right\|} (\phi^{\hat{ }})^{2} \tag{5} Jr(ϕ)=Iϕ21cos(ϕ)+ϕ3ϕsin(ϕ)(ϕ^)2(5)
指数映射还有如下性质:
E x p ( ϕ ) R = R E x p ( R T ϕ ) (6) Exp(\phi)\mathbf{R} = \mathbf{R}Exp(\mathbf{R}^{T}\phi) \tag{6} Exp(ϕ)R=RExp(RTϕ)(6)
注: 上述为了公式的简便使用了 E x p ( ϕ ) Exp(\phi) Exp(ϕ) 代替了 e x p ( ϕ ^ ) exp(\phi^{\hat{ }}) exp(ϕ^).

2. IMU测量模型和运动模型

测量模型:
B ω ~ W B ( t ) = B ω W B ( t ) + b g ( t ) + η g ( t ) B a ~ ( t ) = R W B T ( W a ( t ) − W g ) + b a ( t ) + η a ( t ) (7) \begin{aligned} {}_{_B}\widetilde{\boldsymbol{\omega}}_{_{WB}}(t) &= {}_{_B}\boldsymbol{\omega}_{_{WB}}(t) + \mathbf{b}^{g}(t) + \boldsymbol{\eta}^{g}(t) \\ {}_{_B}\widetilde{\mathbf{a}}(t) &= \mathbf{R}_{_{WB}}^{T}({}_{_W}\mathbf{a}(t)-{}_{_W}\mathbf{g}) + \mathbf{b}^{a}(t) + \boldsymbol{\eta}^{a}(t) \tag{7} \end{aligned} Bω WB(t)Ba (t)=BωWB(t)+bg(t)+ηg(t)=RWBT(Wa(t)Wg)+ba(t)+ηa(t)(7)
运动学模型:
R ˙ W B = R W B ⋅ B ω W B ^ v ˙ W = W a p ˙ W = W v (8) \begin{aligned} \dot{\mathbf{R}}_{_{WB}} &= \mathbf{R}_{_{WB}} \cdot{}_{_B}\boldsymbol{\omega}_{_{WB}}\hat{}\\ \dot{\mathbf{v}}_{_W} &= {}_{_W}\mathbf{a} \\ \dot{\mathbf{p}}_{_W} &= {}_{_W}\mathbf{v} \tag{8} \end{aligned} R˙WBv˙Wp˙W=RWBBωWB^=Wa=Wv(8)
基于运动学模型可得 t t t t + Δ t t+\Delta t t+Δt 时刻状态关系:
R W B ( t + Δ t ) = R W B E x p ∫ t t + Δ t B ω W B ( τ ) d τ W v ( t + Δ t ) = W v ( t ) + ∫ t t + Δ t W a ( τ ) d τ W p ( t + Δ t ) = W p ( t ) + ∫ t t + Δ t W v ( τ ) d τ + ∬ t t + Δ t W a ( τ ) d τ 2 (9) \begin{aligned} \mathbf{R}_{_{WB}}(t+\Delta t) &= \mathbf{R}_{_{WB}} Exp{ \int_{t}^{t+\Delta{t}} {}_{_{B}}\boldsymbol{\omega}_{_{WB}}(\tau) d\tau } \\ {}_{_{W}}\mathbf{v}(t+\Delta t) &= {}_{_{W}}\mathbf{v}(t) + \int_{t}^{t+\Delta t} {}_{_W}\mathbf{a}(\tau)d\tau \\ {}_{_{W}}\mathbf{p}(t+\Delta t) &= {}_{_{W}}\mathbf{p}(t) + \int_{t}^{t+\Delta t} {}_{_W}\mathbf{v}(\tau)d\tau + \iint_{t}^{t+\Delta t} {}_{_W}\mathbf{a}(\tau)d\tau^{2} \tag{9} \end{aligned} RWB(t+Δt)Wv(t+Δt)Wp(t+Δt)=RWBExptt+ΔtBωWB(τ)dτ=Wv(t)+tt+ΔtWa(τ)dτ=Wp(t)+tt+ΔtWv(τ)dτ+tt+ΔtWa(τ)dτ2(9)
假设 W a {}_{_W}\mathbf{a} Wa B ω W B {}_{_{B}}\boldsymbol{\omega}_{_{WB}} BωWB [ t , t + Δ t ] [t, t+\Delta t] [t,t+Δt]区间内不变,则公式(9)的结果:
R W B ( t + Δ t ) = R W B E x p ( B ω W B ( t ) Δ t ) W v ( t + Δ t ) = W v ( t ) + W a ( t ) Δ t W p ( t + Δ t ) = W p ( t ) + W v ( t ) Δ t + 1 2 W a ( t ) Δ t 2 (10) \begin{aligned} \mathbf{R}_{_{WB}}(t+\Delta t) &= \mathbf{R}_{_{WB}} Exp({}_{_B}\boldsymbol{\omega}_{_{WB}}(t)\Delta t )\\ {}_{_{W}}\mathbf{v}(t+\Delta t) &= {}_{_{W}}\mathbf{v}(t) + {}_{_W}\mathbf{a}(t)\Delta t\\ {}_{_{W}}\mathbf{p}(t+\Delta t) &= {}_{_{W}}\mathbf{p}(t) + {}_{_W}\mathbf{v}(t)\Delta t + \frac{1}{2}{}_{_W}\mathbf{a}(t){\Delta t}^{2} \tag{10} \end{aligned} RWB(t+Δt)Wv(t+Δt)Wp(t+Δt)=RWBExp(BωWB(t)Δt)=Wv(t)+Wa(t)Δt=Wp(t)+Wv(t)Δt+21Wa(t)Δt2(10)
将公式(7)测量模型带入公式(10)可得:
R ( t + Δ t ) = R ( t ) E x p ( ( ω ~ ( t ) − b g ( t ) − η g d ( t ) ) Δ t ) v ( t + Δ t ) = v ( t ) + g Δ t + R ( t ) ( a ~ ( t ) − b a ( t ) − η a d ( t ) ) Δ t p ( t + Δ t ) = p ( t ) + v ( t ) Δ t + 1 2 g Δ t 2 + 1 2 R ( t ) ( a ~ ( t ) − b a ( t ) − η a d ( t ) ) Δ t 2 (11) \begin{aligned} \mathbf{R}(t+\Delta t) &= \mathbf{R}(t)Exp((\widetilde{\boldsymbol{\omega}}(t)-\mathbf{b}^{g}(t)-\boldsymbol{\eta}^{gd}(t))\Delta t) \\ \mathbf{v}(t+\Delta t) &= \mathbf{v}(t) + \mathbf{g}\Delta t + \mathbf{R}(t) (\widetilde{\mathbf{a}}(t) - \mathbf{b}^{a}(t) - \boldsymbol{\eta}^{ad}(t))\Delta t \\ \mathbf{p}(t+\Delta t) &= \mathbf{p}(t) + \mathbf{v}(t)\Delta t + \frac{1}{2}\mathbf{g}\Delta t^{2} + \frac{1}{2}\mathbf{R}(t) (\widetilde{\mathbf{a}}(t) - \mathbf{b}^{a}(t) - \boldsymbol{\eta}^{ad}(t))\Delta t^{2} \tag{11} \end{aligned} R(t+Δt)v(t+Δt)p(t+Δt)=R(t)Exp((ω (t)bg(t)ηgd(t))Δt)=v(t)+gΔt+R(t)(a (t)ba(t)ηad(t))Δt=p(t)+v(t)Δt+21gΔt2+21R(t)(a (t)ba(t)ηad(t))Δt2(11)
注: 上述推导从公式(9)开始就假设 R W B ( t ) R_{_{WB}}(t) RWB(t) [ t , Δ t ] [t,\Delta t] [t,Δt]区间内是不变的,这与VINS预积分的推导是不一样的,这样的假设最大的好处就是使得公式比较简洁。另外是由于在视觉惯性紧耦合的slam算法中使用的imu频率都比较高,因此假设相邻两帧之间的位姿没有变化也是较合理的,并且参考论文中的作者也在实际实验中验证了该假设并不会明显影响算法测试结果。但如果使用的imu频率较低,就不能这么假设。

3. IMU预积分

所谓的预积分过程就是将两关键帧之间的所有imu测量值转换成一个测量值,这样就可以只加入一个观测约束,减少了约束数量,可有效的保证vio过程的实时进行。假设两相邻关键帧获取时刻采集的imu帧索引为i和j。则j时刻的状态信息可由i时刻状态信息通过如下积分获得:
R j = R i ∏ k = i j − 1 E x p ( ( w ~ k − b k g − η k g d ) Δ t ) v j = v i + g Δ t i j + ∑ k = i j − 1 R k ( a ~ k − b k a − η k a d ) Δ t p j = p i + ∑ k = i j − 1 [ v k Δ t + 1 2 g Δ t 2 + 1 2 R k ( a ~ k − b k a − η k a d ) Δ t 2 ] (12) \begin{aligned} \mathbf{R}_{j} &= \mathbf{R}_{i}\prod_{k=i}^{j-1}Exp((\widetilde{\boldsymbol{w}}_{k} - \mathbf{b}_{k}^{g}-\boldsymbol{\eta}_{k}^{gd})\Delta t) \\ \mathbf{v}_{j} &= \mathbf{v}_{i} + \mathbf{g}\Delta t_{ij} + \sum_{k=i}^{j-1}\mathbf{R}_{k}(\widetilde{\mathbf{a}}_{k} - \mathbf{b}_{k}^{a}-\boldsymbol{\eta}_{k}^{ad})\Delta t \\ \mathbf{p}_{j} &= \mathbf{p}_{i} + \sum_{k=i}^{j-1}[\mathbf{v}_{k}\Delta t + \frac{1}{2}\mathbf{g}\Delta t^{2} + \frac{1}{2}\mathbf{R}_{k}(\widetilde{\mathbf{a}}_{k} - \mathbf{b}_{k}^{a}-\boldsymbol{\eta}_{k}^{ad})\Delta t^{2}] \tag{12} \end{aligned} Rjvjpj=Rik=ij1Exp((w kbkgηkgd)Δt)=vi+gΔtij+k=ij1Rk(a kbkaηkad)Δt=pi+k=ij1[vkΔt+21gΔt2+21Rk(a kbkaηkad)Δt2](12)
上面公式(12)有个缺点就是如果在 t i t_{i} ti 时刻的状态 [ p i , v i , R i , b i a , b i g ] [\mathbf{p}_{i}, \mathbf{v}_{i}, \mathbf{R}_{i}, \mathbf{b}_{i}^{a}, \mathbf{b}_{i}^{g}] [pi,vi,Ri,bia,big] 发生改变(在进行vio轨迹优化时,状态会不断的进行调整),则需要重新重复上面的积分过程,这将非常耗时,为了避免该问题,对上述积分过程进行了如下改变:
Δ R i j = R i T R j = ∏ k = i j − 1 E x p ( ( w ~ k − b k g − η k g d ) Δ t ) Δ v i j = R i T ( v j − v i − g Δ t i j ) = ∑ k = i j − 1 R i k ( a ~ k − b k a − η k a d ) Δ t Δ p i j = R i T ( p j − p i − 1 2 g Δ t i j 2 ) = ∑ k = i j − 1 [ v i k Δ t + 1 2 R i k ( a ~ k − b k a − η k a d ) Δ t 2 ] (13) \begin{aligned} \Delta \mathbf{R}_{ij} &= \mathbf{R}_{i}^{T}\mathbf{R}_{j}=\prod_{k=i}^{j-1}Exp((\widetilde{\boldsymbol{w}}_{k} - \mathbf{b}_{k}^{g}-\boldsymbol{\eta}_{k}^{gd})\Delta t)\\ \Delta \mathbf{v}_{ij} &= \mathbf{R}_{i}^{T}(\mathbf{v}_{j} - \mathbf{v}_{i} - \mathbf{g}\Delta t_{ij}) = \sum_{k=i}^{j-1}\mathbf{R}_{ik}(\widetilde{\mathbf{a}}_{k} - \mathbf{b}_{k}^{a}-\boldsymbol{\eta}_{k}^{ad})\Delta t \\ \Delta \mathbf{p}_{ij} &= \mathbf{R}_{i}^{T}(\mathbf{p}_{j}-\mathbf{p}_{i}-\frac{1}{2}\mathbf{g}\Delta t_{ij}^{2}) = \sum_{k=i}^{j-1}[\mathbf{v}_{ik}\Delta t + \frac{1}{2}\mathbf{R}_{ik}(\widetilde{\mathbf{a}}_{k} - \mathbf{b}_{k}^{a}-\boldsymbol{\eta}_{k}^{ad})\Delta t^{2}] \tag{13} \end{aligned} ΔRijΔvijΔpij=RiTRj=k=ij1Exp((w kbkgηkgd)Δt)=RiT(vjvigΔtij)=k=ij1Rik(a kbkaηkad)Δt=RiT(pjpi21gΔtij2)=k=ij1[vikΔt+21Rik(a kbkaηkad)Δt2](13)
从公式(13)可以看出右边积分部分只与 [ b i a , b i g ] [\mathbf{b}_{i}^{a}, \mathbf{b}_{i}^{g}] [bia,big] 状态有关,按当前的公式来说,偏置发生改变,右侧的积分过程需要重新进行,但由于偏置变化较小,可以用近似的方法来计算,后面3.3节会专门来说这个问题。

3.1 预积分测量模型
3.1.1 姿态测量模型

由公式(13),可知:
Δ R i j = R i T R j = ∏ k = i j − 1 E x p ( ( w ~ k − b k g − η k g d ) Δ t ) ≃ ( 4 ) ∏ k = i j − 1 E x p ( ( w ~ k − b k g ) Δ t ) E x p ( − J r k ( ( w ~ k − b k g ) Δ t ) η k g d Δ t ) = ( 6 ) Δ R ~ i j ∏ k = i j − 1 E x p ( − Δ R ~ k + 1 , j T J r k ( ( w ~ k − b k g ) Δ t ) η k g d Δ t ) = Δ R ~ i j E x p ( − δ ϕ i j ) (14) \begin{aligned} \Delta \mathbf{R}_{ij} &= \mathbf{R}_{i}^{T}\mathbf{R}_{j}\\ &=\prod_{k=i}^{j-1}Exp((\widetilde{\boldsymbol{w}}_{k} - \mathbf{b}_{k}^{g}-\boldsymbol{\eta}_{k}^{gd})\Delta t)\\ &\overset{(4)}\simeq \prod_{k=i}^{j-1}Exp((\widetilde{\boldsymbol{w}}_{k} - \mathbf{b}_{k}^{g})\Delta t) Exp(-\mathbf{J}_{r}^{k}((\widetilde{\boldsymbol{w}}_{k} - \mathbf{b}_{k}^{g})\Delta t)\boldsymbol{\eta}_{k}^{gd}\Delta t) \\ &\overset{(6)}=\Delta\widetilde{\mathbf{R}}_{ij}\prod_{k=i}^{j-1}Exp(-\Delta\widetilde{\mathbf{R}}_{k+1,j}^{T}\mathbf{J}_{r}^{k}((\widetilde{\boldsymbol{w}}_{k} - \mathbf{b}_{k}^{g})\Delta t) \boldsymbol{\eta}_{k}^{gd}\Delta t) \\ &= \Delta\widetilde{\mathbf{R}}_{ij}Exp(-\delta\phi_{ij}) \end{aligned} \tag{14} ΔRij=RiTRj=k=ij1Exp((w kbkgηkgd)Δt)(4)k=ij1Exp((w kbkg)Δt)Exp(Jrk((w kbkg)Δt)ηkgdΔt)=(6)ΔR ijk=ij1Exp(ΔR k+1,jTJrk((w kbkg)Δt)ηkgdΔt)=ΔR ijExp(δϕij)(14)
式中:
Δ R ~ i j = ∏ k = i j − 1 E x p ( ( w ~ k − b k g ) Δ t ) \Delta\widetilde{\mathbf{R}}_{ij} = \prod_{k=i}^{j-1}Exp((\widetilde{\boldsymbol{w}}_{k} - \mathbf{b}_{k}^{g})\Delta t) ΔR ij=k=ij1Exp((w kbkg)Δt)
上述推导中最难的部分是获得第二步结果,其推导方式可参考博客 。 于是基于公式(14)可获得姿态测量方程为:
Δ R ~ i j = R i T R j E x p ( δ ϕ i j ) (15) \Delta\widetilde{\mathbf{R}}_{ij} = \mathbf{R}_{i}^{T}\mathbf{R}_{j}Exp(\delta\phi_{ij}) \tag{15} ΔR ij=RiTRjExp(δϕij)(15)
注: 式中(4)(6)指的是基于公式(4)(6)来推导的,后面都会用这种表示方式.

3.1.2 速度测量模型

将公式(14)结果 Δ R i j = Δ R ~ i j E x p ( − δ ϕ i j ) \Delta \mathbf{R}_{ij}=\Delta\widetilde{\mathbf{R}}_{ij}Exp(-\delta\phi_{ij}) ΔRij=ΔR ijExp(δϕij)带入公式(13)的 Δ v i j \Delta \mathbf{v}_{ij} Δvij中可得:
Δ v i j = R i T ( v j − v i − g Δ t i j ) = ∑ k = i j − 1 R i k ( a ~ k − b k a − η k a d ) Δ t ≃ ( 2 , 14 ) ∑ k = i j − 1 Δ R ~ i k ( I − δ ϕ i k ^ ) ( a ~ k − b i a ) Δ t − Δ R ~ i k η k a d Δ t = Δ v ~ i j + ∑ k = i j − 1 [ Δ R ~ i k ( a ~ k − b i a ) ^ δ ϕ i k Δ t − Δ R ~ i k η k a d Δ t ] = Δ v ~ i j − δ v i j (16) \begin{aligned} \Delta \mathbf{v}_{ij} &=\mathbf{R}_{i}^{T}(\mathbf{v}_{j} - \mathbf{v}_{i} - \mathbf{g}\Delta t_{ij})\\ &= \sum_{k=i}^{j-1}\mathbf{R}_{ik}(\widetilde{\mathbf{a}}_{k} - \mathbf{b}_{k}^{a}-\boldsymbol{\eta}_{k}^{ad})\Delta t \\ &\overset{(2,14)}\simeq \sum_{k=i}^{j-1}\Delta\widetilde{\mathbf{R}}_{ik}(\mathbf{I}-\delta\phi_{ik}\hat{})(\widetilde{\mathbf{a}}_{k}-\mathbf{b}_{i}^{a})\Delta t - \Delta\widetilde{\mathbf{R}}_{ik}\boldsymbol{\eta}_{k}^{ad}\Delta t \\ &= \Delta\widetilde{\mathbf{v}}_{ij} + \sum_{k=i}^{j-1}[\Delta\widetilde{\mathbf{R}}_{ik}(\widetilde{\mathbf{a}}_{k}-\mathbf{b}_{i}^{a})\hat{}\delta\phi_{ik}\Delta t - \Delta\widetilde{\mathbf{R}}_{ik}\boldsymbol{\eta}_{k}^{ad}\Delta t] \\ &= \Delta\widetilde{\mathbf{v}}_{ij} - \delta\mathbf{v}_{ij} \tag{16} \end{aligned} Δvij=RiT(vjvigΔtij)=k=ij1Rik(a kbkaηkad)Δt(2,14)k=ij1ΔR ik(Iδϕik^)(a kbia)ΔtΔR ikηkadΔt=Δv ij+k=ij1[ΔR ik(a kbia)^δϕikΔtΔR ikηkadΔt]=Δv ijδvij(16)
式中:
Δ v ~ i j = ∑ k = i j − 1 Δ R ~ i k ( a ~ k − b i a ) Δ t \Delta\widetilde{\mathbf{v}}_{ij} = \sum_{k=i}^{j-1}\Delta\widetilde{\mathbf{R}}_{ik}(\widetilde{\mathbf{a}}_{k}-\mathbf{b}_{i}^{a})\Delta t Δv ij=k=ij1ΔR ik(a kbia)Δt
于是可得速度测量模型:
Δ v ~ i j = R i T ( v j − v i − g Δ t i j ) + δ v i j (17) \Delta\widetilde{\mathbf{v}}_{ij} = \mathbf{R}_{i}^{T}(\mathbf{v}_{j} - \mathbf{v}_{i} - \mathbf{g}\Delta t_{ij}) + \delta\mathbf{v}_{ij} \tag{17} Δv ij=RiT(vjvigΔtij)+δvij(17)

3.1.3 位置测量模型

将公式(14)(16)的结果带入公式(13)的 Δ p i j \Delta \mathbf{p}_{ij} Δpij中,可得:
Δ p i j = R i T ( p j − p i − 1 2 g Δ t i j 2 ) = ∑ k = i j − 1 [ v i k Δ t + 1 2 R i k ( a ~ k − b k a − η k a d ) Δ t 2 ] ≃ 2 , 14 , 16 ∑ k = i j − 1 [ ( Δ v ~ i k − δ v i k ) Δ t + 1 2 Δ R ~ i k ( I − δ ϕ i k ^ ) ( a ~ k − b i a ) Δ t 2 − 1 2 Δ R ~ i k η k a d Δ t 2 ] = Δ p ~ i j + ∑ k = i j − 1 [ − δ v i k Δ t + 1 2 Δ R ~ i k ( a ~ k − b i a ) ^ δ ϕ i k Δ t 2 − 1 2 Δ R ~ i k η k a d Δ t 2 ] ] = Δ p ~ i j − δ p i j (18) \begin{aligned} \Delta \mathbf{p}_{ij} &= \mathbf{R}_{i}^{T}(\mathbf{p}_{j}-\mathbf{p}_{i}-\frac{1}{2}\mathbf{g}\Delta t_{ij}^{2})\\ &= \sum_{k=i}^{j-1}[\mathbf{v}_{ik}\Delta t + \frac{1}{2}\mathbf{R}_{ik}(\widetilde{\mathbf{a}}_{k} - \mathbf{b}_{k}^{a}-\boldsymbol{\eta}_{k}^{ad})\Delta t^{2}]\\ &\overset{2,14,16}\simeq \sum_{k=i}^{j-1}[(\Delta\widetilde{\mathbf{v}}_{ik}-\delta\mathbf{v}_{ik})\Delta t + \frac{1}{2}\Delta\widetilde{\mathbf{R}}_{ik}(\mathbf{I}-\delta\phi_{ik}\hat{})(\widetilde{\mathbf{a}}_{k}-\mathbf{b}_{i}^{a})\Delta t^{2} - \frac{1}{2}\Delta\widetilde{\mathbf{R}}_{ik}\boldsymbol{\eta}_{k}^{ad}\Delta t^{2}]\\ &= \Delta\widetilde{\mathbf{p}}_{ij} + \sum_{k=i}^{j-1}[-\delta\mathbf{v}_{ik}\Delta t + \frac{1}{2}\Delta\widetilde{\mathbf{R}}_{ik}(\widetilde{\mathbf{a}}_{k}-\mathbf{b}_{i}^{a})\hat{}\delta\phi_{ik}\Delta t^{2}- \frac{1}{2}\Delta\widetilde{\mathbf{R}}_{ik}\boldsymbol{\eta}_{k}^{ad}\Delta t^{2}]]\\ &= \Delta\widetilde{\mathbf{p}}_{ij} - \delta\mathbf{p}_{ij} \tag{18} \end{aligned} Δpij=RiT(pjpi21gΔtij2)=k=ij1[vikΔt+21Rik(a kbkaηkad)Δt2]2,14,16k=ij1[(Δv ikδvik)Δt+21ΔR ik(Iδϕik^)(a kbia)Δt221ΔR ikηkadΔt2]=Δp ij+k=ij1[δvikΔt+21ΔR ik(a kbia)^δϕikΔt221ΔR ikηkadΔt2]]=Δp ijδpij(18)
于是可得位置测量模型:
Δ p ~ i j = R i T ( p j − p i − 1 2 g Δ t i j 2 ) + δ p i j (19) \Delta\widetilde{\mathbf{p}}_{ij} = \mathbf{R}_{i}^{T}(\mathbf{p}_{j}-\mathbf{p}_{i}-\frac{1}{2}\mathbf{g}\Delta t_{ij}^{2}) + \delta\mathbf{p}_{ij} \tag{19} Δp ij=RiT(pjpi21gΔtij2)+δpij(19)

3.2 噪声传递

由公式(14)可知预积分姿态噪声项为:
在这里插入图片描述
由公式(16)可知预积分速度噪声项为:
在这里插入图片描述
由公式(18)可知预积分位置噪声项为:
在这里插入图片描述
Δ x i k = [ δ ϕ i k , δ v i k , δ p i k ] \Delta\mathbf{x}_{ik}=[\delta\phi_{ik}, \delta\mathbf{v}_{ik},\delta\mathbf{p}_{ik}] Δxik=[δϕik,δvik,δpik] η k d = [ η k g d , η k a d ] \boldsymbol{\eta}_{k}^{d}=[\boldsymbol{\eta}_{k}^{gd}, \boldsymbol{\eta}_{k}^{ad}] ηkd=[ηkgd,ηkad],于是上述三个公式可写为:
Δ x i j = [ Δ R ~ j − 1 , j T 0 0 − Δ R ~ i , j − 1 T ( a ~ j − 1 − b i a ) ^ Δ t I 0 − 1 2 Δ R ~ i , j − 1 T ( a ~ j − 1 − b i a ) ^ Δ t 2 Δ t I ] Δ x i , j − 1 + [ J r j − 1 0 0 Δ R ~ i , j − 1 Δ t 0 1 2 Δ R ~ i , j − 1 Δ t 2 ] η j − 1 d = A j − 1 Δ x i , j − 1 + B j − 1 η j − 1 d (20) \begin{aligned} \Delta\mathbf{x}_{ij} = \begin{bmatrix} \Delta\widetilde{\mathbf{R}}_{j-1,j}^{T} & 0 & 0 \\ -\Delta\widetilde{\mathbf{R}}_{i,j-1}^{T}(\mathbf{\widetilde{\mathbf{a}}}_{j-1}-\mathbf{b}_{i}^{a})\hat{}\Delta t & I & 0 \\ -\frac{1}{2}\Delta\widetilde{\mathbf{R}}_{i,j-1}^{T}(\mathbf{\widetilde{\mathbf{a}}}_{j-1}-\mathbf{b}_{i}^{a})\hat{}\Delta t^{2} & \Delta t & I \end{bmatrix} \Delta\mathbf{x}_{i,j-1} + \begin{bmatrix} \mathbf{J}_{r}^{j-1} & 0\\ 0 & \Delta\widetilde{\mathbf{R}}_{i,j-1}\Delta t \\ 0 & \frac{1}{2}\Delta\widetilde{\mathbf{R}}_{i,j-1}\Delta t^{2} \end{bmatrix} \boldsymbol{\eta}_{j-1}^{d} \end{aligned} = A_{j-1}\Delta\mathbf{x}_{i,j-1}+B_{j-1}\boldsymbol{\eta}_{j-1}^{d} \tag{20} Δxij=ΔR j1,jTΔR i,j1T(a j1bia)^Δt21ΔR i,j1T(a j1bia)^Δt20IΔt00IΔxi,j1+Jrj1000ΔR i,j1Δt21ΔR i,j1Δt2ηj1d=Aj1Δxi,j1+Bj1ηj1d(20)
从上述推导可以看出,预积分噪声项的传递是线性的,因此可以直接通过如下线性传递的方式进行协方差的更新:
∑ i j = A j − 1 ∑ i , j − 1 A j − 1 T + B j − 1 ∑ η B j − 1 T (21) \sum_{ij} = A_{j-1}\sum_{i,j-1}A_{j-1}^{T} + B_{j-1}\sum_{\eta}B_{j-1}^{T} \tag{21} ij=Aj1i,j1Aj1T+Bj1ηBj1T(21)

----------------------------------- 公式已敲吐血 😦 😦 😦,后面内容后续再补 --------------------------------

3.3 偏置更新
3.4 IMU预积分因子
3.5 IMU偏置模型

4. 代码解析

参考

On-Manifold Preintegration for Real-Time Visual-Inertial Odometry
《视觉SLAM十四讲》
https://blog.csdn.net/l741299292/article/details/81203464
IMU预积分总结与公式推导三

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ORB-SLAM3积分过程是基于IMU(惯性测量单元)数据的,主要用于在视觉SLAM融合IMU数据,提高位姿估计的精度和鲁棒性。积分过程包含三个主要步骤:积分初始化、积分更新和积分优化。 1. 积分初始化 积分初始化是在ORB-SLAM3的IMU积分进行的。该类维护IMU数据和积分状态,并提供更新和优化函数。在积分初始化过程,需要根据IMU的加速度计和陀螺仪数据计算出四元数和速度的初始值,同时初始化加速度计和陀螺仪的偏移量。具体计算过程如下: 假设IMU数据的时间戳为t,IMU测量的线加速度为a,角速度为w,则IMU测量值在t时刻的状态向量为: $x_{imu}=[q_t,v_t,b_a,b_w]^T$ 其$q_t$为四元数,$v_t$为速度,$b_a$和$b_w$为加速度计和陀螺仪的偏移量。 根据IMU测量的线加速度和角速度,可以计算出在t时刻到t+dt时刻之间的旋转和平移量。在ORB-SLAM3积分过程采用积分的方法,即假设IMU测量值在t时刻和t+dt时刻之间是恒定的,那么在t时刻到t+dt时刻之间的状态向量可以表示为: $x_{t+dt}=exp(J(\frac{w_t+w_{t+dt}}{2}-b_w)\Delta t)x_t$ 其$exp$表示四元数的指数映射,$J$为旋转矩阵的导数,$\Delta t$为时间间隔。 根据上述公式,可以计算出初始的四元数和速度值,以及加速度计和陀螺仪的偏移量。 2. 积分更新 在ORB-SLAM3积分更新是在IMU积分类的Update函数进行的。该函数接收IMU测量值和时间戳作为输入,并更新积分状态。积分更新的过程可以分为以下几个步骤: (1)计算两个时间戳之间的时间间隔dt。 (2)根据IMU测量值计算在dt时间间隔内的旋转和平移量。具体计算方法和积分初始化过程相同。 (3)更新积分状态。 根据上述公式,可以更新积分状态,即更新四元数、速度和偏移量的值。具体更新方法如下: $q_{t+dt}=q_t\bigotimes exp((\frac{w_t+w_{t+dt}}{2}-b_w)\Delta t)$ $v_{t+dt}=v_t+\frac{q_t*a_t+g+b_a}{2}*\Delta t$ $b_a=b_a+\delta a$ $b_w=b_w+\delta w$ 其$\bigotimes$表示四元数的乘法,$a_t$为IMU测量的线加速度,$g$为重力加速度,$\delta a$和$\delta w$为加速度计和陀螺仪的噪声。 3. 积分优化 积分优化是在ORB-SLAM3的优化器进行的。该优化器使用非线性优化方法,例如Levenberg-Marquardt算法,对积分状态进行优化,以提高位姿估计的精度和鲁棒性。积分优化的目标是最小化积分状态与实际状态之间的误差。具体优化方法如下: (1)定义误差函数。 误差函数可以表示为积分状态$x_{imu}$和实际状态$x_{gt}$之间的差异。具体表示为: $e(x_{imu},x_{gt})=log(x_{gt}^{-1}x_{imu})$ 其$^{-1}$表示四元数的逆,$log$表示四元数的对数映射。 (2)构建Jacobian矩阵。 根据误差函数,可以构建Jacobian矩阵,即误差函数对积分状态的导数。具体表示为: $J=\frac{\partial e(x_{imu},x_{gt})}{\partial x_{imu}}$ (3)使用非线性优化算法进行优化。 根据Jacobian矩阵,可以使用非线性优化算法,例如Levenberg-Marquardt算法,对积分状态进行优化。优化的目标是最小化误差函数,使得积分状态更加接近实际状态。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值