1、惯性导航概述:什么是惯性导航、加速度计与陀螺仪的区别、IMU的基本概念、姿态的数学表示(欧拉角、旋转矩阵、四元数)
各位同学好,我是你们这期课程的讲师。在嵌入式惯性导航这个领域摸爬滚打了十几年,踩过不少坑,也积累了一些心得。今天咱们开始第一讲,先把地基打牢。
说实话,很多人一上来就盯着卡尔曼滤波、组合导航这些高大上的东西,结果连最基本的加速度计怎么提取重力矢量都没搞明白。嗯,这不行。咱们得从根上捋一遍。
什么是惯性导航?
惯性导航,说白了就是「闭着眼睛走路」。你不需要看路标,不需要问GPS,只需要知道自己从哪出发,然后靠身体里的传感器感知自己走了几步、拐了几个弯,就能推算出自己现在在哪。
在工程上,这个「身体里的传感器」就是加速度计和陀螺仪。加速度计告诉你「我往哪个方向加速了」,陀螺仪告诉你「我转了多少角度」。然后通过积分运算,就能得到速度和位置。
我在做无人机飞控的时候,遇到过GPS信号被遮挡的情况。这时候全靠惯性导航撑着,虽然误差会随时间累积,但短时间内的定位精度还是能接受的。这就是惯导的核心价值——不依赖外部信号,完全自主。
加速度计与陀螺仪的区别
这两个传感器经常被放在一起说,但它们的物理本质完全不同。我刚开始学的时候也混淆过,后来做项目才真正理解。
| 对比项 | 加速度计 | 陀螺仪 |
|---|---|---|
| 测量物理量 | 比力(加速度 + 重力) | 角速度(旋转速率) |
| 静态特性 | 能测重力方向(倾角) | 静止时输出为零 |
| 动态特性 | 受运动加速度干扰大 | 有零偏漂移,积分后误差累积 |
| 典型应用 | 姿态初始对准、步数检测 | 姿态跟踪、旋转检测 |
你想想看,加速度计在静止时能告诉你「哪边是下」,因为它能感受到重力。但一旦你开始运动,它测到的就是重力加上运动加速度的混合信号。这时候想单独提取重力矢量,就得动点脑筋了。
陀螺仪呢?它测的是转动的快慢。但有个麻烦——它会有零偏,也就是静止时输出不为零。我曾经在一个项目中,陀螺仪的零偏导致积分10分钟后姿态漂移了30度。嗯,这就是为什么我们需要用加速度计来修正陀螺仪的漂移。
IMU的基本概念
IMU,全称Inertial Measurement Unit,惯性测量单元。它就是把加速度计和陀螺仪封装在一起,有时候还会加上磁力计。
市面上常见的IMU模块,比如MPU6050、ICM-20948,里面都集成了三轴加速度计和三轴陀螺仪。三轴的意思就是能测量X、Y、Z三个方向的数据。
我习惯把IMU比作「人体的前庭系统」。你闭上眼睛,身体倾斜了,前庭系统会告诉你「歪了」。IMU也是一样,它时刻感知着载体的运动状态。
但要注意,IMU输出的原始数据是不能直接用的。为什么?因为里面有噪声、有零偏、有尺度误差。你需要做校准。我曾经花了两周时间写了一个六面校准程序,就为了把加速度计的零偏误差从0.1g降到0.01g。这0.09g的差距,在姿态解算中可能就是好几度的误差。
姿态的数学表示
姿态,说白了就是「物体朝哪个方向」。在三维空间中,描述姿态有三种主流方法:欧拉角、旋转矩阵、四元数。每种方法都有它的脾气。
欧拉角
欧拉角用三个角度来描述姿态:横滚角(Roll)、俯仰角(Pitch)、偏航角(Yaw)。直观,好理解。你一说「飞机抬头30度」,大家都能想象出来。
但欧拉角有个致命问题——万向锁。当俯仰角接近±90度时,横滚和偏航会耦合在一起,丢失一个自由度。我在做云台控制时就遇到过这个问题,云台转到正上方时突然乱转,就是因为万向锁。
所以,欧拉角只适合用在姿态变化不大的场景,比如地面车辆、手机横竖屏切换。
旋转矩阵
旋转矩阵是一个3x3的矩阵,能把一个向量从一个坐标系旋转到另一个坐标系。它没有万向锁问题,而且计算方便。
但缺点也很明显——9个参数,冗余。而且每次更新后必须重新正交化,否则矩阵会慢慢变形。我记得第一次写旋转矩阵更新代码时,忘了做正交化,结果姿态越算越歪。
// 旋转矩阵正交化示例(Gram-Schmidt)
void orthonormalize(float R[3][3]) {
// 对X轴归一化
float norm_x = sqrt(R[0][0]*R[0][0] + R[1][0]*R[1][0] + R[2][0]*R[2][0]);
for (int i = 0; i < 3; i++) R[i][0] /= norm_x;
// 用X轴和Z轴叉积得到Y轴
// 用X轴和Y轴叉积得到Z轴
// ... 具体实现略
}
四元数
四元数是我个人最喜欢用的姿态表示方法。它用四个参数(一个实部+三个虚部)来描述旋转,没有万向锁,计算效率高,而且容易做插值。
你想想看,四元数本质上是一个单位超复数,它把三维旋转映射到了四维空间。虽然概念上有点抽象,但用起来真的很顺手。
在嵌入式系统中,四元数更新只需要几个乘法和加法,比旋转矩阵的9个参数更新快得多。而且它天然是单位化的,不会像旋转矩阵那样需要频繁正交化。
知识体系总览
下面这张图是我画的本章知识结构,帮你理清思路:
这张图把本章的核心内容串起来了。左边是传感器层,中间是核心概念,右边是数学工具。后面的课程,我们会围绕这张图逐步展开。
好了,第一讲就到这里。记住,惯性导航的核心就是「用传感器感知运动,用数学描述姿态」。后面的章节,我们会深入加速度计的重力矢量提取,那才是真正考验算法功底的地方。
公众号:蓝海资料掘金营,微信deep3321