用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)

 

目录

rtkpost

ppp

spp

VS2019编译rnx2rtkp

使用crx2rnx.exe

.bat批量化处理rnx2rtkp.exe

RTKLIB中调用LAPACK库


rtkpost

rtkpost是一个事后处理软件,可对采集到的数据进行后期处理定位;而rtknavi则是实时定位的软件

数据集:链接:https://pan.baidu.com/s/139B0pKn0PIM8qwX2h898Og 
提取码:j0nr

obs选用rover_trimble.obs,这个数据所用的接收机比rover_ublox.obs要好一点

ppp

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第1张图片

RINEX OBS:输入观测数据.obs;

RINEX OBS: Base Station:做相对定位时导入基站信息(此处不需要);

.xxp是多系统广播星历(.xxn是gps的广播星历,内容为卫星位置和卫星广播钟差改正系数),.sp3是精密星历,.clk是精密钟差,.pos是输出定位结果

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第2张图片

obs是动态数据,故选PPP Kinematic模式;如果是静态数据就选PPP Static;

单频数据的话选L1;双频L1+L2;三频L1+L2+L5;

Ionosphere Correction:不提供电离层数据就选Broadcast;Iono-Free LC无电离层组合模型;est-stec非组合模型;

Clock:提供了精密钟差选Precise;没有就Broadcast

如果已知有哪些卫星的数据就选哪些,不清楚的话就都选上;

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第3张图片

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第4张图片

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第5张图片

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第6张图片

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第7张图片

导入天线改正文件.atx;电离层数据.I;差分码偏差.DCB文件

对DCB改正的理解:卫星和接收机端都有一些硬件延迟,这些误差会被钟差吸收。简单来说,钟差只与接收机和卫星有关,但由于它又吸收了硬件延迟,往深究了还与频点有关,在做ppp时,DCB修正必须考虑。

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第8张图片

配置好以后点击“execute”,解算完成后再点"plot"用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第9张图片

解算得到的动态ppp定位结果,点1,再点2,拉入reference.pos文件,即grountruth

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第10张图片

再点1-2,即显示解算和真实轨迹之间的差值,选择Gnd Trk或者Position或者其他模式查看误差情况。

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第11张图片

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第12张图片

动态ppp精度大概在2m左右,飞点严重。

spp

其他一样,在setting1时有改动

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第13张图片

不使用精密星历,精密钟差和电离层误差

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第14张图片

解算结果:

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第15张图片

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第16张图片

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第17张图片

误差在5-10m,飞点也更严重

VS2019编译rnx2rtkp

rnx2rtkp是rtkpost.exe对应的C代码源文件,可以用它调整处理过程。

打开VS2019,点“打开项目或编辑方案”,选择“\app\rnx2rtkp\msc\msc.sln”,报错msc.sln已被卸载,重新加载后报错“没有msc.vcxproj文件”。我下载的2.4.3 b33版本,里面确实没有该文件,有两种解决方案。

1)下载2.4.2 p13版本,打开.sln后没有报错;

2)复制其他版本的msc.vcxproj文件,也解决了问题。具体可见http://blog.sciencenet.cn/blog-858128-1234695.html

打开项目后,函数入口在rnx2rtkp.c的main(),后续改代码也在这里改。选择Debug模式,运行,有报错,按照https://blog.csdn.net/weixin_44126610/article/details/105009973解决即可。

测试:选择上述数据集中的.sp3 .clk .obs .18p .conf(用rtkpost测试时保存的配置文件)复制到msc文件里,项目-->msc属性-->调试 导入命令行参数:

用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译)_第18张图片

运行后,会生成结果文件.pos

使用crx2rnx.exe

有时候需要对文件进行解压,例如rinex3标准.crx---->.rnx;rinex2标准.xxd---->.xxo。可以使用rtklib\bin\crx2rnx.exe进行处理

1)“win+R” 输入cmd,打开命令行,cd进入.exe所在路径

2)对单个文件,需要逐一运行:

crx2rnx KRGG00ATF_R_20200100000_01D_30S_MO.CRX
crx2rnx iqqe0640.12d

3)如需批量运行:

for %a in (*CRX) do crx2rnx.exe %a

或手写.bat脚本执行:

echo 
for %%i in (*CRX) do crx2rnx.exe %%i
pause on

存储为.bat文件,放在.exe同一路径下,点开.bat运行即可

.bat批量化处理rnx2rtkp.exe

在bat文件中输入多个命令行参数可以批量化运行RTKLIB,不需要额外修改代码。

bat文件放在D:\softwork\RTKLIB\app\rnx2rtkp\msc\Debug路径下,内容如下:

rnx2rtkp.exe 2>filter.txt -k D:\softwork\RTKLIB\app\rnx2rtkp\msc\AR\URUM_2020010.conf -o D:\softwork\RTKLIB\app\rnx2rtkp\msc\AR\URUM_2020010_guo.pos -p 8 -x 2 -y 2 D:\softwork\RTKLIB\app\rnx2rtkp\msc\multi_freq_data\URUM00CHN_R_20200100000_01D_30S_MO.rnx D:\softwork\RTKLIB\app\rnx2rtkp\msc\multi_freq_data\brdm0100.20p D:\softwork\RTKLIB\app\rnx2rtkp\msc\multi_freq_data\GBM0MGXRAP_20200100000_01D_05M_ORB.SP3 D:\softwork\RTKLIB\app\rnx2rtkp\msc\multi_freq_data\GBM0MGXRAP_20200100000_01D_30S_CLK.CLK
pause

双击bat文件即可运行,这里注意文件路径是相对于bat所在路径的,与调试时在RTKLIB中输入的路径不同。

其中2>filter.txt是stderr流,用于输出错误信息到filter.txt中。

例如,我想输出状态向量x,则在filter_函数后面加上

fprintf(stderr, "x before update is %5d *1:\n", n);
matfprint(x, n, 1, 15, 3, stderr);

RTKLIB中调用LAPACK库

LAPACK库是由美国国家科学基金等资助开发的著名公开软件,用Fortran语言编写,具有强大的矩阵运算功能,是matlab的底层函数库。

RTKLIB本身支持LAPACK库,但相关资料很少,不太清楚怎么使用,故重新调用LAPACK库。

步骤参考了该博文:(15条消息) VS的C++项目添加LAPACK库简便方法(注:64位+32位,且不用自己编译库)_SimulatorC的博客-CSDN博客,但有些地方不太一样,在此加以修正:

1.下载博主提供的安装文件包,其中包括了所有头文件和.lib文件,以及一部分.dll文件;

2.安装MinGW,但.dll所在路径为‘C:\MinGW\bin’;

3.在VS中添加目录;设置环境变量;

4.在rtklib.h中#define LAPACK      1,即可使用调用了LAPACK库的矩阵运算函数;

5.编译能通过,但运行提示缺少.dll文件,根据提示将所需.dll文件复制到‘C:\Windows\SysWOW64’下即可。

你可能感兴趣的:(用RTKLIB中的rtkpost进行ppp和spp定位(附用CUI rnx2rtkp 编译))