第2章 惯性导航基础:惯性导航原理、捷联惯导系统与误差分析

2.1 惯性导航的核心原理

惯性导航,说白了就是靠物体本身的惯性来定位。你想想看,一个物体在空间里运动,只要知道它每时每刻的加速度和角速度,就能推算出它的位置和姿态。这跟闭着眼睛走路有点像——你迈出一步,知道步长和方向,就能大概知道自己在哪。

我刚开始接触惯导时,总觉得这玩意儿很玄乎。后来拆开一个IMU(惯性测量单元)模块,发现里面就两个核心器件:加速度计和陀螺仪。嗯,就这么简单。

加速度计:测量线运动

加速度计测量的是物体在三个轴上的比力(specific force)。注意,它测的不是纯粹的重力加速度,而是物体受到的合外力加速度减去重力加速度。这个区别很重要,我在项目里吃过亏。

核心公式:

a_measured = a_true - g

其中 a_measured 是加速度计输出,a_true 是物体真实加速度,g 是重力加速度矢量。

举个例子:静止放在桌面上的加速度计,输出不是0,而是1g(约9.8 m/s²)向上。为什么?因为它感受到的是桌面对它的支持力,抵消了重力。

陀螺仪:测量角运动

陀螺仪测量的是物体绕三个轴的角速度。现在MEMS陀螺仪已经很普及了,手机里就有。但早期惯导系统用的都是激光陀螺或光纤陀螺,精度高一个数量级。

我记得有一次调试一个无人机飞控,陀螺仪数据总是飘。查了半天,发现是电源纹波太大,把角速度信号淹没了。从那以后,我设计电路时都会在IMU供电线上加一级LC滤波。

2.2 捷联惯导系统

捷联惯导(Strapdown INS)跟平台式惯导最大的区别就是:没有物理平台。传感器直接固定在载体上,姿态全靠计算机算出来。

你想想看,这其实是个巨大的挑战。因为载体在动,传感器也跟着动,你得把测量值从载体坐标系转换到导航坐标系。这个转换过程,就是捷联惯导的核心。

姿态更新算法

姿态更新常用的方法是四元数法。为什么用四元数?因为欧拉角有万向锁问题,方向余弦矩阵计算量太大。四元数刚好在两者之间取得平衡。

我个人习惯:用四元数做姿态解算时,一定要做归一化。每更新一次,就把四元数的模归一化到1。否则误差会累积,姿态越算越歪。

姿态更新的基本流程:

  1. 读取陀螺仪角速度(ω_x, ω_y, ω_z)
  2. 构造四元数微分方程
  3. 用龙格-库塔法或毕卡法求解
  4. 归一化四元数
  5. 从四元数提取欧拉角(如果需要)
// 四元数更新示例(简化版)
void quaternion_update(float q[4], float wx, float wy, float wz, float dt) {
    float q0 = q[0], q1 = q[1], q2 = q[2], q3 = q[3];
    float dq0 = 0.5f * (-q1*wx - q2*wy - q3*wz);
    float dq1 = 0.5f * ( q0*wx + q2*wz - q3*wy);
    float dq2 = 0.5f * ( q0*wy - q1*wz + q3*wx);
    float dq3 = 0.5f * ( q0*wz + q1*wy - q2*wx);
    
    q[0] += dq0 * dt;
    q[1] += dq1 * dt;
    q[2] += dq2 * dt;
    q[3] += dq3 * dt;
    
    // 归一化
    float norm = sqrt(q[0]*q[0] + q[1]*q[1] + q[2]*q[2] + q[3]*q[3]);
    q[0] /= norm; q[1] /= norm; q[2] /= norm; q[3] /= norm;
}

速度与位置更新

速度更新需要把加速度计的输出从载体坐标系转换到导航坐标系,然后减去重力,再积分。位置更新就更直接了,对速度积分就行。

我曾经踩过的坑:加速度计数据直接积分会漂移得很快。因为加速度计有零偏,积分一次变成速度斜坡,再积分一次变成位置抛物线。所以纯惯导系统几分钟就会偏出几公里。必须用其他传感器(比如GPS)来修正。

2.3 惯性导航误差分析

惯导系统的误差来源很多,我把它归纳为三类:器件误差、初始对准误差、算法误差。

器件误差

误差类型 来源 典型值(MEMS) 影响
零偏 制造工艺、温度 10~100 mg 速度漂移
比例因子误差 标定不准确 0.1%~1% 缩放失真
交叉轴耦合 安装误差 0.1°~1° 轴间串扰
随机游走 噪声 0.01~0.1 °/√hr 角度随机漂移

你想想看,一个零偏为10 mg的加速度计,积分10秒后速度误差就是0.98 m/s,再积分10秒位置误差就接近10米了。所以高精度惯导系统必须用零偏稳定性在0.1 mg以下的传感器。

初始对准误差

惯导系统启动时需要知道初始位置和初始姿态。位置可以从GPS获取,但姿态需要对准。静态对准通常利用加速度计测量重力方向、磁力计测量地磁场方向来确定初始姿态。

我建议:如果条件允许,做动基座对准。让载体做几个特定机动,利用卡尔曼滤波快速收敛姿态。这比静态对准快得多,精度也更高。

算法误差

算法误差包括离散化误差、量化误差、截断误差等。这些误差在高动态环境下会放大。

一个小技巧:采样率越高,算法误差越小。但采样率太高会增加计算负担。我个人习惯是:对于MEMS惯导,采样率设在100~200 Hz就够了。再高意义不大,因为传感器噪声已经占主导了。

2.4 知识体系总览

下面这张图概括了本章的核心内容。我画的是惯导系统的数据流和误差传递路径,你看一眼就能明白整体逻辑。

惯性导航系统知识体系 传感器层 加速度计(比力) 陀螺仪(角速度) 算法层 姿态更新(四元数) 速度更新 位置更新 坐标系转换 输出层 位置 速度 姿态 误差分析 器件误差 初始对准误差 算法误差 零偏·比例因子·随机游走 静态对准·动基座对准 离散化·量化·截断 数据流方向(实线) | 误差影响方向(虚线) 捷联惯导:传感器直接固联在载体上,无物理平台

从这张图你能看到,惯导系统的核心就是传感器→算法→输出这条链。而误差分析贯穿始终,每个环节都会引入误差。搞懂这些,你就能理解为什么纯惯导系统需要其他传感器辅助了。

本章要点总结:

  • 加速度计测比力,陀螺仪测角速度,两者互补构成IMU
  • 捷联惯导用四元数做姿态更新,计算效率高且无万向锁
  • 误差主要来自器件、对准和算法,其中器件零偏是最大头
  • 纯惯导会随时间漂移,必须融合其他传感器

公众号:蓝海资料掘金营,微信deep3321