目录
写在前面,可执行的vs程序在文章最后,可以直接下载后运行。
默认使用windows电脑,默认是64位电脑系统,不一样也影响不大。
Vs下载与安装
Vs是啥?Vs就是一个让你的代码能够运行的工具,其余自行百度;我个人用的vs 2017,其他版本也可随意安装,可能会有一些不一样的地方。
官网下载 可能需要简单注册登录。
Vs有社区免费版本,具体安装可参考。安装很简单。
RTKLIB代码下载
rtklib是啥?RTKLIB is an open source program package for standard and precise positioning with GNSS (global navigation satellite system). RTKLIB consists of a portable program library and several APs (application programs) utilizing the library.
简单来说就是高须知二写的一个GNSS工具箱,免除了科研人员限于基础代码开发的困境,让大家更专注于学术而不是基础库的开发。官网地址,其实网上挺多如何使用rtklib的blog,比如(VS2012编译RTKLIB—GNSS定位开源库,利用C++ builder 调试RTKLIB简单介绍),但我还是准本以初学者的视觉介绍一遍。
RTKLIB官网显示,在2.4.2 p13版本后,开源代码均托管于github上。就是说我把代码放在github上管理,可以跟踪代码修改的历史以及管理大家的merge需求等。我们一般使用git下载github上的代码,基本上所有的公司也使用git来管理项目代码,所以可以简单学习一下git的使用。比如百度搜索 “git使用”。在此不在赘述。
点击上图红框中RTKLIB最新源代码,并在下图中选择第二种,即可下载到rtklib源码。国内访问github有时会抽风,多刷新几次就可以进去了。如果学习了git,可以选择第一种,使用git进行代码clone;
下载并解压后如下:
在vs中编译rtklib
新建项目
打开安装好的vs2017,新建->项目->控制台应用 并将名称设置为rtklib
添加代码
选择左侧的解决方案资源管理器,选定头文件->右键->添加->现有项。如果左侧或者右侧没有解决方案管理器,自行百度如何打开vs解决方案管理器。
然后选中源码文件夹下的rtklib.h,添加进来。
同样选中源文件,选择相同的现有项,将除rtklib.h以及rcv文件夹之外的所有文件添加进来。
选中源文件->右键->添加->新建筛选器,添加一个叫rcv的文件夹,并将源码rcv文件夹下的所有文件添加到这个筛选器下。完成后目录就是如下:
其他项目配置
虽然已经添加了代码进入项目,但是还是找不到文件,需要告诉项目代码在哪。
选中rtklib->右键选 属性->在弹出的对话框里找到c/c++下 常规,将代码src的目录填到附加包含目录中,如下
选中源文件->右键选择添加现有项,在 将源代码\app\consapp\rnx2rtkp\rnx2rtkp.c文件添加进来,这个文件包含了main函数入口。并将rtklib.cpp删掉,这个是vs自动生成的程序入口,不需要。
选择工具栏中 生成->生成解决方案,就开始编译代码了。然后就显示有错误,主要如下,其他错误都可以忽略掉。
点击“右键项目-属性-常规”,将SDL检查改为否。在项目属性->c/c++->预处理器->预处理器定义中添加
_CRT_SECURE_NO_WARNINGS
_WINSOCK_DEPRECATED_NO_WARNINGS
ENAGLO
在配置属性 -> 链接器 -> 输入 -> 附加依赖项里添加 【winmm.lib】和 【ws2_32.lib】
选择工具栏中 生成->生成解决方案,就可以编译成功了。就可以看到我们编译的exe已经存在了。
也有其他的一个相似的编译DLL的文档,前文已经贴了地址(VS2012编译RTKLIB—GNSS定位开源库),可以和我上面的一块看。区别是我编译的可执行程序。
运行程序并得到结果
打开doc目录下的manual_2.4.2.pdf,找到第96页,如下图中我红框标注的,解释了如何调用rnx2rtkp。第二个例子写的是Single Point Positioning,即SPP,单点定位。
因为我们用的是windows,所以我的电脑的可执行文件的绝对路径是在
D:\source\RTKLIB-rtklib_2.4.3\rtklib\Debug\rtklib.exe
这里的rtklib.exe与说明书中的rnx2rtkp是一样的。只是因为我们把项目名称叫作了rtklib。
选中Debug文件夹,并按住shift,按下鼠标右键->在此处打开Powershell窗口,实质就是打开命令窗口,并cd到当前文件夹。不明白的请自行百度 windows命令窗口。输入上图中的命令,回车,发现竟然有报错。
代码bug
该报错好像在linux上我没遇到过,也比较简单,就是有一些变量没有初始化。找到pntpos.c这个文件打开,将252行修改为如下:
double r,freq,dion=0.0,dtrp=0.0,vmeas,vion=0.0,vtrp=0.0,rr[3],pos[3],dtr,e[3],P;
即如下边截图中所示。
重新生成,即工具栏 生成->生成解决方案。
rtklib.exe就会重新生成。
再回到命令窗口,按向上箭头按键,就会出来上次的命令,回车就可正常运行。运行如下:会输出红框内的内容,从显示了正在处理(processing)以及时间(2005/04/02 00:50:30),以及运行显示的定位质量(Q=5,就代表是单点解)。
我将完整命令贴在下边,注意各项之间有空格。
.\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
也可以在vs中进行调试,右键项目选择属性,找到调试中的命令参数,输出上面的命令,去掉.\rtklib.exe可执行程序。
按F5即可运行,运行如下:
然后在 我电脑的绝对路径下就可以找到定位结果输出文件了。
D:\source\RTKLIB-rtklib_2.4.3\rtklib\out.pos
把整理好的放在网盘上了,直接解压,找到RTKLIB-rtklib_2.4.3\rtklib\rtklib.sln,直接打开这个文件就行,打开应该就可以正常运行。
代码在 GNSS和自动驾驶 公众号回复 rtklib , 获取下载链接。
至此基本可以在vs上正常跑出结果,如果有问题请私信或者留言。具体如何分析定位结果,请参考下一节的文章。
公众号
有时会将代码 或者资源放在个人公众号上,有问题,在公众号后台回复,也回答的比较快一些,欢迎关注 GNSS和自动驾驶。