Skip to main content

GNSS定位原理

Published: 2020-01-13 | Lastmod: 2020-01-30

数据文件介绍 #

观测文件

观测文件记录了该观测站能够观测到的卫星及其对应的伪距、载波观测值。

 01  9  4  9 40  0.0000000  0  7G 1G 4G 7G13G20G24G25               
  20532012.14648  20532011.55846  20532016.22546 107896448.4014   84075170.1284 
      -702.033        -547.047  
  21255524.69947  21255524.94445  21255529.02045 111698540.8774   87037834.1244 
       799.589         623.056  
  24648794.02245  24648792.88941  24648801.63741 129530300.6484  100932694.9344 
     -3425.352       -2669.144  
  21267718.45748  21267718.52445  21267722.00945 111762613.2534   87087766.9504 
      1911.882        1489.773  
  21900010.88847  21900009.74444  21900015.95344 115085325.1934   89676892.5064 
     -3011.439       -2346.579  
  23828505.41246  23828504.07842  23828511.81542 125219643.5474   97573763.5014 
      2743.177        2137.544  
  24104647.59546  24104646.97742  24104654.81342 126670763.8784   98704504.1444 
     -2800.638       -2182.275  

导航文件

导航文件用来计算卫星在某一时刻的位置。

 7 01  9  4  9 59 44.0  .394901260734D-03  .387672116631D-10  .000000000000D+00
     .228000000000D+03 -.138750000000D+02  .543415492579D-08 -.101085380239D+01
    -.417232513428D-06  .120551300934D-01  .368431210518D-05  .515375120926D+04
     .208784000000D+06  .931322574615D-08 -.123603373253D+01  .264495611191D-06
     .944765906161D+00  .300218750000D+03 -.199943296834D+01 -.870929134837D-08
    -.653598653579D-10  .000000000000D+00  .113000000000D+04  .000000000000D+00
     .200000000000D+01  .000000000000D+00 -.186264514923D-08  .228000000000D+03
     .208799000000D+06                                                          

RTCM & Ntrip

RTCM标准定义了参考站与移动接收机之间的通信协议。根据这个协议,可以从一串二进制实时数据流中,解译出改正数据、参考站观测值等。 下面是一段rtcm v2.3的数据样例:

00000c00: 7f7f 5f4c 7654 7e47 404a 7f7f 5f63 645c  .._LvT~G@J.._cd\
00000c10: 7c47 404d 7f7f 6f50 5e63 4178 7f5e 7f7f  |G@M..oP^cAx.^..
00000c20: 5f76 5473 4278 7f59 7f7f 5f7c 6d74 7c47  _vTsBx.Y.._|mt|G
00000c30: 4078 4040 6058 4153 4378 7f51 7f7f 6f6a  @x@@`XASCx.Q..oj
00000c40: 594b 4078 7f7d 4040 707e 7d6c 7f47 4054  YK@x.}@@p~}l.G@T
00000c50: 7f7f 4f60 730d 0a59 767c 7f6f 5b72 6c61  ..O`s..Yv|.o[rla
00000c60: 6a56 5e6a 7f63 7c6c 7370 7a51 6e68 6462  jV^j.c|lspzQnhdb
00000c70: 546e 535b 5d62 406f 7242 6353 6c40 4d7b  TnS[]b@orBcSl@M{
00000c80: 7a5e 7647 6351 4c7f 6c43 5e73 7378 4c75  z^vGcQL.lC^ssxLu
00000c90: 535b 637b 7a55 7862 746c 7370 7454 5249  S[c{zUxbtlsptTRI
00000ca0: 4c57 5373 6c68 6f74 7863 7e55 4b50 6c70  LWSslhotxc~UKPlp

Ntrip表示"Networked Transport for RTCM via Internet Protocol"。 通过因特网,例如通过手机卡上网,连接CORS服务器,并按照Ntrip规定的格式,请求所需要的改正数据,服务器便发送一串二进制实时数据流过来。

GET /RTCM23 HTTP/1.0
User-Agent: NTRIP GNSSInternetRadio/1.4.10
Accept: */*
Connection: close
Authorization: Basic VXNlcjpQd2Q=

NMEA

NMEAS is a simple standard composed of a serial communication protocol and an ASCII messages, transmitted from a source to a series of destinies. 简而言之,NMEA就是一串文本格式的GPS定位结果等相关信息。

$GPGGA,230331,3115.27393,N,12133.89226,E,1,09,1.0,19.31,M,1,M,,*7F

其他文件

各种高精度的误差改正文件,结合误差模型,能够将误差的影响尽量削弱。 本文仅介绍到短基线RTK,对于长基线的RTK误差估计、精密单点定位PPP需要考虑的其他误差模型, 可参考Interfaces and Protocols

观测方程 #

对于某一测站,已知测站到各个卫星的距离,各个卫星的坐标,待估参数为测站的坐标\(X\),与测站的时钟误差\(t\)

单点定位

有如下关系:

\[ \begin{aligned} P_r^i &= \rho_r^i + I_r^i + T_r^i + ct_r + \epsilon_r^i \\ &=\sqrt{(x_r-x^s)^2+(y_r-y^s)^2+(z_r-z^s)^2} + I_r^i + T_r^i + ct_r + \epsilon_r^i \\ &=( \rho_{r,0}^i + \frac{\partial \rho_r^i}{\partial x_r}\Delta x_r ) + I_r^i + T_r^i + ( ct_{r,0} + c\Delta t_r ) + \epsilon_r^i \end{aligned} \]

经典单点定位精度在10m左右。 其中\(\rho_{r,0}^i\)为测站到第\(i\)颗卫星的近似距离,\(ct_{r,0}\)表示接收机钟差的近似值。
由于测站坐标位置、接收机钟差需要一个初值,用带有一个角标0的符号表示,且存在待估计的小量改正数\(\Delta x_r\)\(\Delta t_r\)
\(I\)\(T\)分别表示电离层、对流层的影响。\(\epsilon\)表示其它随机噪声。

\[ \begin{bmatrix} P_r^i -\rho_{r,0}^i -ct_{r,0} -I_r^i -T_r^i \end{bmatrix} = \begin{bmatrix} E_r^i & 1 \end{bmatrix} \begin{bmatrix} \Delta x_r \\ c\Delta t_r \end{bmatrix} \]

将多个卫星的观测数据累加在一起,用最小二乘,即可求解参数。

DGPS

当有参考站的情况下,可以使用DGPS技术提高定位精度。定位精度在1m左右。

参考站的坐标已知,\(\rho_b^i\)为精确量,也不存在\(\Delta x_b\),其观测方程可以写成如下形式:

\[ \begin{bmatrix} P_b^i -\rho_b^i -ct_{b,0} -I_b^i -T_b^i \end{bmatrix} = \begin{bmatrix} E_b^i & 1 \end{bmatrix} \begin{bmatrix} 0 \\ c\Delta t_b \end{bmatrix} \]

将两个方程组相减,实现站间单差。当参考站与流动站相聚较近时,电离层误差\(I\)、对流层误差\(T\)认为基本相等,可以消去。 从而得到单差观测方程:

\[ \begin{bmatrix} P_{rb}^i -\rho_{r,0}^i -\rho_b^i -ct_{rb,0} \end{bmatrix} = \begin{bmatrix} E_r^i & 1 \end{bmatrix} \begin{bmatrix} \Delta x_r \\ c\Delta t_{rb} \end{bmatrix} \]

选取第\(i\)颗卫星作为参考星,剩余所有卫星分别依次与第\(i\)颗卫星相减,实现星间差分,消除接收机钟差的影响,得到双差观测方程:

\[ \begin{bmatrix} P_{rb}^{ji} -\rho_{r,0}^{ji} -\rho_b^{ji} \end{bmatrix} = \begin{bmatrix} E_r^{ji} \end{bmatrix} \begin{bmatrix} \Delta x_r \end{bmatrix} \]

此时的卫星方程非常精简,大量的共同误差被消除,估计出来的测站坐标精度也比较高。 值得注意的是,对于双差观测方程,协方差矩阵是相关的。

RTK

载波是调试信号的正弦波,在接收机稳定跟踪卫星信号以后,能够给出正弦波变化的周数。 但前面一段正弦波信息无法获得,因此存在所谓的“整周模糊度”。其双差观测方程与伪距的双差观测方程基本相同,仅需要多估计一个模糊度参数。

\[ \begin{bmatrix} P_{rb}^{ji} -\rho_{r,0}^{ji} -\rho_b^{ji} \\ \Phi_{rb}^{ji} -\rho_{r,0}^{ji} -\rho_b^{ji} \end{bmatrix} = \begin{bmatrix} E_r^{ji} &0 \\ E_r^{ji} &\lambda \end{bmatrix} \begin{bmatrix} \Delta x_r \\ N_{rb}^{ji}\end{bmatrix} \]

当基线长度大于10km时,通过双差方程并不能完全消除电离层、对流层的影响, 此时需要考虑对参与量进行估计,或通过其他的观测值线性组合进行特殊处理,这里不再做具体介绍。

周跳探测

接收机跟踪信号过程中可能出现不稳定情况,导致出现丢失几次正弦波计数,称之为“周跳”。有多种手段进行周跳的检测。

TODO

模糊度解算

在得到模糊度参数的浮点解以后,需要将其还原成整数,再将整数解带入原始方程,实现测站坐标的cm级精度估计。

TODO

参考星选择与处理的小技巧

双差观测方程需要选择合适的参考星。在特殊情况下,参考星可能会突然消失,或者出现周跳等不稳定情况,所估计的双差模糊度也需要做特殊处理。

对观测方程做简单的变形,可以使得参考星的处理变得简洁清晰,程序设计更加简单。

TODO

开源软件及学习资源 #

几个官网要仔细逛逛,有很多资源:
IGS
UNAVCO
Navipedia
GPS Toolbox

不重复造轮子,在巨人的肩膀上走的更远。 T. Takasu教授写的两个开源软件,是很好的入门学习软件:
RTKLIB
GpsTools (GT): GPS/GNSS Precise Analysis Software

据说把这个软件搞懂就超神了:
GAMIT/GLOBK


Next: LOAM
Previous: Software Defined Receiver