学习rtklib(一)

因为在最近的相对定位程序中遇到了瓶颈(卫星的起降,卫星信号的失锁等等),无法突破,因此想要参考一下开源代码,就选择了rtklib。
rtklib是导航中最基本的一个库。其中包含了几乎所有的导航工程的源代码。所以我想要学习一下它的源码,为了防止忘记学过的东西(rtklib太多了,代码又长又难看),在这里做一个备忘,希望大家可以指出其中的错误之处。首先先学习读取文件卫星星历和观测值文件的函数。这些函数在rtklib中的rinex.c文件中,涉及到的一些结构体和数学运算的函数存在了rtklib.h和rtkcmn.c文件中。从文件名就可以看出来,rtklib是用C语言而非C++进行编写的,这刷新了我对C语言的认识。看来C语言还有很多我不知道的用法啊…
在rinex.c文件的开头,利用宏定义了几个常量,如果这里面有不知道含义的宏,可以到rtklib.h中查询。这些结构体在这里先不介绍,等到下面介绍每个函数的时候在说明结构体的用处。
下面来介绍一下各个函数的用处(我之前已经看过一遍,但是两周没看发现忘得差不多了,所以就当复习一下了)。

1.setstr函数

static void setstr(char *dst, const char *src, int n)

这个函数是用来截取src中长度为n的一个子串复制给dst,同时将dst最后的字符设置为’/0’,并且将dst中的空格全部设置为’/0’。这是一个辅助函数。

2.adjweek函数

static gtime_t adjweek(gtime_t t, gtime_t t0)

这个函数的返回值和参数都是gtime_t类型的,在rtklib.h文件中查看gtime_t类型,可以看到这个类型是含有一个time_t类型数据和一个double类型的数据。time_t是从一个时间点(一般是1970年1月1日0时0分0秒)到某个时间的秒数,但是是长整型的数据。double类型的那个数据是来表示不足一秒的小数部分。也就是说,time_t类型合起来表示从1970年1月1日0时0分0秒到某个时刻的准确时间。
下面再来说这个函数,这个函数是用来调整t与t0的周数在同一周,至于为什么这样,在下面的其它函数中可以看到。

3.adjday函数

static gtime_t adjday(gtime_t t, gtime_t t0)

与上述的adjweek函数相同的原理,只不过是调整t,让t与t0在同一天。

4.timestr_rnx函数

static void timestr_rnx(char *str)

获取系统的时间,将时间结果按照yyyymmdd hhmmss UTC的格式存入str字符串中。

5.sat2code函数

static int sat2code(int sat, char *code)

这个函数是将各种卫星(GPS,BEIDOU,GALILEO,GLONASS等卫星)的卫星种类和prn号一起转化为特定的字符串,以供后续使用。这个函数中主要就有一个函数。

extern int satsys(int sat, int *prn)

这个函数位于rtkcmn.c中,输入的卫星总的序号,输出的是卫星的种类和在这个种类中的卫星的prn号。这样可能使大家有些迷惑,举个例子吧。比如sat的值等于24,就会直接判断为是GPS种类的卫星,从而得到的返回值int就是SYS_GPS(一个在rtklib.h文件中定义的宏),prn中存的就是GPS的卫星号;在比如sat的值等于36,那么就会判断是GALILEO卫星,整个函数的返回值就是SYS_GAL,prn中存的就是GALILEO的卫星号。大家或许会有疑问,这个sat是怎么来的,下面的函数会不经意的算出sat。
回头看主函数,经过satsys得到卫星的种类和prn号之后,就会把卫星的prn信息以指定的格式写在code中。

6.init_sta函数

static void init_sta(sta_t *sta)

初始化测站信息函数,也就是将测站的各个信息设置为0。

总结

上面的这几个函数就是比较基础的函数,接下来的函数就进入真正的读取RINEX格式的函数。这些函数既包括了RINEX 2版本,有包括了RINEX 3版本。但是由于我用的是RINEX 3版本,就选择性的略过了RINEX 2版本的一些函数。总之,学习rtklib是一个比较繁琐的过程,但是也很有用处。我们不仅要会使用,还要会自己编写。任重而道远,加油ヾ(◍°∇°◍)ノ゙

  • 23
    点赞
  • 123
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
RTKLib是一种基于GNSS(全球导航卫星系统)的实时运动定位库。它提供了一系列的工具和算法,用于处理GNSS观测数据,进行精确的实时或者后处理定位。下面是一个关于RTKLib学习笔记的概述: 1. RTKLib简介: - RTKLib是由Tomoji Takasu开发的开源软件库,用于实时运动定位和后处理。 - 它支持多种GNSS系统,包括GPS、GLONASS、Galileo、BeiDou等。 - RTKLib提供了一系列的功能模块,包括数据处理、定位算法和可视化工具等。 2. RTKLib的安装: - RTKLib可以从官方网站(http://www.rtklib.com)下载最新的源代码。 - 根据操作系统选择合适的编译工具(如GCC、MinGW等)进行编译。 - 编译完成后,可以得到可执行文件和相关的库文件。 3. RTKLib的数据处理: - RTKLib支持多种数据格式,包括RINEX、SP3、Nav等。 - 使用RTKConv工具可以将原始观测数据转换为RTKLib可识别的格式。 - 使用RTKPLOT工具可以对观测数据进行可视化分析。 4. RTKLib的定位算法: - RTKLib提供了多种定位算法,包括单点定位、差分定位和RTK(实时动态定位)等。 - 单点定位方法适用于无差分数据,可以得到相对较低的定位精度。 - 差分定位方法通过使用基站观测数据进行差分运算,提高了定位精度。 - RTK定位方法使用基站和移动站的观测数据,实现了高精度的实时定位。 5. RTKLib的应用: - RTKLib广泛应用于航空、测绘、农业、机器人等领域,用于精确的定位和导航。 - 它可以用于无人机、自动驾驶、精准农业等应用场景。 - RTKLib还支持多种操作系统,包括Windows、Linux和Android等。 以上是关于RTKLib学习笔记的基本概述。希望对你的学习有所帮助!如果你有更具体的问题,可以继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值