2、定位系统基础:GPS、北斗、GLONASS、Galileo系统简介,多系统融合原理

做定位开发这么多年,我经常被问到同一个问题:“为什么我的设备在空旷地方定位准,一到城市里就飘得厉害?”

其实答案往往不在算法本身,而在于你用了哪几颗卫星。说白了,单靠一个系统,就像一个人用一只眼睛看世界——你能看到,但看不清深度。

今天我们就来聊聊四大卫星导航系统,以及怎么把它们“拧成一股绳”。

2.1 四大系统,各怀绝技

目前全球有四个成熟的卫星导航系统。我习惯把它们比作四个性格各异的“老司机”:

系统名称 所属国家 卫星数量(约) 轨道高度 特点
GPS 美国 31颗 20200 km 最成熟,全球覆盖最均匀
北斗 中国 44颗 21500 km 有短报文功能,亚太地区表现好
GLONASS 俄罗斯 24颗 19100 km 高纬度地区覆盖好
Galileo 欧盟 26颗 23222 km 民用信号精度高,抗干扰强
我的经验: 在项目选型时,别只看卫星数量。北斗卫星多,但如果你只在欧洲用,Galileo反而更靠谱。我曾在北欧做过一个测试,GLONASS的搜星速度比GPS快30%以上——纬度越高越明显。

2.2 单系统的“死穴”

你想想看,单系统最大的问题是什么?

遮挡。 城市峡谷、高架桥下、隧道入口——这些场景下,你只能看到头顶一小片天。如果只靠GPS,可能只能搜到4-5颗星,几何分布还特别差。

几何分布差是什么意思?我举个例子:

  • 4颗卫星全在头顶正上方 → 水平精度差,垂直精度更差
  • 4颗卫星分布在东南西北四个方向 → 定位结果稳如老狗

这就是DOP(精度衰减因子)的概念。DOP值越小,定位越准。单系统在城市里,DOP值经常飙到3.0以上,而多系统融合可以轻松压到1.5以下。

注意: 我曾经遇到过一个坑——某款芯片宣称支持多系统,但实际只开了GPS+北斗。在东南亚地区,Galileo信号被忽略了,导致定位精度始终差一截。后来我强制开启了Galileo,问题立刻解决。所以,“支持”和“优化支持”是两码事。

2.3 多系统融合,到底怎么融?

多系统融合,说白了就是让设备同时接收多个系统的卫星信号,然后统一解算位置。

但这里有个核心问题:每个系统的时间基准不一样。

GPS用GPS时,北斗用北斗时,GLONASS用UTC(协调世界时),Galileo用Galileo系统时。你想想看,如果时间对不上,算出来的距离差之毫厘,谬以千里。

解决方法是引入时间偏差参数。在解算方程里,每多一个系统,就多一个未知数(时间偏差)。比如:

// 单系统(GPS)解算方程
// 未知数:x, y, z, dt_gps
// 4个方程,4个未知数

// 双系统(GPS + 北斗)解算方程
// 未知数:x, y, z, dt_gps, dt_bds
// 5个方程,5个未知数(至少需要5颗卫星)

嗯,这里要注意:卫星越多,不一定越好。 因为每多一个系统,就多一个时间偏差参数,计算量会增大。而且如果某个系统的卫星信号质量差,反而会拉低整体精度。

核心原则: 多系统融合不是简单堆卫星数量,而是选择最优的卫星组合。我一般会设置一个阈值——只选择信噪比高于30 dB-Hz、仰角高于10度的卫星参与解算。

2.4 融合架构:松耦合 vs 紧耦合

在实际工程中,多系统融合有两种主流架构:

  • 松耦合: 每个系统独立解算位置,然后对多个位置结果做加权平均。简单,但精度提升有限。
  • 紧耦合: 所有系统的原始观测值(伪距、载波相位)一起送入解算器。复杂,但精度高。

我个人习惯用紧耦合。虽然代码量翻倍,但效果立竿见影。有一次在深圳的深南大道测试,松耦合的定位误差在8米左右,换成紧耦合后直接降到3米以内。

2.5 一张图看懂多系统融合

下面这张SVG图,是我自己画的融合流程。你看一眼就明白了:

多系统融合定位流程 GPS 北斗 GLONASS Galileo 时间同步(统一到GPST或UTC) 卫星选择(信噪比 > 30dB-Hz,仰角 > 10°) 紧耦合解算(最小二乘 / 卡尔曼滤波) 输出:经纬度 + 高程 + 时间

你看,整个流程其实就三步:时间同步 → 卫星筛选 → 联合解算。每一步都有坑,但每一步也都有优化空间。

2.6 实战中的“潜规则”

最后分享几个我在项目中踩过的坑:

  • 北斗的B1I和B1C信号要区分: 老芯片只支持B1I,新芯片支持B1C。混用会导致伪距偏差。我建议统一用B1C,精度更高。
  • GLONASS的频分多址(FDMA)是个麻烦: 每颗卫星频率不同,接收机需要单独校准。有些廉价模块直接忽略这个校准,结果GLONASS的伪距误差比GPS大两倍。
  • Galileo的E5信号是宝藏: 带宽大,抗多径效果好。在城市峡谷里,E5信号的可用性比GPS的L1高不少。我一般会优先选择E5 + L1的组合。
一个小技巧: 如果你在做嵌入式开发,可以在初始化时打印出每个系统的卫星数量和DOP值。这样一眼就能看出哪个系统在“偷懒”。我曾经发现某款模组在室内只搜到北斗卫星,GPS一颗都没有——后来发现是天线方向图的问题。

多系统融合,说白了就是让设备“耳听八方”。但别忘了,耳朵多了也会打架。关键是要学会筛选和权衡。嗯,这部分内容就到这里,希望对你有所帮助。

可可精品资料库