IMU卡尔曼滤波方法详细介绍

一、IMU 卡尔曼滤波简介

IMU 通常包含:

  • 三轴加速度计(测量比力 f)
  • 三轴陀螺仪(测量角速度 ω)

由于传感器存在噪声和漂移,需用 卡尔曼滤波(Kalman Filter, KF) 或其扩展形式(如 EKF)对姿态、速度、位置进行融合估计。

二、状态向量定义

我们估计以下 9 维状态向量:

x = **p** ᵀ, **v** ᵀ, **a_b** ᵀ ᵀ

其中:

  • p ∈ ℝ³:位置(Position)
  • v ∈ ℝ³:速度(Velocity)
  • a_b ∈ ℝ³:加速度计零偏(Bias of accelerometer)

三、系统动态模型(状态方程)

假设采样周期为 Δt,系统动态由牛顿运动学描述:

状态转移方程:

xₖ = F · xₖ₋₁ + B · uₖ + wₖ

其中:

  • uₖ = fₖ 是加速度计测量值(比力,单位:m/s²)
  • wₖ ~ N(0, Q) 是过程噪声
  • F 是状态转移矩阵(9×9)
  • B 是控制输入矩阵(9×3)

具体矩阵形式:

F =

⎡ I₃ Δt·I₃ 0₃ ⎤

⎢ 0₃ I₃ -Δt·I₃ ⎥

⎣ 0₃ 0₃ I₃ ⎦

B =

⎡ 0.5·Δt²·I₃ ⎤

⎢ Δt·I₃ ⎥

⎣ 0₃ ⎦

其中 I₃ 是 3×3 单位阵,0₃ 是 3×3 零矩阵。

物理含义:

  • 位置更新:pₖ = pₖ₋₁ + Δt·vₖ₋₁ + 0.5·Δt²·(fₖ − a_b,ₖ₋₁)
  • 速度更新:vₖ = vₖ₋₁ + Δt·(fₖ − a_b,ₖ₋₁)
  • 偏置假设缓慢变化:a_b,ₖ ≈ a_b,ₖ₋₁

四、观测模型(量测方程)

假设我们有外部位置观测(如 GPS、视觉定位),提供位置测量:

zₖ = H · xₖ + vₖ

其中:

  • zₖ ∈ ℝ³:位置观测值(如 GPS 输出)
  • vₖ ~ N(0, R):观测噪声
  • H = I₃, 0₃, 0₃ (3×9 矩阵,只观测位置)

若无外部观测,则无法校正加速度计偏置,需引入其他约束(如静止检测、零速修正等)。

五、卡尔曼滤波算法步骤

初始化:x̂₀ , P₀

For each time step k:

  1. 预测(Predict)
    x̂ₖ⁻ = F · x̂ₖ₋₁ + B · uₖ
    Pₖ⁻ = F · Pₖ₋₁ · F ᵀ + Q
  2. 更新(Update)
    Kₖ = Pₖ⁻ · H ᵀ · ( H · Pₖ⁻ · H ᵀ + R )⁻¹
    x̂ₖ = x̂ₖ⁻ + Kₖ · ( zₖ − H · x̂ₖ⁻ )
    Pₖ = ( I − Kₖ · H ) · Pₖ⁻

六、噪声协方差矩阵设定

  • Q (过程噪声协方差):反映模型不确定性
    通常设为块对角:
    Q = diag( q_p·I₃, q_v·I₃, q_b·I₃ )
    其中 q_p、q_v、q_b 为标量噪声强度。
  • R (观测噪声协方差):由传感器精度决定
    R = r_gps·I₃(例如 r_gps = 1.0 表示 GPS 1σ 误差为 1 米)
相关推荐
记帖5 天前
STM32C5开发ISM330DHCX(6)--倾斜度检测
imu·mems·stm32cubemx2·stm32c542cct6·ism330dhcx
ergevv6 天前
如何使用 NIS 判断观测是否可靠:从卡尔曼滤波推导到机器人实践
机器人·卡尔曼滤波·nis·观测可靠性
Evand J6 天前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
记帖7 天前
STM32C5开发ISM330DHCX(9)--活动/静止检测
imu·mems·stm32cubemx2·stm32c542cct6·ism330dhcx
记帖7 天前
STM32C5开发ISM6HG256X(5)--运动唤醒检测
imu·mems·stm32cubemx2·stm32c542cct6·ism6hg256x
记帖8 天前
STM32C5开发ISM330DHCX(2)--中断获取陀螺仪数据
imu·mems·stm32cubemx2·stm32c542cct6·ism330dhcx
reikocao8 天前
IMU预积分讲人话:递推、协方差、零偏修正到底在算什么
slam·imu·预积分
记帖9 天前
STM32C5开发ISM6HG256X(8)--6D方向检测
imu·mems·stm32cubemx2·stm32c542cct6·ism6hg256x
记帖10 天前
STM32C5开发LSM6DSVE(10)--FIFO 水位中断与六轴数据读取
imu·mems·stm32cubemx2·stm32c542cct6·lsm6dsve
记帖10 天前
STM32C5开发ISM330DHCX(3)--配置单击与双击检测
imu·mems·stm32cubemx2·stm32c542cct6·ism330dhcx