4、组合导航基础:松耦合与紧耦合架构、卡尔曼滤波入门、传感器融合策略
各位同学,咱们今天聊点硬核的——组合导航。说实话,我入行头三年,一直觉得单靠GPS就能搞定一切。直到有一次在隧道群做路测,定位直接漂到隔壁省去了……嗯,从那以后,我再也不敢小瞧组合导航了。
组合导航的核心思想很简单:用多个传感器的长处,补彼此的短处。GPS有长时稳定性但短时容易丢,惯导(IMU)短时精度高但长时漂移严重。把它们捏在一起,就是1+1>2的效果。
4.1 松耦合 vs 紧耦合:两种“捏合”方式
这两种架构,说白了就是“怎么把GPS和IMU的数据凑到一块”。我刚开始做的时候也傻傻分不清,后来被老工程师一句话点醒:松耦合是“先各自算,再融合”;紧耦合是“先融合,再一起算”。
松耦合(Loosely Coupled)
这是最常用的入门方案。GPS先自己解算出位置和速度,IMU也自己算出姿态和位置,然后卡尔曼滤波器把这两套结果“平均”一下。
缺点:如果GPS信号差(比如城市峡谷),它输出的位置本身就带误差,融合后效果大打折扣。
我在做车载导航项目时,一开始就用的松耦合。调试起来确实快,但一到高架桥下面,定位就开始“抖”。后来我意识到:松耦合把GPS当成了“黑盒子”,它不知道GPS内部有多挣扎。
紧耦合(Tightly Coupled)
紧耦合就不一样了。它直接拿GPS的原始观测值——伪距、载波相位——和IMU的数据一起塞进滤波器。IMU帮GPS估计信号延迟,GPS帮IMU修正漂移。
缺点:算法复杂,计算量大,调试起来让人头秃。
我曾经在无人机项目里试过紧耦合。第一次跑通的时候,看着那根定位轨迹线,简直像艺术品——平滑、稳定,哪怕在树荫下飞都没跳变。但代价是,光调滤波器参数就花了两周。
| 对比项 | 松耦合 | 紧耦合 |
|---|---|---|
| 输入数据 | GPS位置/速度 | GPS原始观测值 |
| 计算复杂度 | 低 | 高 |
| 抗干扰能力 | 一般 | 强 |
| 适用场景 | 开阔环境 | 城市峡谷、弱信号 |
4.2 卡尔曼滤波入门:别怕,它就是个“加权平均器”
很多新手一听“卡尔曼滤波”就头大。我当年也是,看着那五个公式,感觉像天书。后来我师父说:你把它想象成一个会自我修正的“加权平均器”就行了。
卡尔曼滤波干的事很简单:
1. 根据上一时刻的状态,猜一下当前状态(预测)。
2. 拿到传感器的新数据,看看猜得准不准(更新)。
3. 如果猜得准,就多信预测;如果猜不准,就多信传感器。
这个“信多少”的权重,就是卡尔曼增益K。K越大,越相信传感器;K越小,越相信模型预测。
// 一个简化的卡尔曼滤波伪代码
// 预测步骤
x_pred = A * x_prev + B * u; // 状态预测
P_pred = A * P_prev * A' + Q; // 协方差预测
// 更新步骤
K = P_pred * H' * inv(H * P_pred * H' + R); // 卡尔曼增益
x_est = x_pred + K * (z - H * x_pred); // 状态更新
P_est = (I - K * H) * P_pred; // 协方差更新
你想想看,卡尔曼滤波最妙的地方在哪?它不需要存储所有历史数据,只靠上一时刻的状态和当前观测,就能递归地给出最优估计。这就是它能在嵌入式系统上跑的原因。
4.3 传感器融合策略:不是所有数据都值得信
传感器融合,说白了就是“听谁的”。我见过不少新手,拿到IMU和GPS数据就直接往滤波器里塞,结果定位比单GPS还差。为什么?因为没有做数据质量评估。
我个人习惯的融合策略分三步:
- 数据预处理——剔除明显异常值。比如GPS速度突然跳到1000km/h,那肯定是多路径效应,直接扔掉。
- 时间对齐——GPS输出频率一般是10Hz,IMU是100Hz甚至更高。必须用插值或外推把时间戳对齐,否则融合出来的结果会“串位”。
- 自适应权重——根据当前信号质量动态调整各传感器的权重。比如GPS信号弱时,自动降低它的权重,多信IMU。
还有一个容易被忽略的点:传感器失效检测。我建议在融合算法里加一个“健康度”指标。比如连续5个GPS观测值都超出3倍标准差,就判定GPS失效,切换到纯惯导模式。等GPS恢复后,再慢慢把权重加回来。
嗯,这里要注意:切换过程一定要平滑,不能突变。否则定位轨迹会出现“断崖式”跳变,这在自动驾驶里是致命的。
最后总结一下我的个人经验:组合导航没有银弹。松耦合适合快速原型验证,紧耦合适合对可靠性要求高的场景。卡尔曼滤波是核心工具,但参数调优需要耐心。传感器融合策略里,数据质量评估比算法本身更重要。
嗯,今天就先聊到这。记住一句话:定位系统失效时,不是算法不行,是你没给它“好数据”。