使用三轴加速度计和三轴陀螺仪进行惯性测量与位姿推算
惯性测量单元(IMU)由三轴加速度计和三轴陀螺仪组成,是现代导航系统的核心传感器。本指南系统讲解IMU位姿推算的原理、公式与实现方法。
| 传感器 | 测量量 | 推算目标 |
|---|---|---|
| 三轴陀螺仪 | 角速度 |
姿态(方位) |
| 三轴加速度计 | 线加速度 |
位置(位移) |
| 坐标系 | 符号 | 说明 |
|---|---|---|
| 载体坐标系 | 固连于IMU,随载体运动 | |
| 导航坐标系 | 当地水平坐标系(北-东-地) | |
| 惯性坐标系 | 不旋转的参考坐标系 | |
| 地球坐标系 | 固连于地球 |
| 表示方法 | 参数数量 | 优点 | 缺点 |
|---|---|---|---|
| 欧拉角 | 3 | 直观易懂 | 万向节死锁 |
| 方向余弦矩阵(DCM) | 9 | 无奇异性 | 冗余、需正交化 |
| 四元数 | 4 | 无奇异性、计算高效 | 不直观 |
推荐:实际工程中普遍采用四元数进行姿态更新。
┌─────────────────────────────────────────────────────────────┐
│ 姿态推算流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 陀螺仪输出 ──→ 误差补偿 ──→ 姿态更新 ──→ 姿态矩阵/四元数 │
│ (ω_x,ω_y,ω_z) │ │ │ │
│ ↓ ↓ ↓ │
│ 零偏/标定 四元数微分方程 欧拉角/DCM │
│ │ │ │ │
│ └────────────┴────────────┘ │
│ │ │
│ ↓ │
│ 加速度计辅助修正(可选) │
│ (互补滤波/卡尔曼滤波) │
│ │
└─────────────────────────────────────────────────────────────┘
展开形式:
| 符号 | 含义 |
|---|---|
| 单位四元数,$q_0$为标量部分 | |
| 角速度四元数形式 | |
| 四元数乘法运算 | |
| 采样周期 |
为什么需要归一化? 数值积分会破坏单位四元数约束
$|q|=1$ ,需周期性归一化以保持姿态表示的有效性。
┌─────────────────────────────────────────────────────────────────┐
│ 位置推算流程 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 加速度计输出 ──→ 去除重力 ──→ 坐标转换 ──→ 二次积分 ──→ 位置 │
│ (a_x,a_y,a_z) │ │ │ │ │
│ ↓ ↓ ↓ ↓ │
│ a_measured C_n^b · a_b 速度更新 位置 │
│ - g (导航系) 位置更新 输出 │
│ │
│ │ ↑ │
│ └────────────┴── 需要姿态矩阵 │
│ │
└─────────────────────────────────────────────────────────────────┘
其中
方向余弦矩阵由四元数计算:
| 步骤 | 说明 |
|---|---|
| 重力补偿 | 加速度计测量值包含重力分量,必须去除 |
| 坐标转换 | 加速度计测量的是载体坐标系下的值,需转换到导航坐标系 |
| 二次积分 | 加速度→速度→位置,需要两次积分 |
| 误差累积 | 位置推算误差随时间平方增长,这是IMU航位推算的根本缺陷 |
┌───────────────────────────────────────────────────────────────────────┐
│ IMU位姿推算完整流程 │
├───────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 陀螺仪 │──ω─────→│ 姿态推算 │───→ q, C_b^n │
│ └─────────────┘ └─────────────┘ │ │
│ │ │
│ ↓ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 加速度计 │──a─────→│ 重力补偿 │──→│ 坐标转换 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │
│ ↓ │
│ ┌─────────────┐ │
│ │ 位置推算 │──→ p, v │
│ └─────────────┘ │
│ │
│ 输出: 姿态(四元数q/欧拉角) + 位置p + 速度v │
│ │
└───────────────────────────────────────────────────────────────────────┘
| 误差类型 | 产生原因 | 影响 |
|---|---|---|
| 陀螺零偏 | 传感器固有偏差 | 姿态线性漂移 |
| 加速度零偏 | 传感器固有偏差 | 速度线性漂移、位置二次漂移 |
| 随机游走 | 传感器噪声 | 误差随时间累积 |
| 标定误差 | 安装偏差、比例因子误差 | 系统性偏差 |
| 方法 | 原理 | 适用场景 |
|---|---|---|
| 零偏估计与补偿 | 静态时估计零偏 | 所有应用 |
| 零速修正(ZUPT) | 静止时速度归零 | 行人导航 |
| 互补滤波 | 融合加速度计姿态修正 | 短时导航 |
| 卡尔曼滤波 | 最优估计传感器误差 | 高精度应用 |
| 多传感器融合 | 融合GPS/视觉/磁力计 | 长时导航 |
import numpy as np
def quaternion_update(q, omega, dt):
"""
四元数姿态更新
参数:
q: 当前四元数 [q0, q1, q2, q3]
omega: 角速度 [wx, wy, wz] (rad/s)
dt: 采样周期 (s)
返回:
更新后的四元数
"""
wx, wy, wz = omega
# 四元数微分方程的系数矩阵
Omega = np.array([
[0, -wx, -wy, -wz],
[wx, 0, wz, -wy],
[wy, -wz, 0, wx],
[wz, wy, -wx, 0]
])
# 四元数导数
q_dot = 0.5 * Omega @ q
# 一阶龙格库塔更新
q_new = q + q_dot * dt
# 归一化
q_new = q_new / np.linalg.norm(q_new)
return q_newdef quaternion_to_dcm(q):
"""
四元数转方向余弦矩阵
参数:
q: 四元数 [q0, q1, q2, q3]
返回:
3x3方向余弦矩阵 C_b^n
"""
q0, q1, q2, q3 = q
C = np.array([
[q0**2 + q1**2 - q2**2 - q3**2, 2*(q1*q2 - q0*q3), 2*(q1*q3 + q0*q2)],
[2*(q1*q2 + q0*q3), q0**2 - q1**2 + q2**2 - q3**2, 2*(q2*q3 - q0*q1)],
[2*(q1*q3 - q0*q2), 2*(q2*q3 + q0*q1), q0**2 - q1**2 - q2**2 + q3**2]
])
return Cdef position_update(p, v, a_nav, dt):
"""
位置和速度更新
参数:
p: 当前位置 [x, y, z]
v: 当前速度 [vx, vy, vz]
a_nav: 导航系加速度 [ax, ay, az]
dt: 采样周期
返回:
新位置, 新速度
"""
# 速度更新
v_new = v + a_nav * dt
# 位置更新
p_new = p + v * dt + 0.5 * a_nav * dt**2
return p_new, v_new- Titterton D, Weston J. Strapdown Inertial Navigation Technology. AIAA, 2004.
- Savage P G. Strapdown Analytics. Strapdown Associates, 2007.
- 秦永元. 惯性导航. 科学出版社, 2014.
- Groves P D. Principles of GNSS, Inertial, and Multisensor Integrated Navigation Systems. Artech House, 2013.
其中
本指南基于经典惯性导航理论整理,适用于机器人、无人机、自动驾驶等领域的IMU应用开发。