3. 松组合架构:定义、系统框图与数据流
好,咱们今天聊聊松组合。说实话,这是导航算法里最“友好”的一种组合方式了。我刚入行那会儿,第一个实战项目就是做松组合,当时觉得——嗯,这玩意儿挺直观的。
3.1 什么是松组合?
松组合,英文叫 Loosely Coupled Integration。说白了,就是让 GPS 和 INS 各干各的,然后在结果层面做“融合”。
具体来说:
- GPS 自己算出一套位置、速度(通常是卡尔曼滤波后的结果)
- INS 自己通过加速度计和陀螺仪积分出一套位置、速度
- 然后我们把这两套结果拿过来,做个差值,喂给一个卡尔曼滤波器
- 滤波器估计出 INS 的误差,再反馈回去修正
你看,整个过程就像两个独立的系统在“松松散散”地合作——各算各的,最后对一下答案。这也是“松组合”这个名字的由来。
核心特点:GPS 和 INS 各自独立导航,组合发生在导航结果层面(位置、速度),而不是原始观测层面。
3.2 系统框图
我习惯用一张图来理解松组合的架构。下面这个 SVG 是我自己画的,你一看就明白。
这张图我画得比较细。你看,左边是 GPS 通道,右边是 INS 通道,各自独立解算。然后在中间那个减法器里做差,差值送给卡尔曼滤波器。滤波器估计出误差后,再反馈回去修正 INS 的解算结果。
一个小技巧:我在项目里习惯把反馈修正画成虚线,这样一眼就能区分“数据流”和“反馈流”。团队评审时,大家看图的效率会高很多。
3.3 数据流详解:位置/速度松耦合
咱们把数据流拆开来看。松组合里,核心的数据流就两条:
3.3.1 前向数据流(GPS → 滤波器)
- GPS 输出:经度、纬度、高度(位置),以及北向、东向、地向速度
- INS 输出:同样格式的位置和速度(由 IMU 积分得到)
- 差值计算:ΔP = P_GPS − P_INS,ΔV = V_GPS − V_INS
- 滤波器输入:这个 ΔP 和 ΔV 作为观测向量 z
说白了,卡尔曼滤波器看到的“观测值”就是 GPS 和 INS 之间的差异。如果 INS 没误差,那这个差值应该只是 GPS 的噪声。但 INS 有漂移,所以差值里就包含了 INS 的误差信息。
3.3.2 反馈数据流(滤波器 → INS)
- 滤波器输出:位置误差、速度误差、姿态误差、陀螺零偏、加速度计零偏
- 反馈方式:用估计出的误差去修正 INS 的导航解
- 修正公式:P_corrected = P_INS − δP,V_corrected = V_INS − δV
注意:我曾经在一个项目里吃过亏——反馈修正的频率太高了。INS 的误差变化其实很慢,你每毫秒都去修正,反而会把高频噪声引入 INS 解算。我建议反馈周期设在 1~10 秒之间,具体看你的 IMU 质量。
3.4 松组合的优缺点
聊完原理,说说实际感受。松组合最大的好处就是——简单、稳定、好调试。
| 维度 | 优点 | 缺点 |
|---|---|---|
| 实现难度 | 低。GPS 和 INS 各自独立,可以分别调试 | —— |
| 计算量 | 小。滤波器状态量少(通常 15 维) | —— |
| 可靠性 | 高。GPS 失效时,INS 仍可独立工作 | GPS 信号差时,组合效果会明显下降 |
| 精度 | —— | 不如紧组合。因为 GPS 内部已经滤波过一次,信息有损失 |
| 动态适应性 | —— | 高动态场景下,GPS 输出延迟会导致时序问题 |
我个人觉得,松组合特别适合那些“GPS 信号大部分时间都挺好”的场景。比如车载导航、无人机巡航。但如果你要做高精度测绘或者城市峡谷里的导航,那松组合可能就不太够用了。
3.5 一个简单的松组合伪代码
最后,给一段伪代码。你一看就明白整个流程了。
// 松组合主循环
while (running) {
// 1. 读取 IMU 数据
imu_data = read_imu();
// 2. INS 解算(机械编排)
ins.navigate(imu_data); // 更新位置、速度、姿态
// 3. 如果有新的 GPS 数据
if (gps_available()) {
gps_data = read_gps();
// 4. 计算观测差值
dz.position = gps_data.position - ins.position;
dz.velocity = gps_data.velocity - ins.velocity;
// 5. 卡尔曼滤波更新
kf.predict(); // 时间更新
kf.update(dz); // 量测更新
// 6. 反馈修正 INS
ins.correct(kf.x_hat); // 用估计的误差修正
}
// 7. 输出导航结果
output(ins.position, ins.velocity);
}
你看,核心逻辑就这么几行。我当年第一次跑通这个循环时,心里还挺激动的——两个独立的系统,就这么“松”地组合在一起,效果居然比单独用任何一个都好。
总结一下:松组合的核心思想就是“先独立解算,再融合结果”。它简单、可靠、易实现,是入门组合导航的最佳选择。但如果你追求极致精度,或者工作在恶劣的 GNSS 环境下,那就要考虑紧组合甚至深组合了。
公众号:蓝海资料掘金营,微信deep3321