1. 导航技术概述:从古代导航到现代组合导航,为什么需要IMU+GPS融合?

大家好,我是你们这门课的主讲人。

做组合导航这行十几年了,每次带新人,我第一节课都会先聊一个话题:我们到底为什么要费这么大劲,把IMU和GPS凑到一起?

别急着翻书。我们先从根上捋一捋。

1.1 导航的“老祖宗”:从看星星到看陀螺

导航这事儿,说白了就是回答三个问题:我在哪?我要去哪?怎么去?

古人没卫星,怎么办?看天。

  • 天文导航: 靠太阳、星星定位。晚上看北极星,白天看日晷。精度嘛,能到几十公里就不错了。我早年去海上做实验,还见过老船长用六分仪,那手艺真是绝活。
  • 地文导航: 看地标。沿着海岸线走,看见灯塔拐弯。这方法简单,但一出海就抓瞎。
  • 惯性导航的雏形: 陀螺仪。最早的陀螺仪就是个旋转的轮子,利用定轴性指北。但那时候的陀螺,漂移得厉害,转个把小时就不知道北在哪了。

你想想看,这些方法都有个共同问题:依赖外部信息。没星星、没地标,你就成了睁眼瞎。

核心痛点: 单一传感器,总有“掉链子”的时候。

1.2 现代导航的两大“台柱子”:GPS和IMU

到了现代,我们有了两个神器:GPS和IMU。

1.2.1 GPS:天上的“时钟”

GPS的原理,其实不复杂。就是卫星告诉你:“我在这个位置,信号发出时间是T0。”你收到信号的时间是T1,光速一乘,距离就出来了。三颗卫星就能定个二维点,四颗就能定三维。

优点很明显:

  • 误差不随时间积累。你跑一天,它还是那个精度(米级)。
  • 全球覆盖,白天黑夜都能用。

但缺点也致命:

  • 更新率低: 一般就10Hz。你想想,车跑高速,100ms才更新一次位置,中间那段轨迹全靠猜。
  • 信号易遮挡: 进隧道、过立交桥、在高楼峡谷里,信号直接丢。我在北京五环做过测试,进个桥洞,GPS直接“飘”到对面车道去了。
  • 易受干扰: 多径效应、电离层延迟,甚至有人拿个干扰器,你就没信号了。

1.2.2 IMU:身体的“感觉”

IMU(惯性测量单元)就不一样了。它不依赖外界,自己闷头算。

  • 加速度计: 测你走了多快,方向如何。
  • 陀螺仪: 测你转了多少角度。

IMU的更新率很高,通常100Hz到1000Hz。你动一下,它立刻知道。

但它的毛病更让人头疼:

  • 误差随时间疯狂积累: 这就是所谓的“积分漂移”。你静止不动,它可能以为你在匀速运动。我见过一个低成本的MEMS IMU,开机10分钟,位置能漂出去几百米。
  • 没有绝对参考: 它只能告诉你“相对之前的位置”,但不知道“绝对位置”。

我的经验: 单独用IMU做导航,就像闭着眼睛走路。你感觉自己在走直线,其实早偏到沟里去了。

1.3 为什么非要“融合”?—— 取长补短的艺术

好了,现在你看到了。GPS和IMU,就像一对欢喜冤家。

  • GPS:长期准,短期飘(更新慢,易丢信号)。
  • IMU:短期稳,长期飘(更新快,但会漂移)。

那把它们俩放一起呢?

这就是组合导航的核心思想: 用IMU的高频数据填补GPS的更新间隙,用GPS的绝对位置修正IMU的累积漂移。

我举个例子你就明白了:

你开车进隧道。GPS信号瞬间丢失。这时候,IMU开始“单干”。它根据进隧道前的速度和姿态,推算你接下来几秒的位置。虽然会漂,但几秒内精度还行。等你出隧道,GPS信号恢复,立刻把IMU的漂移“拉”回来,重新校准。

一句话总结: GPS给IMU“擦屁股”,IMU给GPS“填坑”。

1.4 融合带来的“化学反应”

除了简单的互补,融合还能带来一些意想不到的好处:

  1. 提高可靠性: 一个坏了,另一个还能顶一阵。我在做无人机项目时,有一次GPS天线被树枝挂掉了,全靠IMU撑着飞回来。
  2. 提高输出频率: 你最终得到的位置数据,可以做到100Hz甚至更高,而不是GPS的10Hz。
  3. 估计更多状态: 比如姿态(横滚、俯仰、航向)、速度、甚至陀螺的零偏。这些信息,单独靠GPS是拿不到的。
  4. 抗干扰能力: 在复杂环境下,融合算法可以智能地降低GPS的权重,更多依赖IMU,避免位置跳变。

避坑指南: 我曾经犯过一个错。在融合时,直接把GPS的位置和IMU的位置做平均。结果GPS一丢,位置直接跳变。后来才明白,融合不是简单的“平均”,而是要用卡尔曼滤波这类最优估计方法,动态调整权重。

1.5 一个简单的融合逻辑(伪代码)

为了让你有个直观感受,我写个最简单的融合逻辑。别纠结细节,先看思路。

// 伪代码:IMU + GPS 融合(简化版)
while (true) {
    // 1. 读取IMU数据(高频,比如100Hz)
    imu_data = readIMU();
    // 2. 用IMU数据预测位置和姿态(状态预测)
    predict_state(imu_data);
    
    // 3. 如果有新的GPS数据(低频,比如10Hz)
    if (new_gps_data_available()) {
        gps_data = readGPS();
        // 4. 用GPS数据修正预测的误差(观测更新)
        correct_state_with_gps(gps_data);
    }
    
    // 5. 输出融合后的位置
    output_fused_position();
}

你看,逻辑就这么简单。但实际工程里,难点全在“predict_state”和“correct_state”这两个函数里。它们背后,就是大名鼎鼎的卡尔曼滤波。这也是我们这门课后面要花大量篇幅讲的内容。

1.6 本章小结

嗯,聊了这么多,其实就是想告诉你:

  • 单一传感器都有短板。 GPS怕遮挡,IMU怕漂移。
  • 融合不是锦上添花,而是雪中送炭。 没有融合,很多场景下导航根本没法用。
  • 组合导航的核心是“估计”而非“测量”。 我们不是直接测出位置,而是通过算法,把两个不完美的信息,估计出一个更完美的结果。

下一章,我们会正式进入核心算法——卡尔曼滤波。我会从最直观的角度,带你理解这个“神奇”的滤波器到底在干什么。

准备好了吗?我们第二章见。


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