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$
-
模糊度搜索:在新空间新方程找到最优解,再逆变换回来