第一次接触RTK_LIB时,我被它强大的GNSS数据处理能力吸引,但也被复杂的配置过程难住过。这里分享我从零开始的经验,帮你避开那些新手容易踩的坑。
RTK_LIB是日本东京海洋大学开发的开源GNSS数据处理库,支持实时和事后精密定位。最新版本可以在GitHub上找到,建议直接下载打包好的Windows版本(rtklib_2.4.3_b34)。如果你需要自定义功能,也可以下载源码自行编译。我试过用Visual Studio 2019编译源码,需要特别注意:
编译完成后,在bin目录下你会看到一堆exe文件,其中rtkget.exe就是我们后面要重点用到的数据下载工具。建议把整个bin目录添加到系统PATH环境变量,这样在任何位置都能直接调用这些工具。
观测文件(OBS)记录了接收机实际测量到的原始数据,就像厨师的食材一样重要。常见的扩展名有.obs、.20o等。我刚开始总搞不懂文件名里那些神秘代码,后来发现规律其实很简单:
文件内容用文本编辑器打开可能像天书,但其实结构很清晰。以RINEX格式为例:
code复制> 2022 01 01 00 00 0.0000000 0 31
G01 22871578.813 122495214.31218 -266.123
G02 20142876.245 102938475.38475 154.672
第一行是时间戳和卫星数量,后面每行对应一颗卫星的观测值。不同系统(GPS/GLONASS等)的观测值会用字母前缀区分。
广播星历(NAV)和精密星历(SP3)决定了定位精度。广播星历实时更新但精度一般(米级),精密星历有延迟但能达到厘米级精度。我在处理PPP数据时发现,IGS提供的最终精密星历(IGS)比快速星历(IGR)精度更高,但需要等待约14天。
广播星历文件里每条记录对应一颗卫星的轨道参数:
code复制G01 2022 01 01 00 00 0.0 1.234e-04 0.0e+00 ...
而精密星历则是固定间隔的位置坐标:
code复制* 2022 1 1 0 0 0.00000000
PG01 12345.678901 23456.789012 34567.890123
rtkget是RTK_LIB自带的下载工具,但第一次用可能会被各种选项搞晕。这是我的配置心得:
code复制cddis.nasa.gov/gnss/data/daily
igs.ign.fr/pub/igs/data
实测发现,NASA的CDDIS服务器在国内访问较慢,可以优先尝试IGN或WHU的镜像站。
观测文件下载:
精密星历下载技巧:
遇到Hatanaka压缩格式(.d或.crx)时,可以用RNXCMP工具解压。我写了个批处理脚本自动处理:
bash复制for %%f in (*.crx) do crx2rnx %%f
不同机构的数据文件命名规则各异,但基本都包含这些要素:
特别注意RINEX 3.04和4.00的兼容性问题。RTK_LIB 2.4.3对4.0版本支持有限,遇到问题可以先用GFZRNX工具降级:
bash复制gfzrnx -finp myfile.rnx -fout outfile.rnx -vo 3
下载完文件后,我习惯用TEQC做快速质量检查:
bash复制teqc +qc myfile.obs
这会生成一个.report文件,重点关注:
曾经有个项目因为没检查数据质量,导致后期处理时发现关键时段数据缺失,不得不重新安排外业测量。
现在的接收机大多支持GPS/GLONASS/Galileo/北斗多系统。RTK_LIB处理时需要注意:
处理混合数据时,我建议先在rtkpost里查看各系统的卫星分布,确保有足够的共视卫星。有一次处理北极数据时,发现GLONASS卫星的仰角普遍更高,对提高定位精度很有帮助。
GNSS数据处理中常见的时间系统:
我习惯用RTK_LIB自带的convbin工具进行时间转换:
bash复制convbin -t -od 2022-01-01 -oe 2022-01-02 myfile.obs
处理长时间段数据时,可能会遇到内存不足。可以:
记得有一次处理连续7天的30秒采样数据,32位程序直接崩溃,换成64位后就顺利完成了。