3、RTK定位技术原理(上):载波相位差分技术、整周模糊度固定(OTF/AR)、双差观测模型、基准站与流动站架构

各位同学,今天我们来啃一块硬骨头——RTK定位技术。说实话,我刚入行那会儿,觉得RTK就是个黑盒子,天线一架,数据一收,厘米级精度就出来了。后来自己动手搭系统,才发现里面门道多着呢。

RTK的全称是实时动态差分技术。它不是什么新概念,但能把精度做到厘米级,核心就靠两样东西:载波相位测量整周模糊度固定。这两样搞不明白,你做的RTK就是个摆设。

3.1 载波相位差分技术——为什么不用伪距?

先问一个问题:GPS的伪距测量精度大概多少?答案是米级。为什么?因为C/A码的码片宽度是293米,就算接收机做得再好,也只能做到码片的1%左右,也就是2-3米。

但载波不一样。L1载波的波长是19厘米,L2是24厘米。你想想看,如果能测量载波的相位,理论上精度可以达到毫米级。这就是RTK能实现厘米级定位的根本原因。

不过,载波相位有个大坑——整周模糊度。接收机只能测量不足一周的小数部分,整周数N是未知的。这个N,就是我们要解的谜题。

核心公式:

载波相位观测值 Φ = ρ + c·(dt_r - dt_s) + λ·N + ε

其中:ρ是几何距离,dt_r和dt_s是接收机和卫星钟差,λ是波长,N是整周模糊度,ε是噪声。

我在项目中遇到过一件事:有一次在开阔地带测试,明明卫星信号很好,但定位结果就是飘来飘去。查了半天,发现是整周模糊度没固定住。后来加了双差模型,问题才解决。

3.2 双差观测模型——消除共同误差

单差、双差,说白了就是做减法。为什么要做减法?因为很多误差是共模的,比如卫星钟差、接收机钟差、大气延迟。你减我减大家减,误差就消掉了。

单差:两个接收机对同一颗卫星做差,消掉卫星钟差。

双差:两个接收机对两颗卫星做差,消掉接收机钟差。

双差模型长这样:

∇ΔΦ = ∇Δρ + λ·∇ΔN + ∇Δε

嗯,这里要注意:双差之后,整周模糊度变成了整数。这就为我们用整数搜索算法提供了条件。

误差源 单差 双差
卫星钟差 消除 消除
接收机钟差 保留 消除
电离层延迟 部分消除 部分消除
对流层延迟 部分消除 部分消除
整周模糊度 实数 整数

我个人习惯,在写代码时先做双差,再做模糊度固定。顺序不能乱,否则误差模型会乱套。

3.3 整周模糊度固定(OTF/AR)——RTK的灵魂

整周模糊度固定,业内叫AR(Ambiguity Resolution)。OTF(On-The-Fly)的意思是动态解算,不需要停下来初始化。

为什么说它是灵魂?因为如果模糊度固定错了,定位误差可能达到几十厘米甚至几米。我见过有人用LAMBDA算法,固定率只有70%,结果定位结果一跳一跳的,根本没法用。

常用的AR方法:

  • LAMBDA算法:最小二乘降相关平差。说白了,就是把模糊度搜索空间缩小,然后找整数解。我用过很多次,效果不错,但要注意降相关矩阵的数值稳定性。
  • MLAMBDA:改进版,速度更快。适合实时系统。
  • TCAR:三载波模糊度解算。如果你有三频信号,这个方法很香。

避坑指南:

我曾经在LAMBDA算法里栽过跟头。当时用的是浮点解协方差矩阵,但没做降相关,结果搜索空间太大,固定时间超过10秒。后来加了降相关,固定时间降到1秒以内。记住:降相关不是可选项,是必选项。

3.4 基准站与流动站架构——谁在做什么?

RTK系统由两部分组成:基准站和流动站。基准站是已知坐标的固定站,流动站是我们要定位的移动站。

工作流程:

  1. 基准站接收卫星信号,计算载波相位观测值和伪距观测值。
  2. 基准站通过数据链(电台或4G)把原始观测值发给流动站。
  3. 流动站收到后,和自身的观测值做双差。
  4. 解算整周模糊度,得到厘米级位置。

这里有个关键点:基准站和流动站的距离不能太远。一般建议在10公里以内。为什么?因为大气延迟在空间上是相关的,距离越远,相关性越差,双差模型的效果就越差。

注意事项:

基准站的坐标精度直接影响流动站的定位精度。如果基准站坐标误差超过1米,流动站就别想拿到厘米级。我建议基准站坐标用静态PPP或长时间静态解算来标定。

3.5 知识体系框架

下面这张图是我自己画的,把RTK的核心逻辑串起来了。你看一遍,应该能对整个流程有个整体印象。

RTK定位技术核心逻辑框架 基准站 已知坐标 接收载波相位 生成差分改正数 流动站 未知坐标 接收载波相位 接收差分改正数 数据链(电台/4G) 双差观测模型 消除卫星钟差、接收机钟差 整周模糊度固定(AR) LAMBDA / MLAMBDA / TCAR 厘米级定位结果 图:RTK核心流程

从图上你能看到,整个流程是串行的:基准站和流动站各自收数据,通过数据链传过来,然后做双差,再解模糊度,最后出结果。每一步都有坑,每一步都需要细心处理。

好了,这一章的内容就到这里。RTK的原理听起来复杂,但说白了就是「做差+解整数」。下一章我们会深入LAMBDA算法的具体实现,到时候我会带大家手撕代码。