4. GNSS定位算法基础:从卫星信号到厘米级定位
各位同学,今天我们来聊聊GNSS定位算法。说实话,这个主题我讲了不下几十次,但每次都有新感悟。记得我刚入行那会儿,觉得GPS定位嘛,不就是手机地图上那个蓝点吗?直到我真正开始做芯片底层的定位算法移植,才发现这里面的门道深着呢。
咱们这一章,我会从最基础的卫星导航原理讲起,一直聊到RTK差分定位。嗯,内容有点多,但都是干货。你想想看,智能驾驶对定位精度的要求是厘米级,而普通手机定位误差可能达到几米甚至十几米。这中间的差距,就是靠我们今天要讲的这些算法来填补的。
4.1 卫星导航原理:天上那些"时钟"
卫星导航的基本原理,说白了就是测距。卫星不停地广播自己的位置和精确的时间,你的接收机收到信号后,算一下信号传播的时间,乘以光速,就知道自己离卫星多远了。
但这里有个坑——时间同步。卫星上用的是原子钟,精度极高。你手里的接收机呢?用的是石英钟,一天可能差个几微秒。别小看这几微秒,光速是3×10⁸ m/s,一微秒就是300米!
核心公式:伪距观测方程
ρ = r + c·Δt + ε
其中ρ是伪距测量值,r是真实几何距离,c是光速,Δt是钟差,ε是其他误差项。
我在项目中遇到过一件事:某次路测,定位结果突然跳了十几米。排查了半天,发现是接收机晶振受温度影响,频率漂移了。从那以后,我养成了一个习惯——每次做算法移植,第一件事就是检查时钟模型。
4.2 伪距与载波相位观测方程
GNSS定位有两种基本的观测量:伪距和载波相位。伪距精度在米级,载波相位精度在厘米级。你可能会问:那直接用载波相位不就行了?
嗯,问题没那么简单。载波相位有个大麻烦——整周模糊度。你只能测到相位的小数部分,整数部分是多少?不知道。这就像你只知道时钟的分钟指针位置,却不知道现在是几点。
| 观测量 | 精度 | 优点 | 缺点 |
|---|---|---|---|
| 伪距 | 米级(1-10m) | 无模糊度,鲁棒性好 | 精度低 |
| 载波相位 | 厘米级(1-2cm) | 精度极高 | 存在整周模糊度 |
实际工程中,我一般先用伪距做个粗定位,然后用载波相位做精化。说白了就是"粗调+微调"的思路。载波相位的观测方程长这样:
φ = (1/λ)·r + N + (c/λ)·Δt + ε
这里φ是载波相位观测值,λ是波长,N就是那个让人头疼的整周模糊度。我曾经为了解算这个N值,在嵌入式平台上优化了整整两周的浮点运算。
4.3 单点定位与差分定位(RTK)原理
单点定位,就是只用一台接收机,自己算自己的位置。精度嘛,一般3-5米,好一点能到1-2米。对于智能驾驶来说,这远远不够。你想想看,车道宽度才3.5米,误差2米的话,你都不知道自己在哪条车道上。
这时候就要请出RTK(实时动态差分定位)了。RTK的原理其实不复杂:在已知位置架设一个基准站,它算出各种误差项,然后通过电台或4G网络发给流动站(你的车)。流动站用这些改正数来消除误差。
我的经验:RTK的关键在于数据链路的延迟。我曾经在隧道口测试,基准站数据延迟了2秒,结果定位直接飘了5米。所以做算法移植时,一定要考虑数据延迟的补偿机制。
RTK的精度能达到厘米级,但有个前提——基准站和流动站的距离不能太远。一般建议在20公里以内。距离越远,大气误差的相关性越差,效果就不好了。
4.4 多路径效应与抗干扰
多路径效应,是GNSS定位中最让人头疼的问题之一。信号从卫星发出来,本来应该直线到达接收机。但城市里高楼林立,信号会反射、折射,走一条更长的路才到接收机。这就导致测距偏大,定位偏差。
我在上海陆家嘴做过测试,那个地方高楼密集,多路径效应特别严重。有时候定位误差能到50米以上。怎么解决?我总结了几种方法:
- 天线设计:用扼流圈天线,抑制低仰角信号
- 信号处理:用窄相关技术,减少多路径影响
- 算法层面:用一致性检测,剔除异常观测值
避坑指南:我曾经在某个项目中,为了追求定位精度,把所有低仰角的卫星信号都剔除了。结果卫星数量不够,定位解算失败。后来我学乖了——多路径抑制要适度,不能因噎废食。
抗干扰方面,除了多路径,还有射频干扰、电离层闪烁等问题。对于智能驾驶来说,最怕的是人为干扰。我记得有次在测试场,旁边有个工地在用电焊,产生的电磁干扰直接把GNSS信号淹没了。从那以后,我设计的算法都会加入干扰检测和快速恢复机制。
知识体系总览
下面这张图,是我自己整理的GNSS定位算法知识体系。你看,从卫星信号到最终的位置输出,中间要经过多少环节。每个环节都可能引入误差,而我们的工作就是把这些误差一个个消除掉。
好了,这一章的内容就到这里。从卫星导航原理到RTK差分定位,再到多路径抗干扰,每个环节都是智能驾驶定位算法移植中必须啃下的硬骨头。下一章我们会深入嵌入式平台,聊聊怎么把这些算法高效地跑在芯片上。