对于新手而言,RTKLIB本身的功能完全能够满足你们的需求;而且最好的参考资料就是RTKLIB MANUAL,介绍的很全,很细,包括怎么使用,每个模块的功能甚至对于代码所用的模型都有介绍;但是对于英文差或者是没有太多GNSS基础的人士来说,无疑Manual并不是一个好的参考资料;我在网上查找RTKLIB相关的资料时,同时也发现了一些科普性质的网页,在此推荐给大家。
一、demo
首先,作者给出了一个demo,教给大家如何使用RTKLIB进行RTK定位,包括配置文件、数据等;
RTKLIB源码和exe下载地址:
RTKLIB: An Open Source Program Package for GNSS Positioning
其中最新版本的源码在GITHUB上面下载:
Tomoji Takasu
RTKLIB手册/manual:
RTKLIB: Documents
数据集和操作指南:
RTKLIB: Tutorial and Demonstration for RTK
网络中对以上数据如何使用的中文介绍:RTKlib使用介绍
二、RTK/RTD/PPP/PPK定位方式介绍:
RTD:伪距差分
RTK:载波差分
PPP/Precise Point Positioning:精密单点定位,只需一个接收机;译为精密单点定位,属于单点定位也叫绝对定位,精密单点定位是指利用载波相位观测值以及由IGS等组织提供的高精度的卫星星历及卫星钟差来进行高精度单点定位的方法。
PPK/Post Processed Kinematic:事后定位;是一种与RTK相对应的定位技术,这是一种利用载波相位观测值进行事后处理的动态相对定位技术,而RTK是实时的。
WAAS/Wide Area Augmentation System,译为广域增强系统,是由美国运输部(DOT)和联邦航空管理局(FAA)联合开发的一个系统,主要应用在航空领域,如飞机的GPS导航等。
SBAS/Satellite-Based Augmentation System,中文意思是广域差分增强系统,如果不知道这是什么意思,那么说星基增强系统相信大家都知道。广域差分增强系统也就是星基增强系统。
关于星基/地基增强系统可以通过产品来了解:
1、中国精度/Atlas atlas
2、全球精度
3、天音计划
比较好的知识网站:
三、如何利用RTKNAVI实现PPP/RTK/RTD定位:
关于RTKNAVI,INPUT中,输入数据类型做一个介绍,如下:
Rover Type里面有 :
Serial(串口),设备通过串口连到电脑;
TCP Client流动站数据吐给RTKLIB原始观测值;走的是TCP协议
TCP SERVER流动站数据是由RTKLIB去拿;走的是TCP协议
NTRIP Client和TCP Client类似,不过走的是Ntrip协议
File,用于没有流动数据站,就一些原始观测数据集,是放在文本里的,那就选这种。
RTKLNAVI使用教程
四、如何利用RTKPOST实现PPP/RTK/RTD定位:
1、采用BIN的方式,基于RTKLIB目前的库函数进行定位解算;
2、根据RTKLIB的源码,进行修改,完善模型,进行任意系统、频点的定制化解算;
RTKLIB单点定位处理流程之一(postpos/后处理)
RTKLIB源码——如何在VS2017中配置、调试
在VS配置RTKLIB中,常见错误汇总:
(1)C/C++下预处理器 里面我们添加了
(配置属性 ->C/C++ -> 预处理器-> 预处理器定义-> 编辑)
_CRT_SECURE_NO_WARNINGS
_WINSOCK_DEPRECATED_NO_WARNINGS
(2)C/C++下的附加包含目录 里面我们添加了
(配置属性 ->C/C++ 常规-> 附加包含目录-> 编辑)
【.\src】
.\ 表示项目文件所在目录之下的目录。
..\ 表示项目文件所在目录向上一级目录下的目录。
..\..\ 表示项目文件所在目录向上二级目录之下的目录。
都是针对项目文件所在目录而言,用于定位其它文件的路径位置。
(3)连接器下的附加依赖项 里面我们添加了
(配置属性 -> 链接器 -> 输入 -> 附加依赖项)
winmm.lib
ws2_32.lib
补充:
通过上面的设置,我们可以发现,我们大多操作的是[C/C++]下的配置选项,而同样,在[VC++]配置选项下,
同样有[包含目录],作用几乎与[C/C++]下面的[附加包含目录]一样,我们首先了解【包含目录、库目录、附加包含目录、附加库目录、附加依赖项区别】
VC++目录:
包含目录:寻找#include<xxxx.h>中的xxxx.h的搜索目录
库目录:寻找.lib文件的搜索目录
C/C++:
常规->附加包含目录:寻找#include<xxxx.h>中的xxxx.h的搜索目录(每一项对应一个文件夹XXXX,文件夹中包含了编译时所需的头文件,使用时直接#include<XXXX>即可)
链接器:
常规->附加库目录:寻找.lib文件的搜索目录
输入->附加依赖项:lib库(C++的库会把函数、类的声明放在*.h中,实现放在*.cpp或*.cc中。编译之后,*.cpp,*.cc,*.c会被打包成一个.lib文件,这样可以保护源代码)
故,包含目录和附加包含目录(库目录和附加库目录)的区别:
包含目录:修改了系统的include宏的值,是全局的;
附加包含目录:用于当前项目,对其他项目没有影响。
(库目录和附加库目录的区别同上)
进而可知包含目录和附加包含目录(库目录和附加库目录)的区别主要在于全局还是当前,那么当需要对某工程添加这些目录时,通常情况下,都是在附加包含目录和附加库目录中添加的。
补充这些是因为,笔者刚开始编译RTKLIB库时,头文件的包含路径都是添加在[VC++/包含目录]下的,当时惊奇的发现,即使笔者一开始在[VC++/包含目录]下包含的是“绝对路径”,工程也是可以编译通过,并可以移植到任何地方的。但了解到以上以后,建议我们一般使用C/C++和Linker下面的设置,而一般不建议使用VC++下面的设置。 参考:VS2012编译RTKLIB——GNSS定位开源库
五、数据/产品下载网址:
1、中国卫星导航系统管理办公室测试评估研究中心
2、香港大地测量服务
3、rtkexplorer
4、怎样才能下载到精密星历和 gnss 的观测数据?
5、国内外IGS数据及产品下载网站
6、GPS广播星历和精密星历的下载
参考:
详解RTK,RTD,SBAS,WAAS,PPP,PPK,广域差分等技术之间的关系与区别
【GNSS】星基与地基增强系统