3. GPS定位原理:从卫星信号到位置坐标
GPS这东西,大家手机里都有,但真正搞明白它怎么工作的,其实不多。我最早接触GPS是在一个无人机项目里,当时飞机飞着飞着突然偏了十几米,查了半天才发现是定位模块的伪距计算出了偏差。从那以后,我就把GPS原理老老实实啃了一遍。
说白了,GPS定位就是三件事:知道卫星在哪儿、测出你到卫星的距离、然后解算出你的位置。听起来简单,但每一步都有坑。
3.1 GPS系统组成:三大部分缺一不可
GPS系统由三个段组成,我习惯叫它们「天上、地上、手上」。
- 空间段(天上):24颗卫星分布在6个轨道面上,轨道高度约20200公里。每颗卫星都带着原子钟,不断广播自己的位置和时间。
- 地面控制段(地上):主控站、监测站和注入站。它们负责跟踪卫星、计算星历、修正时钟误差。我记得有一次项目里卫星星历没更新,定位误差直接飙到50米,后来强制刷新了星历数据才恢复正常。
- 用户段(手上):就是你的GPS接收机。它接收卫星信号,解算位置。接收机的质量直接影响定位精度,便宜的和贵的能差一个数量级。
关键点:GPS定位至少需要4颗卫星才能解算出三维位置(经度、纬度、高度)和时间。3颗卫星只能做二维定位,而且高度是假设的。
3.2 伪距定位原理:时间差里的学问
伪距,说白了就是「假装的距离」。为什么叫「伪」?因为测出来的距离包含各种误差,不是真实距离。
原理其实很简单:卫星发一个信号,告诉你「我在时间t1发了这个信号」,接收机收到时记录时间t2,那么距离 = (t2 - t1) × 光速。但问题来了——卫星的时钟和接收机的时钟不同步。
卫星上有原子钟,精度在纳秒级别。接收机呢?一般就是个石英晶振,一天能差几毫秒。你想想看,光速是3×10⁸米/秒,1毫秒的误差就是300公里。所以必须把接收机时钟误差也当作一个未知数来解算。
我的经验:伪距观测方程有4个未知数(x, y, z, 接收机钟差),所以至少需要4颗卫星才能解算。如果只有3颗卫星,你可以假设高度已知(比如海平面),但精度会大打折扣。我在山区做测试时就吃过这个亏。
伪距观测方程长这样:
ρ = √[(x_s - x_r)² + (y_s - y_r)² + (z_s - z_r)²] + c·Δt + ε
其中:
- ρ — 伪距测量值
- (x_s, y_s, z_s) — 卫星位置(从星历中获取)
- (x_r, y_r, z_r) — 接收机位置(待求)
- c — 光速
- Δt — 接收机钟差(待求)
- ε — 其他误差项
解算方法一般用最小二乘法或卡尔曼滤波。我建议你在实际项目中用卡尔曼滤波,因为它能处理动态场景,而且对噪声有平滑作用。
3.3 单点定位与差分定位:精度差在哪?
单点定位就是一台接收机自己算位置。精度一般在3-10米,看环境和卫星几何分布。差分定位就不一样了——它用两台接收机,一台在已知位置(基准站),一台在未知位置(流动站),通过差分消除公共误差。
| 对比项 | 单点定位 | 差分定位(DGPS) | RTK定位 |
|---|---|---|---|
| 精度 | 3-10米 | 0.5-2米 | 1-5厘米 |
| 设备 | 1台接收机 | 2台接收机 + 数据链 | 2台接收机 + 高频数据链 |
| 实时性 | 实时 | 实时 | 实时(厘米级) |
| 适用范围 | 消费级导航 | 农业、海洋 | 测绘、无人机 |
| 成本 | 低 | 中 | 高 |
差分定位的原理其实不复杂。基准站知道自己的精确坐标,它测量伪距后算出误差,然后把误差通过数据链发给流动站。流动站用这个误差修正自己的测量值。说白了就是「我帮你把公共误差减掉」。
注意:差分定位的有效范围有限。基准站和流动站的距离越远,空间相关性越差,误差修正效果就越差。一般DGPS的有效范围在100公里以内,RTK在10公里以内。超过这个距离,精度会急剧下降。
我在一个农业无人机项目里用过RTK。那台无人机要沿着田埂自动喷洒农药,单点定位根本不行,飞着飞着就偏到隔壁田里去了。后来上了RTK,精度到了2-3厘米,飞机沿着田埂走得笔直。但代价是——基准站架设麻烦,数据链容易受干扰,而且贵。
3.4 GPS误差源分析:为什么定位不准?
GPS的误差来源很多,我把它分成三类:卫星端、传播路径端、接收机端。每一类都有几个大头。
卫星端误差
- 星历误差:卫星实际位置和广播星历算出来的位置有偏差。地面站虽然一直在修正,但做不到100%准确。
- 卫星钟差:原子钟也有漂移,虽然很小,但乘以光速后影响不小。
- 相对论效应:卫星在高速运动,引力场也和地面不同,时钟会变快。这个效应已经通过硬件补偿了,但补偿不可能完美。
传播路径误差
- 电离层延迟:信号穿过电离层时,传播速度会变慢。白天比晚上严重,太阳活动期更严重。双频接收机可以消除这个误差,单频机只能靠模型修正。
- 对流层延迟:对流层对信号的折射,和温度、气压、湿度有关。这个误差比较稳定,模型修正效果不错。
- 多路径效应:信号反射后进入接收机,造成测距误差。在城市峡谷、建筑物旁边特别严重。我做过一个测试,在玻璃幕墙大楼旁边,多路径误差能到几十米。
接收机端误差
- 接收机噪声:电路热噪声、量化误差等。好的接收机噪声低,差的就高。
- 天线相位中心偏差:天线的电气中心和几何中心不重合。高精度测量时需要校准。
- 通道间偏差:不同卫星信号经过不同通道,通道特性不一致。
误差量级参考(单点定位,典型值):
- 星历误差:1-3米
- 卫星钟差:1-2米
- 电离层延迟:2-10米(白天)/ 0.5-2米(夜间)
- 对流层延迟:0.5-2米
- 多路径效应:1-10米(严重时可达50米)
- 接收机噪声:0.1-1米
你可能会问:这么多误差,怎么提高精度?其实方法就几个方向:
- 用差分定位:消除公共误差(星历、钟差、大气延迟)
- 用双频接收机:直接消除电离层延迟
- 选好天线位置:避开反射面,减少多路径
- 用精密星历:后处理时用IGS精密星历代替广播星历
我记得有一次做车载导航测试,在城市高架桥下面,定位直接跳了20多米。查了半天,是多路径和卫星遮挡共同作用的结果。后来我们把天线装到了车顶中央,远离车身金属面,情况好了很多。嗯,天线位置这个细节,很多人容易忽略。
避坑指南:我曾经在一个项目里发现定位精度突然变差,排查了两天才找到原因——附近新装了一个大功率基站,干扰了GPS信号。所以做高精度定位时,别忘了做电磁环境调查。
总结一下,GPS定位的核心就是伪距测量加误差修正。单点定位够用但精度有限,差分定位精度高但成本也高。选哪种方案,取决于你的任务需求——是导航用、测绘用、还是控制用。后面几章我们会深入讲定位模块在任务规划中的具体集成方法,到时候这些原理都会用上。