rtklib开源程序包中,除了包含供调用的c/c++库文件,如.h文件和.c文件等,还包含了相关算法的VS项目实现,常用的有三个:rnx2rtkp、pos2kml和convbin。(最新版rtklib下载网址:https://github.com/tomojitakasu/RTKLIB/tree/rtklib_2.4.3)
笔者刚刚接触rtklib,想用它进行定位解算,所以对rnx2rtkp项目进行了调试,并初步实现伪距单点定位。由于网上这部分教程较少,所以在此记录下调试过程,和大家分享。本人初学,难免出错,大家见谅,也请指正。
下载rtklib2.4.3程序包后,在app文件下有一个rnx2rtkp文件夹,该项目即位于此(解决方案.sln文件等在msc文件夹里)。虽然有rnx2rtkp项目完整的visual studio解决方案文档,但是我们下载到自己的电脑后还需要进行一些修改才能使用。
进入msc文件夹,使用visual studio 2012打开msc.sln文件,并进行单向升级(VS自动提示,确定即可)。会发现有很多错误,看了一下这么多错误都是因为一个原因:rtklib.h头文件未能引入导致的。
解决方法:
在rnx2rtkp.c中的include "rtklib.h"
改为 #include "../../src/rtklib.h"
。此处用到了相对路径表示方法。注意rtklib2.4.3/src文件夹中的.c和.h文件不要删改,也不要移动。
然后生成解决方案,进行编译后出现错误(error LNK1120: 1 个无法解析的外部命令 和error LNK2019: 无法解析的外部符号 __imp__timeGetTime@0,该符号在函数 _tickget 中被引用),查阅博客https://www.cnblogs.com/DKSoft/p/4677381.html,发现是缺少依赖库winmm.lib
。解决方法是,【菜单】项目->属性-> 配置属性 添加附加库[链接器->输入->附加依赖库] 添加winmm.lib;。
点击本地Windows调试器运行后,提示错误“无法启动程序,系统找不到指定的文件”。这时检查三个目录是否正确。右键项目,进入属性,这三者分别是
(1)配置属性->常规,其中的输出目录;
(2)配置属性->常规,其中的目标文件名;
(3)配置属性->链接器->常规,其中的输出文件项。
我这三者所填的分别是:(1)$(SolutionDir)$(Configuration)\
;(2)rnx2rtkp
;(3)$(OutDir)rnx2rtkp.exe
。具体意义可以双击进入点击宏查找到相应意义。
特别需要注意的是:(2)中的目标文件名和(3)中的输出文件项的名称要一致,我这里都用的rnx2rtkp,所以生成的执行文件也就是rnx2rtkp.exe,也可以用其他名称(默认情况下是项目的名称)。猜想两者一个表示编译后输出exe,一个应该是指示程序调试时怎么找这个exe。至此,编译通过,就可测试了。
进入…\RTKLIB2.4.3\test\data\rinex文件夹,复制其中的07590920.05n和07590920.05o两个文件,粘贴到这个项目的文件夹下,即…\RTKLIB2.4.3\app\rnx2rtkp\msc文件夹。复制该项目的gcc文件夹下的opts1.conf文件,粘贴到msc文件夹下(同上步.o和.n文件粘贴步骤),结果如下图中的1、2、3。
进入VS,【菜单】项目 -> 属性页 -> 配置属性 -> 调试,在[命令参数]里填上-k opts1.conf -o mypos.txt 07590920.05o 07590920.05n
。然后点击本地Windows调试器运行,运行结果自动导出到mypos.txt,如上图里的4文件。
mypos.txt文件:
除了上述调用方法,还可以在命令窗口中调用rnx2rtkp.exe。方法:进入…\RTKLIB2.4.3\app\rnx2rtkp\msc文件夹,按住shift键同时点击鼠标右键后,点击“在此处打开命令窗口(W)”,在命令行输入rnx2rtkp.exe -k opts1.conf -o mypos.txt 07590920.05o 07590920.05n。可以实现同样的结果。
同样,在…\RTKLIB2.4.3\app\rnx2rtkp\msc文件夹下,新建一个记事本txt文件(如“单文件处理.txt” ),并让txt文件内容为rnx2rtkp.exe -k opts1.conf -o mypos.txt 07590920.05o 07590920.05n。然后将.txt拓展名改为.bat文件。双击.bat文件,同样可以实现该结果。
备注:法二的实现需要保证rnx2rtkp.exe 、 O文件 、 N文件、 .conf文件在一个文件夹内(法三需要加上.bat文件)。无其他要求。.conf文件和界面程序rtkpost.exe的options的设置是完全对应的,可以将.conf文件导入到rtkpost程序,也可以从rtkpost中导出.conf文件。所以rnx2rtkp可以实现rtkpost几乎所有功能,但是前者更加可调试,所以非常方便我们对其中代码或算法进行一些修改,再来进行实验验证。关于如何输入参数,可以查看rnx2rtkp.c中的help变量,如-p表示定位模式,我的例子后面跟着的是0,也就是伪距单点定位。