目录
rtkpost
ppp
spp
VS2019编译rnx2rtkp
使用crx2rnx.exe
.bat批量化处理rnx2rtkp.exe
RTKLIB中调用LAPACK库
rtkpost是一个事后处理软件,可对采集到的数据进行后期处理定位;而rtknavi则是实时定位的软件
数据集:链接:https://pan.baidu.com/s/139B0pKn0PIM8qwX2h898Og
提取码:j0nr
obs选用rover_trimble.obs,这个数据所用的接收机比rover_ublox.obs要好一点
RINEX OBS:输入观测数据.obs;
RINEX OBS: Base Station:做相对定位时导入基站信息(此处不需要);
.xxp是多系统广播星历(.xxn是gps的广播星历,内容为卫星位置和卫星广播钟差改正系数),.sp3是精密星历,.clk是精密钟差,.pos是输出定位结果
obs是动态数据,故选PPP Kinematic模式;如果是静态数据就选PPP Static;
单频数据的话选L1;双频L1+L2;三频L1+L2+L5;
Ionosphere Correction:不提供电离层数据就选Broadcast;Iono-Free LC无电离层组合模型;est-stec非组合模型;
Clock:提供了精密钟差选Precise;没有就Broadcast
如果已知有哪些卫星的数据就选哪些,不清楚的话就都选上;
导入天线改正文件.atx;电离层数据.I;差分码偏差.DCB文件
对DCB改正的理解:卫星和接收机端都有一些硬件延迟,这些误差会被钟差吸收。简单来说,钟差只与接收机和卫星有关,但由于它又吸收了硬件延迟,往深究了还与频点有关,在做ppp时,DCB修正必须考虑。
配置好以后点击“execute”,解算完成后再点"plot"
解算得到的动态ppp定位结果,点1,再点2,拉入reference.pos文件,即grountruth
再点1-2,即显示解算和真实轨迹之间的差值,选择Gnd Trk或者Position或者其他模式查看误差情况。
动态ppp精度大概在2m左右,飞点严重。
其他一样,在setting1时有改动
不使用精密星历,精密钟差和电离层误差
解算结果:
误差在5-10m,飞点也更严重
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属性-->调试 导入命令行参数:
运行后,会生成结果文件.pos
有时候需要对文件进行解压,例如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文件中输入多个命令行参数可以批量化运行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);
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’下即可。