Contents

RTKLIB

结合理论和在RTKLIB中的具体算法学习RTK定位

RTK

先要清楚:

  • RTK指的是【实时动态载波相位差分定位】,但RTKLIB能做的远远不是纯RTK
  • RTKLIB是先用卡尔曼滤波获得浮点解再确定整周模糊度,至于在纯理论层面到底RTK是咋个算的也没有定论,这个东西就是没有统一算法,RTK这个可能代表的只是一种思想而非具体的算法
  • 符号标记以RTKLIB manual中的符号为准,也会提到其它的写法

总的来说,是先通过单点定位结果作为初值($x_{k-1}(+)$),然后带入卡尔曼状态方程预测下一个历元的状态($x_k(-)$),又根据基站位置、单点定位结果计算卫地距 -> 非差残差 -> 双差残差,根据双差残差确定卡尔曼状态更新方程中的增益矩阵$H_k$等等参数,然后更新状态 ($x_k(+)$),这个状态就是包含了浮点解,然后再通过LAMBDA算法固定得到固定解

对于RTKLIB来说多了很多校正、验证环节,这些在纯理论上往往没有提到,若考虑这些又会增加很多内容,因而看起来很困难

我们先简易版看一下:

浮点解

浮点解指的是整周模糊度尚未固定的解,这样算出来的解到底为什么“对”其实我也不理解

符号

在Kalman滤波中这里用到两个方程,我愿称之为状态预测方程状态更新方程,在RTKLIB Manual中用 $-,+$分别表示更新前和后,而一般在论文中用的是专业的数学符号,状态量 $\tilde{x}$,估计量$\hat{x}$

该状态被定义为: $$ x=({r_r}^T,{v_r}^T,{B_1}^T,{B_2}^T,{B_5}^T)^T $$ 包含位置向量、速度向量、单差整周模糊度

状态预测方程:

$$ \begin{aligned}\tilde{x}k&=F{k,k-1}\hat{x}{k-1}+w_k\\tilde{P}k&=F{k,k-1}\hat{P}{k-1}F_{k,k-1}^T+Q_k\end{aligned} $$

状态更新方程:

$$ \begin{gathered}K_k=\tilde{P}_kH_k^T(H_k\tilde{P}_kH_k^T+R_k)^{-1} \ \hat{x}_k=\tilde{x}_k+K_k(y_k-H_k\tilde{x}_k)\\hat{P}_k=(I-K_kH_k)\tilde{P}_k\end{gathered} $$

初始值

很重要的一点是,在RTKLIB中,会先用SPP定位结果作为初值去得到待状态,此外在后面的移动站非差残差计算中也用到SPP定位结果来算卫地距

  • SPP计算出移动站位置、速度,通过下面方程得到单差整周模糊度:

$$ B_{rb} = P_{rb} / \lambda - \varphi_{rb} $$

这些作为初值建立状态量 $x$

  • 用SPP结果作为 $\hat{x}{k-1}$ 带入状态预测方程中,得到状态 $\tilde{x}{k} $

非差残差

基准站

如果已知位置则可以直接用,没有则用基准站的观测文件同样计算SPP结果作为基准站坐标

根据星历参数计算出卫星的坐标

计算卫地距 $\rho$ (注意伪距观测量$P$和协方差矩阵$P$的区别)

修正:钟差、对流层、天线

非差残差 = 观测值 - 修正后的卫地距

设基准站$b$在$k$历元关于卫星$s$的非差残差为$y_{b,k}^{s}$,则载波相位上的残差为: $$ y_{b,k}^{s} = \lambda ~\phi_{b,k}^s - (\rho_{b,k}^s - dist(clk_{b,k}^s) + dist(trop_{b,k}^s) + dist(ant_{b,k}^s)) $$ 后面为了简洁就统一为距离量了,这在这行挺常见的

移动站

使用SPP定位结果计算卫地距,流程和基准站一样

双差残差

固定解

单差模糊度

  • 单差模糊度转双差模糊度,建立最小二乘问题

  • 降相关:变换到新的空间

  • 分解单差模糊度的协方差矩阵,得到对角化矩阵 $D$,然后核验,得到 $z$

  • 模糊度搜索:在新空间新方程找到最优解,再逆变换回来