VIO学习(1)——IMU-Model

写在前面

这次来总结一下IMU的一些东西,主要包含:

  • 测量模型
  • 运动模型

IMU的测量模型

通常,我们将IMU的测量模型写作如下模型(注意不是观测模型):
w m = w t + b w + n w a m = a t + b a + n a w_m = w_t+b_w+n_w \\ a_m = a_t+b_a+n_a wm=wt+bw+nwam=at+ba+na
亦即:“测量值=真值+零偏+高斯白噪声”,其中:

  1. 零偏值是我们希望实时进行估计的,会在状态变量中进行估计;
  2. 零偏值通常被建模为随机游走过程;

高斯白噪声

高斯白噪声其实是我们常见的噪声模型,一个典型的高斯白噪声满足:
E [ n ( t ) ] = 0 E [ n ( t 1 ) n ( t 2 ) ] = σ g 2 δ ( t 1 − t 2 ) \begin{array}{c}{E[n(t)]=0} \\ {E\left[n\left(t_{1}\right) n\left(t_{2}\right)\right]=\sigma_{g}^{2} \delta\left(t_{1}-t_{2}\right)}\end{array} E[n(t)]=0E[n(t1)n(t2)]=σg2δ(t1t2)
如果一个传感器的噪声仅仅包含高斯白噪声(或者白噪声)的话,那么基本上,使用平均滤波是能得到较好的有效值的,因为白噪声的期望值是0;

下一步把连续过程离散化,可以比较直观的得到: n d ( k ) = σ g d w ( k ) n_d(k) = \sigma_{gd}w(k) nd(k)=σgdw(k),其中 σ d \sigma_d σd是高斯白噪声的方差,而 w ( k ) w(k) w(k)为标准的正态分布。

值得说明的一点是: σ g d \sigma_{gd} σgd与连续空间的方差并不相同,而是等于 σ g / Δ t \sigma_g/\sqrt{\Delta t} σg/Δt ,直接去想的话,可以认为因为离散空间的积分与时间间隔相关,每次积分都要乘以 Δ t \Delta t Δt,所以最终的方差多了一个 Δ t \Delta t Δt,所以要除下来;这里还是给出数学上的推导:
n d [ k ] ≜ n ( t 0 + Δ t ) ≃ 1 Δ t ∫ t 0 t 0 + Δ t n ( τ ) d t E ( n d [ k ] 2 ) = E ( 1 Δ t 2 ∫ t 0 t 0 + Δ t ∫ t 0 t 0 + Δ t n ( τ ) n ( t ) d τ d t ) = E ( σ g 2 Δ t 2 ∫ t 0 t 0 + Δ t ∫ t 0 t 0 + Δ t δ ( t − τ ) d τ d t ) = E ( σ g 2 Δ t ) \begin{aligned} n_{d}[k] & \triangleq n\left(t_{0}+\Delta t\right) \simeq \frac{1}{\Delta t} \int_{t_{0}}^{t_{0}+\Delta t} n(\tau) d t \\ E\left(n_{d}[k]^{2}\right) &=E\left(\frac{1}{\Delta t^{2}} \int_{t_{0}}^{t_{0}+\Delta t} \int_{t_{0}}^{t_{0}+\Delta t} n(\tau) n(t) d \tau d t\right) \\ &=E\left(\frac{\sigma_{g}^{2}}{\Delta t^{2}} \int_{t_{0}}^{t_{0}+\Delta t} \int_{t_{0}}^{t_{0}+\Delta t} \delta(t-\tau) d \tau d t\right) \\ &=E\left(\frac{\sigma_{g}^{2}}{\Delta t}\right) \end{aligned} nd[k]E(nd[k]2)n(t0+Δt)Δt1t0t0+Δtn(τ)dt=E(Δt21t0t0+Δtt0t0+Δtn(τ)n(t)dτdt)=E(Δt2σg2t0t0+Δtt0t0+Δtδ(tτ)dτdt)=E(Δtσg2)
一开始我比较不理解第一行的公式,但是后来仔细想想,其实一个时刻的高斯噪声值可以看做是某个时间段内所有值的平均。需要注意的是,高斯白噪声由概率密度描述的,在Kalibr的配置文件中,需要输入加计和陀螺仪的”噪声密度“值,对应 σ g d \sigma_{gd} σgd

Bias的随机游走

随机游走过程本质上是离散的,大家可以想象一些折线图,每个拐点就是那一时刻的值;其在连续空间被建模为一个维纳过程,也就是导数为高斯白噪声的过程:
b g ˙ = n ( t ) \dot{b_g}=n(t) bg˙=n(t)
根据上面得到的高斯白噪声模型,随机游走的离散模型就比较简单了:
b g ( k + 1 ) = b g ( k ) + σ g d w ( t ) Δ t = b g ( k ) + σ g Δ t w ( t ) \begin{aligned} b_g(k+1) &=b_g(k)+\sigma_{gd}w(t)\Delta{t} \\ &=b_g(k)+\sigma_{g}\sqrt{\Delta t} w(t) \end{aligned} bg(k+1)=bg(k)+σgdw(t)Δt=bg(k)+σgΔt w(t)
在Kalibr的配置文件中,需要输入加计和陀螺仪的随机游走的方差值,也就是上面的 σ g Δ t \sigma_g\sqrt{\Delta t} σgΔt

IMU运动模型

说起运动模型,首先就要确立状态变量,IMU的状态变量比较多,为如下形式:
X = [ W P I T , W V I T , q I W T , b a T , b w T ] T X=[^WP_I^T, ^WV_I^T, {q_I^W}^T, b_a^T, b_w^T]^T X=[WPIT,WVIT,qIWT,baT,bwT]T
除了正常的位姿之外,IMU的模型中添加了速度和零偏的估计值,对应的运动模型为:
{ W p ˙ = W v W v ˙ = R I W ( I a m − b a − n a ) q ˙ I W = q I W ⊗ q ( I w m − b w − n w ) b ˙ a = n a d b ˙ w = n w d \left\{\begin{array}{l}{^W\dot{p}=^Wv} \\ {^W\dot{v}=R_{I}^{W}\left(^Ia_{m}-b_{a}-n_{a}\right)} \\ {\dot{q}_I^W=q_I^W \otimes q\left(^Iw_{m}-b_{w}-n_{w}\right)} \\ {\dot{b}_{a}=n_{ad}} \\ {\dot{b}_{w}=n_{wd}}\end{array}\right. Wp˙=WvWv˙=RIW(Iambana)q˙IW=qIWq(Iwmbwnw)b˙a=nadb˙w=nwd
注意上式的 p , v p, v p,v都在参考坐标系W下,而旋转使用四元数表示,关于四元数更多的内容,可以查看here

reference

https://fzheng.me/2016/11/20/imu_model_eq/

https://github.com/ethz-asl/kalibr/wiki/IMU-Noise-Model

### 激光雷达与视觉传感器在SLAM中的应用比较 #### 激光雷达在SLAM中的优势 激光雷达能够提供高精度的距离测量数据,这使得它非常适合用于创建精确的地图以及准确定位。由于其工作原理依赖于发射和接收反射回来的光线脉冲来计算距离,因此受光照条件影响较小,在低光环境下依然可以保持良好的性能[^1]。 #### 视觉传感器在SLAM中的特点 相比之下,视觉传感器如摄像头则依靠捕捉图像序列来进行特征提取、匹配及跟踪,从而完成姿态估计和三维重建的任务。这类方法通常成本更低廉,并能获取丰富的场景语义信息;然而,它们对于环境变化较为敏感——比如强光直射可能导致过曝而丢失细节,弱光条件下信噪比降低会影响成像质量,进而干扰后续处理过程。 #### 不同类型的SLAM算法概述 针对上述两种感知方式所设计出来的典型代表有: - **Laser SLAM**:主要采用ICP(Iterative Closest Point)迭代最近点配准等几何模型驱动的方法进行闭环检测与优化求解; - **Visual SLAM (V-SLAM)** 或者称为 Monocular/Multi-camera VIO(Vision-Inertial Odometry),则是基于图像特征点描述子(ORB, SIFT/SURF)或直接法(DVO Direct Visual Odometry),结合惯性测量单元(IMU)辅助校正累积误差漂移现象。 #### 实现方案对比分析 当考虑具体应用场景时,选择哪种技术路线取决于多个因素考量: | 特征 | 激光雷达(LiDAR)-SLAM | 视觉(Stereo/RGB-D/Camera)-SLAM | | --- | --- | --- | | 成本效益 | 较高硬件投入但维护简单可靠 | 初始购置费用较低但可能需额外软件开发支持 | | 对外界光源依赖度 | 几乎不受自然光强度波动影响 | 易受到极端照明情况制约 | | 数据密度 & 质量 | 提供稀疏却精准可靠的轮廓线结构化表达 | 可获得稠密色彩纹理映射,有助于理解复杂物体表面特性 | 综上所述,虽然两者各有千秋,但在实际部署过程中往往也会综合运用二者之长处形成互补型解决方案,即 Lidar-Vision Fusion SLAM ,以期达到更优的整体表现效果。 ```python # Python伪代码展示融合框架概念示意 class SensorFusionSLAM: def __init__(self): self.lidar_processor = LiDARProcessor() self.visual_odometer = VisualOdometry() def process(self, lidar_scan, image_frame): pose_from_lidar = self.lidar_processor.estimate_pose(lidar_scan) motion_model_update(pose_from_lidar) keyframes_and_matches = self.visual_odometer.extract_features(image_frame) optimize_trajectory(keyframes_and_matches) def main(): fusion_slam_system = SensorFusionSLAM() while True: lidar_data, camera_image = collect_sensors_input() fusion_slam_system.process(lidar_data, camera_image) if __name__ == "__main__": main() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值