1. 漂移的本质
做定位的人,最怕听到两个字——「漂移」。
我记得刚入行那会儿,在园区里测试一个组合导航系统。明明车子停在原地,地图上的小蓝点却像喝醉了酒一样,慢慢滑到了隔壁楼里。当时我盯着屏幕看了半天,心想:这玩意儿到底是怎么飘起来的?
后来踩的坑多了,才慢慢明白——漂移不是bug,是物理规律。说白了,你用的传感器本身就不完美。
1.1 误差从哪来?先看GPS
GPS的定位原理,说白了就是三边测量。卫星告诉你「我在这儿」,你根据信号飞了多久算出距离。但问题是——信号在路上会「变形」。
多路径效应
信号从卫星发出来,本来走直线。但城市里高楼多,信号撞到玻璃幕墙反弹一下,再绕到你接收机上。你算出来的距离就变长了。
我在上海陆家嘴做过一次测试,同一颗卫星的信号,直射路径和反射路径差了将近15米。你想想看,定位能准吗?
钟差
卫星上的原子钟很准,但也不是绝对准。地面接收机的石英钟就更别提了,一天能漂几微秒。光速是3×10⁸ m/s,1微秒的钟差就是300米。
嗯,这里要注意:GPS系统会用差分技术去修正钟差,但残差依然存在。尤其是单点定位的时候,钟差是最大的误差源之一。
电离层与对流层延迟
信号穿过大气层,速度会变慢。电离层里的自由电子会「拖住」信号,对流层的水汽也会折射。这些延迟随天气、时间、纬度变化,很难精确建模。
| 误差源 | 典型量级 |
|---|---|
| 多路径 | 1-15米 |
| 钟差 | 1-5米(经修正后) |
| 电离层延迟 | 2-10米 |
| 对流层延迟 | 0.5-2米 |
| 轨道误差 | 0.5-2米 |
1.2 再看IMU:惯性导航的「慢性毒药」
IMU不依赖外部信号,它自己测加速度和角速度。听起来很独立,对吧?但它的误差是「累积」的。
零偏(Bias)
IMU静止时,理论上输出应该是0。但实际不是。陀螺仪会有微小的角速度输出,加速度计也会有微小的加速度输出。这个偏移量就是零偏。
我做过一个实验:把IMU放在桌上不动,积分10分钟后,位置漂了200多米。为什么?因为零偏被积分了一次变成速度误差,再积分一次变成位置误差——二次积分,误差爆炸。
随机游走(Random Walk)
零偏不是固定的。它会随着温度、时间慢慢变化。这种变化是随机的,建模成「随机游走」过程。你没法完全补偿它,只能靠滤波去估计。
刻度因子与交轴耦合
IMU输出的数值和真实物理量之间,不是完美的线性关系。刻度因子误差会让你的加速度读数偏大或偏小。交轴耦合更隐蔽——X轴的加速度会串到Y轴的输出里。
我曾经在一个项目里,IMU的刻度因子误差标定差了0.1%,结果积分10分钟后位置误差超过了50米。嗯,从那以后我再也不敢跳过标定了。
1.3 漂移的数学模型
理解了误差源,我们来看漂移到底怎么「算」出来的。
IMU的测量模型可以写成:
ω_m = ω_true + b_g + n_g
a_m = a_true + b_a + n_a + g
其中:
- ω_m, a_m 是测量值
- ω_true, a_true 是真实值
- b_g, b_a 是零偏
- n_g, n_a 是白噪声
- g 是重力加速度(需要扣除)
位置和姿态的更新方程:
p_k+1 = p_k + v_k * Δt + 0.5 * a_k * Δt²
v_k+1 = v_k + a_k * Δt
q_k+1 = q_k ⊗ exp(0.5 * ω_k * Δt)
你看,位置误差是加速度误差的二次积分。零偏b_a哪怕只有0.01 m/s²,积分10秒后位置误差就是0.5米。积分100秒呢?50米。
1.4 核心逻辑:为什么GPS+IMU能互补?
现在你该明白了:
- GPS误差是「有界」的——不会越飘越远,但容易受环境干扰
- IMU误差是「无界」的——短期准,长期飘
一个没有长期漂移,一个没有短期噪声。说白了,这就是组合导航的底层逻辑——用GPS的长期稳定性去约束IMU的累积误差,用IMU的高频输出去填补GPS的更新间隙。
这张图把本章的核心逻辑串起来了。左边是GPS的误差源,右边是IMU的误差源。它们各自有各自的「死穴」,但恰好互补。卡尔曼滤波就是那个「和事佬」——用GPS的长期稳定性去拉回IMU的漂移,用IMU的高频更新去填补GPS的空白。
说白了,组合导航不是让传感器变完美,而是让它们互相兜底。