1. IMU基础与坐标系
各位同学好,我是老张。做惯性导航这行有十几年了。今天咱们聊聊IMU的基础知识。说实话,这部分内容看着简单,但很多人栽跟头就栽在这里。
IMU,全称Inertial Measurement Unit。说白了就是测量物体运动状态的传感器。它内部主要装了两样东西:加速度计和陀螺仪。加速度计测加速度,陀螺仪测角速度。就这么简单。
核心要点:IMU不直接给出位置和姿态,它只给出原始测量值。位置和姿态是靠积分算出来的。
1.1 加速度计工作原理
加速度计测量的是比力,不是重力。这个概念我当年刚入行时也搞混过。比力是物体受到的惯性力与重力的合力。你想想看,静止放在桌上的加速度计,它测到的是向上的支持力,也就是1g的重力加速度。
我在项目中遇到过一件事。有个同事把加速度计竖直安装,结果输出一直是0。他以为传感器坏了。其实不是,加速度计的自由落体状态下确实输出0。因为它感受不到任何比力。
加速度计的数学模型可以写成:
a_measured = a_true + b_a + n_a
其中:
a_measured:加速度计实际输出a_true:真实比力b_a:零偏(bias)n_a:测量噪声
我的经验:加速度计的零偏是最大的敌人。我曾经在无人机项目上,就因为零偏没标定好,导致悬停时一直往一边飘。后来花了三天时间重新做六位置标定才解决。
1.2 陀螺仪工作原理
陀螺仪测量角速度。现在MEMS陀螺仪用的都是科里奥利效应。嗯,这里要注意,陀螺仪测的是相对于惯性空间的角速度,不是相对于地面的。
陀螺仪的模型和加速度计类似:
ω_measured = ω_true + b_g + n_g
参数含义:
ω_measured:陀螺仪输出ω_true:真实角速度b_g:陀螺零偏n_g:角度随机游走噪声
避坑指南:我曾经在车载导航项目上,陀螺仪的零偏温度漂移没处理好。夏天标定的参数,冬天用就完全不对了。后来我养成了习惯,每次上电都要做静态零偏估计。
1.3 常用坐标系
坐标系是IMU融合定位的基石。搞不清楚坐标系,后面所有算法都是空中楼阁。我个人习惯把坐标系分成三类:
| 坐标系 | 符号 | 说明 |
|---|---|---|
| IMU坐标系 | b系(body) | 固定在IMU本体上,x向前,y向右,z向下 |
| 导航坐标系 | n系(navigation) | 通常取东北天(ENU)或北东地(NED) |
| 地球坐标系 | e系(earth) | 地心地固系,ECEF |
你想想看,IMU装在机器人身上,它测的是b系下的数据。但我们关心的是机器人在n系下的位置。这就涉及到坐标系转换了。
重要提醒:坐标系定义一定要统一。我见过一个团队,有人用ENU,有人用NED,结果融合出来的轨迹完全反了。花了整整一周才找到问题。
1.4 欧拉角与四元数
描述姿态,常用的有两种方式:欧拉角和四元数。
欧拉角:直观,但有个致命问题——万向锁。我记得在某个飞行器项目中,俯仰角到了90度,航向角和横滚角突然就耦合了。控制逻辑直接崩了。
欧拉角的旋转顺序通常为:
- 绕z轴旋转:航向角(yaw)ψ
- 绕y轴旋转:俯仰角(pitch)θ
- 绕x轴旋转:横滚角(roll)φ
四元数:没有万向锁问题,计算效率高。但不够直观。四元数可以写成:
q = [q0, q1, q2, q3]^T
其中q0是标量部分,q1,q2,q3是矢量部分。满足归一化约束:
q0² + q1² + q2² + q3² = 1
我的建议:做滤波融合时,状态量用四元数,但调试时看欧拉角。这样既避免了万向锁,又方便直观理解。我所有的项目都是这么干的。
1.5 知识体系总览
下面这张图是我自己画的,把本章的核心逻辑串起来了。你仔细看看,理解了这个框架,后面学滤波算法会轻松很多。
这张图展示了本章的核心逻辑:IMU内部有加速度计和陀螺仪,它们分别测量比力和角速度。测量值需要转换到统一的坐标系下,最后用欧拉角或四元数来描述姿态。每一步都有坑,每一步都需要仔细处理。
最后提醒一句:坐标系转换矩阵的推导,一定要自己手推一遍。光看别人写的代码,永远学不会。我当年就是吃了这个亏,后来老老实实把方向余弦矩阵手推了三遍,才算真正理解。
好了,第一章的内容就到这里。记住,IMU基础打不牢,后面滤波算法再花哨也没用。踏踏实实把坐标系和姿态表示搞明白,后面学卡尔曼滤波、粒子滤波才会事半功倍。