[SLAM] IMU预积分推导

1. 前言

本文内容主要来自于对邱笑晨博士IMU.pdf高博对预积分讲解视频的个人理解。

2. IMU应用原理

原理:IMU可以测得载体运动过程中的加速度,在初始位姿+初始速度已知的情况下,通过积分可以得到实时速度,再积分即可得到实时位置;
需要解决的事情:该加速度是在载体坐标系下的,即由于载体在运动使得每次测量所对应的坐标系是不同的,因此需要有个换算过程将其统一到同一个坐标系下。此时就需要不断更新每次测量的载体姿态,用于将IMU测量换算到世界坐标系下;
问题
①IMU测量的加速度其实是包含了反向重力加速度的比力,可以理解为静止时IMU输出为垂直向上的重力加速度自由落体时IMU输出为0
②IMU的测量存在噪声,导致积分过程噪声不断累加;
应用:基于BA的VIO算法中,IMU预积分提供了两帧之间位姿变化的测量,该测量结果可以作为两帧之间的位姿边参与图优化中,就像是为卡尔曼滤波中增加了运动方程(个人理解);同时这种结合还带来了几个优点:
①IMU与绝对位姿解耦了,即IMU积分需要的这个位姿不再完全依赖自己提供,SLAM会维护这个位姿而它本身只需在两帧之间提供积分运算,因此优化速度得到了提高;
②重力存在使得SLAM系统中俯仰角和横滚角可观(x,z轴旋转客观,不包含y轴航向角),这让系统有了绝对姿态;
③IMU之外的传感器提供的观测使得IMU的bias可观从而被估计出来,有效地抑制了IMU的累计误差;
④IMU提供的距离信息解决了单目视觉的尺度问题;

3.IMU模型

3.1 坐标关系

在VIO系统中有3个常用坐标系:世界坐标系W,IMU坐标系B和相机坐标系C;
我们将IMU坐标系在世界坐标系下的表示定义为: T W B = ( R W B , p W ) T_{WB}=(R_{WB}, p_W) TWB=(RWB,pW),IMU系到相机系的坐标变化定义为: T B C T_{BC} TBC

3.2 测量模型

此时我们有IMU的测量模型为:
{ w ^ W B ( t ) = w W B ( t ) + b g ( t ) + η g ( t ) a ^ B ( t ) = R W B T ( a W ( t ) − g W ) + b a ( t ) + η a ( t ) \left\{ \begin{array}{lr} \hat w_{WB}(t) = w_{WB}(t)+b_{g}(t)+\eta_{g}(t) \\ \hat a_{B}(t) = R_{WB}^T(a_{W}(t)-g_{W})+b_{a}(t)+\eta_{a}(t) \end{array} \right. {w^WB(t)=wWB(t)+bg(t)+ηg(t)a^B(t)=RWBT(aW(t)gW)+ba(t)+ηa(t)上述两式分别对应陀螺仪测量模型+加速度计测量模型,即:
测量角速度/加速度 = 真实角速度/加速度 + 时变的bias + 白噪声
两个测量结果都是IMU坐标系下的表示,另外这里的两个bias其实是两个随机游走,导数具有如下形式:
b ˙ g ( t ) = η b g , b ˙ a ( t ) = η b a \dot b_{g}(t) = \eta^{bg}, \dot b_{a}(t) = \eta^{ba} b˙g(t)=ηbg,b˙a(t)=ηba知道了测量模型,我们可以得到VIO中的需要估计的状态量,与VO相比需要估计的东西多了一个三维的速度和两个三位的bias,状态量如下:
x i = [ R i , p i , v i , b g i , b a i ] x_i = [R_i, p_i, v_i, b_{g_{i}}, b_{a_{i}}] xi=[Ri,pi,vi,bgi,bai]

3.3 运动模型

运动学为微分模型
{ v ˙ W = a W p ˙ W = v W R ˙ W B = R W B ∗ ( w W B )   ˆ \left\{ \begin{array}{lr} \dot v_W = a_W \\ \dot p_W = v_W \\ \dot R_{WB} = R_{WB}*(w_{WB})\ \^{} \end{array} \right. v˙W=aWp˙W=vWR˙WB=RWB(wWB) ˆ通过积分可以得到 Δ t \Delta t Δt时间后的运动状态为,连续域下的积分形式
{ v W ( t + Δ t ) = v W ( t ) + ∫ t t + Δ t a W ( τ )   d τ p W ( t + Δ t ) = p W ( t ) + ∫ t t + Δ t v W ( τ )   d τ + ∫ ∫ t t + Δ t a W ( τ )   ( d τ ) 2 R W B ( t + Δ t ) = R W B ∗ E x p ( ∫ t t + Δ t w W B ( τ )   d τ ) \left\{ \begin{array}{lr} v_W(t+\Delta t) = v_W(t) + \int_t^{t+\Delta t}a_W(\tau)\ d\tau \\ p_W(t+\Delta t) = p_W(t) + \int_t^{t+\Delta t} v_W(\tau)\ d\tau + \int\int_t^{t+\Delta t}a_W(\tau)\ (d\tau)^2 \\ R_{WB}(t+\Delta t) = R_{WB}*Exp(\int_t^{t+\Delta t} w_{WB}(\tau)\ d\tau) \end{array} \right. vW(t+Δt)=vW(t)+tt+ΔtaW(τ) dτpW(t+Δt)=pW(t)+tt+ΔtvW(τ) dτ+tt+ΔtaW(τ) (dτ)2RWB(t+Δt)=RWBExp(tt+ΔtwWB(τ) dτ)由于IMU的观测时 Δ t \Delta t Δt时刻一次离散的形式,只能假设在这段时间内是不变的,因此将连续表示转换成离散形式
{ v W ( t + Δ t ) = v W ( t ) + a W ( t )   Δ t p W ( t + Δ t ) = p W ( t ) + v W ( t )   Δ t + 1 2 a W ( t )   ( Δ t ) 2 R W B ( t + Δ t ) = R W B ∗ E x p ( w W B ( t ) Δ t ) \left\{ \begin{array}{lr} v_W(t+\Delta t) = v_W(t) + a_W(t)\ \Delta t \\ p_W(t+\Delta t) = p_W(t) + v_W(t)\ \Delta t + \frac{1}{2}a_W(t)\ (\Delta t)^2 \\ R_{WB}(t+\Delta t) = R_{WB}*Exp(w_{WB}(t)\Delta t) \end{array} \right. vW(t+Δt)=vW(t)+aW(t) ΔtpW(t+Δt)=pW(t)+vW(t) Δt+21aW(t) (Δt)2RWB(t+Δt)=RWBExp(wWB(t)Δt)

3.4 观测+运动结合

观测方程带入运动模型即可得到IMU观测下的运动方程
{ v W ( t + Δ t ) = v W ( t ) + g W Δ t + ( a ^ B ( t ) − b a ( t ) − η a ( t ) )   Δ t p W ( t + Δ t ) = p W ( t ) + v W ( t )   Δ t + 1 2 g W Δ t + 1 2 ( a ^ B ( t ) − b a ( t ) − η a ( t ) )   ( Δ t ) 2 R W B ( t + Δ t ) = R W B ∗ E x p ( ( w ^ W B ( t ) − b g ( t ) − η g ( t ) ) Δ t ) \left\{ \begin{array}{lr} v_W(t+\Delta t) = v_W(t) + g_{W}\Delta t + (\hat a_{B}(t) -b_{a}(t)-\eta_{a}(t))\ \Delta t \\ p_W(t+\Delta t) = p_W(t) + v_W(t)\ \Delta t + \frac{1}{2}g_{W}\Delta t + \frac{1}{2}(\hat a_{B}(t) -b_{a}(t)-\eta_{a}(t))\ (\Delta t)^2 \\ R_{WB}(t+\Delta t) = R_{WB}*Exp((\hat w_{WB}(t)-b_{g}(t)-\eta_{g}(t))\Delta t) \end{array} \right. vW(t+Δt)=vW(t)+gWΔt+(a^B(t)ba(t)ηa(t)) ΔtpW(t+Δt)=pW(t)+vW(t) Δt+21gWΔt+21(a^B(t)ba(t)ηa(t)) (Δt)2RWB(t+Δt)=RWBExp((w^WB(t)bg(t)ηg(t))Δt)这个式子就是预积分的基础了,这里还存在一个问题,即IMU中的两个bias是不知道的,而预积分的处理方式就是通过两个照片帧得到的观测集合IMU的积分结果处理这个bias;

4. IMU预积分

两个关键帧i和j之间,将IMU数据积分得到两帧之间的运动关系有:
{ v j = v i + g Δ t i j + ∑ k = i j − 1 ( R k ( a ^ k − b k a − η k a ) Δ t ) p j = p i + ∑ k = i j − 1 ( v k   Δ t + 1 2 g Δ t + 1 2 R k ( a ^ k − b k a − η k a )   Δ t 2 ) R j = R i ∗ ∏ k = i j − 1 E x p ( ( w ^ k − b k g − η k g ) Δ t ) \left\{ \begin{array}{lr} v_j = v_i + g\Delta t_{ij} + \sum_{k=i}^{j-1}(R_k(\hat a_{k} -b_{ka}-\eta_{ka})\Delta t) \\ p_j = p_i + \sum_{k=i}^{j-1}(v_k\ \Delta t + \frac{1}{2}g\Delta t + \frac{1}{2}R_{k}(\hat a_k -b_{ka}-\eta_{ka})\ \Delta t^2) \\ R_j = R_i*\prod_{k=i}^{j-1} Exp((\hat w_{k}-b_{kg}-\eta_{kg})\Delta t) \end{array} \right. vj=vi+gΔtij+k=ij1(Rk(a^kbkaηka)Δt)pj=pi+k=ij1(vk Δt+21gΔt+21Rk(a^kbkaηka) Δt2)Rj=Rik=ij1Exp((w^kbkgηkg)Δt)将两帧之间的速度、位置、旋转变化量对齐到上一帧位置处,得到两帧之间的IMU观测模型
{ Δ v i j = R i T ( v j − v i − g Δ t i j ) = ∑ k = i j Δ R i k ( a ^ k − b k a − η k a ) Δ t Δ p i j = R i T ( p j − p i − v i Δ t i j − 1 2 ∑ k = i j − 1 g ( Δ t ) 2 ) = ∑ k = i j ( Δ v i k   Δ t + 1 2 Δ R i k ( a ^ k − b k a − η k a )   Δ t 2 ) Δ R i j = R i T R j = ∏ k = i j − 1 E x p ( ( w ^ k − b k g − η k g ) Δ t ) \left\{ \begin{array}{lr} \Delta v_{ij} = R_i^T(v_j - v_i - g\Delta t_{ij}) = \sum_{k=i}^{j}\Delta R_{ik}(\hat a_{k} -b_{ka}-\eta_{ka})\Delta t \\ \Delta p_{ij} = R_i^T(p_j -p_i - v_i\Delta t_{ij} - \frac{1}{2}\sum_{k=i}^{j-1}g(\Delta t)^2) = \sum_{k=i}^j(\Delta v_{ik}\ \Delta t + \frac{1}{2}\Delta R_{ik}(\hat a_k -b_{ka}-\eta_{ka})\ \Delta t^2) \\ \Delta R_{ij} = R_i^TRj = \prod_{k=i}^{j-1} Exp((\hat w_{k}-b_{kg}-\eta_{kg})\Delta t) \end{array} \right. Δvij=RiT(vjvigΔtij)=k=ijΔRik(a^kbkaηka)ΔtΔpij=RiT(pjpiviΔtij21k=ij1g(Δt)2)=k=ij(Δvik Δt+21ΔRik(a^kbkaηka) Δt2)ΔRij=RiTRj=k=ij1Exp((w^kbkgηkg)Δt)注意注意注意,这里是将IMU的bias部分对齐到了上一帧i表示的坐标系,因此等号右边都是 Δ ∗ i k \Delta *_{ik} Δik的形式,至此IMU预积分的残差公式就推导完毕了,后续还涉及bias和噪声的处理以及一些细微的推导等以后有功夫再写吧;

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值