本科生如何入门GNSS算法(二)- rtklib定位解算过程中的GNSS数据格式以及基本概念

目录

rtklib单点定位命令分析

rtklib日志​

定位结果pos文件说明以及定位精度评估

rtklib界面API

rtkplot使用

坐标转换 XYZ->BLH

其他的GNSS数据下载

公众号


rtklib单点定位命令分析

.rtklib.exe -x 5 -p 0 -m 15 -n -o D:\source\RTKLIB-rtklib_2.4.3\rtklib\out.pos D:\source\RTKLIB-rtklib_2.4.3\test\data\rinex\07590920.05o D:\source\RTKLIB-rtklib_2.4.3\test\data\rinex\07590920.05n

rtklib基本都是这种一个配置加一个值或者不加值仅有一个配置的形式,比如 -x 5,-x 我们从手册中的介绍中可以了解到,是用来控制debug trace level,就是控制日志打印的层级;初学者可能对日志也没有概念,一般将日志分为error/warning/info/debug等几个层级,比如error这个层级就是只将程序运行中的错误进行输出,一般认为运行过程中不正常的行为定义为error,即出现error程序运行的正确性无法保证;而info基本就是打印一些运行过程中的中间信息,用以查看一些中间过程是否正常;


rtklib日志​

为什么我们不打印所有日志呢?

这是因为日志输出会比较占用运算资源,一般只打印error层级日志,甚至不打印。

命令的配置没有太多,基本上就在手册的第95页,更详细的配置需要从配置文件读取。除了-x 5这种配置+参数或者 -i 这种单个的配置的形式,命令的最后都被归为输出的观测文件。即上文中的

D:\source\RTKLIB-rtklib_2.4.3\test\data\rinex\07590920.05o D:\source\RTKLIB-rtklib_2.4.3\test\data\rinex\07590920.05n

这俩分别是卫星观测值和卫星星历,都是我们做单点定位必须输入的数据。数据的格式为rinex,rinex格式介绍见网址 Rinex_百度百科,简单来说就是一种存储格式,方便大家统一存储以及读取。IGS网站有各个版本的rinex格式 https://kb.igs.org/hc/en-us/articles/201096516-IGS-Formats ,rtklib提供的数据rinex格式都已经很老了,当然rtklib也支持较新的格式。IGS官网的ftp好像没法访问了,我从网上下载了rinex3.04格式,放在网盘上。链接:百度网盘 请输入提取码 提取码:q2ka


定位结果pos文件说明以及定位精度评估

上节我们已经跑出来了定位结果D:sourceRTKLIB-rtklib_2.4.3rtklibout.pos,打开如下

​里面输出的是一种叫做NMEA的数据格式,用于记录定位结果以及一些中间信息。详细信息请自行百度 NMEA,或者看一下百科

NMEA_百度百科

起初主要是为GPS规定,所以都是以GP开头,比如GPGGA。但后来因为多系统的加入,开头就叫作GN,即如上图中的GNGGA。但是GN的这种多系统协议并没有明确的定义,GNGGA还可以,并不会带来多少歧义。其他的NMEA格式对于多系统没有明确的定义,所以不同厂家输出可能存在差异,工程应用中需要留意。


rtklib界面API

rtklib其实提供了带界面的API,我们可以很方便的拿来进行数据处理。下面介绍一下如何使用rtkplot.exe进行定位结果评估。

再次进入rtklib官网,找到bin(API)的github,如下图:

​相同的方法从github下载下来,并放到D:sourceRTKLIB-rtklib_2.4.3bin下进行解压,解压完成后,如下:

​上图中就有我们要用的rtkplot.exe。其他的程序使用可自行百度或者看手册。


rtkplot使用

打开rtkplot.exe

​File->open solution-1,找到前文的out.pos,并打开。

下拉框可以选择展示的类型

Gnd Trk->显示轨迹;Position->定位时间序列;Velocity->速度;Accel->加速度;NSat->卫星数;一般Position和NSat比较常用。

​其他功能可以自行摸索,比如放大/缩小/放入两个文件对比等。上图可以很方便的看到我们此次单点定位的偏差。

但需要考虑一个问题,评估定位偏差,那至少需要知道坐标的真值才能评估,两个进行对比。下边进行坐标真值的设置。

选择 Edit->Options,如下

​上图中的Coordinate Origin即为设置真值坐标。

Start Pos->使用结果的第一个结果作为真值;

End Pos->最后一个结果作为真值;

Average Pos->平均值作为真值;

Lat/Lon/Hgt->即设置真值坐标,用来评估定位精度。一般的在rinex o文件里面是包含坐标的,但并一定准确。即如下图:

我们尝试用这个坐标作为真值,对单点定位的结果进行评估。


坐标转换 XYZ->BLH

但有个问题,就是rinex文件中给的是空间直角坐标系下的坐标,而输入需要大地坐标系下的经纬高,就涉及坐标转换的问题。如果你对这俩坐标系的概念不了解,请自行翻书或者上网搜索。在《大地测量学》或者一些GPS导航相关的书里,都会有详细的讲解。

在这提供一种利用rtklib bin转换的简单方法,rtklib源码里也有相关的转换代码,可自行学习,或者后续章节会讲到。

找到bin->rtkpost.exe打开,Options->Setting1->kinematic.

然后选择 Positions->Base Station中选择XYZ-ECEF,输入rinex中的XYZ坐标,在然后将下拉框中选中Lat/Lon/Height(deg/m),就会自动进行坐标转换。

将转换后的坐标输入到rtkplot.exe,就能显示真实的定位精度了。结果如下:


其他的GNSS数据下载

在这里推荐一个cuitin大学的GNSS数据ftp,数据比较全,而且接收机类型比较多。很多做短基线或者系统间偏差的文章,都喜欢用这的数据。

数据介绍: IGS Multi GNSS Experiment, research experiments, GNSS – Global Navigation Satellite Systems Research Centre | Curtin University, Perth, Australia ,介绍里有ftp地址,我在这也贴出来,http://saegnss2.curtin.edu.au/ldc/rinex3/ 。

ftp下载的观测值数据为crx格式,需要使用工具将其转为rinex,工具网站 CRX2RNX ,使用方法见下文提供的程序文档,或者参考 这个简单的blog CDDIS官网下载的crx文件转换为Rinex3.0方法_十八与她的博客-CSDN博客 。

同时我下载了2022年 年积日001的CUT2测站的数据和星历,做了一下单点定位,运行状态如下:

并使用平均值作为真值,画了定位结果图:

将我下载的cuitin数据以及转换程序放在了百度网盘,自行下载。

链接:百度网盘 请输入提取码 提取码:uf7p


公众号

有时会将代码 或者资源放在个人公众号上,有问题,在公众号后台回复,也回答的比较快一些,欢迎关注 GNSS和自动驾驶。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平