RTKLIB 中 convbin 模块的使用

RTKLIB 是著名的 GNSS 数据处理软件,提供标准单点定位(SPP)和精密单点定位(PPP)等功能。它由东京海洋大学的 Tomoji Takasu 编写,并开源在 Github 网站上。但本文的关注点并不是该程序如何使用,只是介绍其中用于数据转换的一个小模块:convbin。

convbin 是包含在 RTKLIB 中的一个命令行程序,它可以将 RTCM2、RTCM3、u-blox 或 BINEX 等格式的 GNSS 数据转换到 RINEX 2.11。你可以使用该模块完成从原始数据文件到 RINEX 格式的转换。

安装与简介

对于 Windows 操作系统,RTKLIB 提供了预编译好的可执行程序,你可以直接下载并执行它们。对于 UNIX/Linux 操作系统,则需要下载源代码在本地编译来获得可用的 RTKLIB 软件。作为 RTKLIB 的一部分,convbin 随 RTKLIB 一同发布。但该程序并不依赖其他程序或模块,因此你也可以单独下载使用它。convbin 目前支持的格式或协议有:

  • RTCM 2/3;
  • NovAtel OEMV/4,OEMStar;
  • NovAtel OEM3;
  • u-blox LEA-4T/5T/6T;
  • NovAtel Superstar II;
  • Hemisphere;
  • SkyTraq S1315F;
  • GW10;
  • Javad;
  • NVS;
  • BINEX;
  • Trimble RT17;
  • RINEX。

参数说明

上文已经说过,convbin 是一个命令行程序,它的使用方式为:

1
$  convbin [options] <file>

这里的 <file> 为输入的文件,[options] 为参数选项。为保持行文流畅,只列出最常用的参数选项,完整的参数选项请参考文末的附表:

  • -ts <y/m/d h:m:s>:输出文件的开始时刻,默认为开始记录时刻;
  • -te <y/m/d h:m:s>:输出文件的结束时刻,默认为结束记录时刻;
  • -tr <y/m/d h:m:s>:RTCM 数据的近似观测时刻;
  • -span <span>:观测时段长(h),默认为所有时长;
  • -r <format>:输入文件格式,多数时候 convbin 能根据扩展名识别文件类型,但某些时候需要指定;
  • -c <station>:使用该参数设定的站名构造输出的 RINEX 文件名;
  • -hm <marker>:测量标志名;
  • -ho <observer/agency>:观测者与观测机构,以 / 分隔;
  • -hr <rec_id/type/version>:接收机编号、类型与版本,以 / 分隔;
  • -ha <antenna_id/type>:天线编号与天线类型,以 / 分隔;
  • -hp <position>:站点概略坐标(XYZ),以 / 分隔;
  • -hd <delta_H/E/N>:站点天线偏移量(HEN),以 / 分隔;
  • -v <version>:RINEX 版本号,默认为 RINEX 2.11;
  • -d <directory>:数据的输出文件夹,默认为输入数据所在的文件夹。

使用示例

处理单个文件

convbin 最常见的使用场景就是将某个 RTCM 文件转换为 RINEX 格式。对于单个输入文件,可以如下命令:

1
$ convbin rtcm/demo-180311-01.rtcm3 -tr 2018/03/11 1:0:0 -hm DEMO -d rinex/

以上命令将 rtcm/ 文件夹内的 demo-180311-01.rtcm3 转换为 RINEX 格式。需注意的是:此处必须使用 -tr 参数来指定数据的近似观测时刻,否则生成的文件中观测时刻都是错误的;并且,由于 RTCM 数据不包含 RINEX 文件头中的元信息,因此这里使用 -hm 指定观测站名。执行完毕后,你可以在 rinex/ 文件夹内找到输出观测文件:demo-180311-01.obs。

使用 RINEX 命名风格

你已经看到,上一个命令输出的文件并非 RINEX 格式的命名风格,这一点可能让人不快。实际上,你可以使用 -c 参数来指定站点名,这样程序就可以使用它来构造正确的 RINEX 输出文件名了。示例:

1
$ convbin rtcm/demo-180311-01.rtcm3 -tr 2018/03/11 1:0:0 -hm DEMO -d rinex/ -c DEMO

执行该命令后,将在 rinex/ 目录内找到输出文件 DEMO0700.18O,这里的年积日是根据输入的近似观测时间来计算出来的。

处理时切割

有时候 RTCM 文件中包含的数据很多,而我们只需要其中的一段。你可以使用 convbin 指定输出数据的开始和结束观测时刻,实现数据转换时的时间切割。示例:

1
$ convbin rtcm/demo-180217-01.rtcm3 -tr 2018/02/17 1:0:0 -ts 2018/02/17 1:0:0 -te 2018/02/17 1:30:0 -hm DEMO -d rinex/

在这个命令中,使用 -ts-te 参数,以 “年/月/日 时:分:秒” 的形式指定输出数据的开始和结束时刻。执行完成后,得到文件 DEMO0480.18O。

处理时合并

前面的使用方式都只能处理一个文件,但 convbin 亦支持在数据转换的同时进行文件合并。对于大量的数据,你可以这样将输出数据拼接在一起:

1
$ convbin rtcm/demo-180217-*.rtcm3 -tr 2018/02/17 0:0:0 -hm DEMO -d rinex/ -c DEMO -scan

这里的输入文件是一个通配符,然后使用 -scan 参数告诉程序按照这个规则查找所有匹配的文件名作为输入。因此这个命令可以处理 DEMO 站于 2018 年 2 月 17 日观测的所有数据。执行完成后,将得到 DEMO0480.18O 等。

元信息指定

以上所有的命令生成的 RINEX 数据,其文件头中都没有观测者、观测机构等信息。这可以说是一种缺陷,因为完善的此类信息更有利于处理和使用。为了后续过程的便利,你可以在转换时将接收机等信息一并写入到输出文件内。示例:

1
$ convbin rtcm/demo-180217-01.rtcm3 -tr 2018/02/17 1:0:0 -hm DEMO -hr 1234567/TPS NETG3/1.00 -ha 7654321/TRM29659.00      GSI -d rinex/

在这个命令中,分别使用 -hr-ha 参数来指定输入数据的接收机和天线的信息。等待命令运行完后,将得到输出文件 DEMO0480.18O。

完整的参数表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
-ts <y/m/d h:m:s>          # 开始时刻,默认为开始记录时刻
-te <y/m/d h:m:s> # 结束时刻,默认为结束记录时刻
-tr <y/m/d h:m:s> # RTCM 数据的近似观测时刻
-ti <interval> # 观测文件采样间隔 (s),默认为原始采样间隔
-span <span> # 观测时段长 (h)。默认为所有时长
-r <format> # 输入文件格式,该项的可选参数有:
rtcm2 # RTCM 2
rtcm3 # RTCM 3
nov # NovAtel OEMV/4/6,OEMStar
oem3 # NovAtel OEM3
ubx # ublox LEA-4T/5T/6T
ss2 # NovAtel Superstar II
hemis # Hemisphere Eclipse/Crescent
stq # SkyTraq S1315F
javad # Javad
nvs # NVS NV08C BINR
binex # BINEX
rt17 # Trimble RT17
rinex # RINEX
-ro <options> # 在输出文件中添加一个接收机注释
-f <freqency> # 观测频段数,默认为 2
-hc <comment> # RINEX 文件中的注释行
-hm <marker> # 测量标志名
-hn <mark_number> # 测量标志号
-ht <mark_type> # 测量标志类型
-ho <observer/agency> # 观测者与观测机构,以 / 分隔
-hr <rec_id/type/version> # 接收机编号、类型与版本,以 / 分隔
-ha <antenna_id/type> # 天线编号与天线类型,以 / 分隔
-hp <position> # 站点概略坐标,以 / 分隔
-hd <delta_H/E/N> # 站点天线偏移量(HEN),以 / 分隔
-v <version> # RINEX 版本号,默认为 RINEX 2.11
-od # 在 RINEX 观测文件中包含多普勒观测量
-os # 在 RINEX 观测文件中包含信噪比信息
-oi # 在 RINEX 导航文件中包含电离层改正数
-ot # 在 RINEX 导航文件中包含时钟改正数
-ol # 在 RINEX 导航文件中包含调秒
-scan # 根据通配符搜索输入文件
-mask [sig[,...]] # 要排除的观测量 (sig={G|R|E|J|S|C}L{1C|1P|1W|...})
-x <satellite> # 要排除的卫星 PRN 号
-y <remove_system> # 要排除的卫星系统,可选:G R E C J I S
-d <directory> # 数据的输出文件夹,默认为输入数据所在文件夹
-c <station> # 使用该参数设定的站名构造输出的 RINEX 文件名
-o <ofile> # 输出的 RINEX 观测文件
-n <nfile> # 输出的 RINEX 导航文件,GPS
-g <gfile> # 输出的 RINEX 导航文件,GLONASS
-h <hfile> # 输出的 RINEX 导航文件,Geostationary
-q <qfile> # 输出的 RINEX 导航文件,QZSS
-l <lfile> # 输出的 RINEX 导航文件,Galileo
-s <sfile> # 输出的 RINEX 导航文件,SBAS
-trace <level> # 输出 trace level

补充

除了使用本文介绍的 convbin 模块外,在 Windows 操作系统下,你还可以使用相同文件夹内的 rtkconv 这个模块。它是一个具有图形用户界面的 GNSS 数据格式转换程序。相比 convbin,其操作方式更友好,但它只能对单个文件进行操作,在处理大量数据时的效率较低。