“塔奇克敲代码”博主的博客(RTKLIB源码解析——单点定位),将单点定位部分整理成函数小卡片,为我理解RTKlib提供了很大的帮助。他在单点定位部分列出了一些疑惑,在此我记录下我对部分疑惑的理解。

文章目录

  • 1.pntpos函数
  • 2.satposs函数
  • 3.estpos函数
  • 4.seleph函数
  • 5.eph2clk函数
  • 6.rescode函数
  • 7.varerr函数

1.pntpos函数

  • 疑惑1: 源码中将 obs[0].time 作为星历选择时间传递给 satposs函数,这样对于每一颗观测卫星,都要使用第一颗观测卫星的数据接收时间作为选择星历的时间标准。是否应该每颗卫星都使用自己的观测时间?或者应该使用每颗卫星自己的信号发射时间?还是说这点差别对选择合适的星历其实没有关系?

RTKlib在取每一个历元的数据时,已经对时间进行了判断,每个历元内观测量的时间间隔小于DTTOL(0.025s),所以各个卫星时间间隔很小,而且Rinex格式中其实每个历元内卫星的测量时间都是一样的,所以直接用obs[0].time是可以的。
至于是否使用卫星信号的发射时间,实际上接收机的测量时间和卫星信号发射时间之差不到0.1s(GPS轨道高2万公里,光速约3x10^8),而星历的有效时间为前后两小时,我觉得没有必要使用卫星信号发射时间,对选择星历几乎无影响。

  • 疑惑2: 这里规定能够执行 raim_fde函数的前提是数目大于等于 6,感觉不是只要大于等于 5就可以了吗?

必须要有2个冗余方程,所以卫星数需要大于等于6。如果只有5颗卫星,raim_fde算法会排除一颗卫星进行位置计算,就只剩下4颗星。4个方程解4个未知数,是没有残差的,因为没有冗余信息算残差。

2.satposs函数

  • 疑惑1: 对于处理过程中的第3步,数据接收时间减去伪距信号传播时间,这里的数据接收时间应该是有接收机得到的,本身应该是包含接收机钟差的,所以最终得到的信号发射时间应该也是不准确的。难道说接收机钟差较小,在此时可以忽略不计?

接收机时间的确是包含钟差的。在计算信号发射时间时,会计算伪距除以光速,得到信号传播时间。而伪距中也包含了接收机钟差,用接收机时间减去传播时间,就把接收机钟差抵消了,所以得到的还是卫星的实际发射时间。

  • 疑惑2: 为什么要进行 7中操作?(7中操作:如果由 6中计算出的钟偏为 0,就再次调用 ephclk函数,将其计算出的卫星钟偏作为最终的结果。)

这是由于使用精密星历可能没有计算出卫星钟差,所以就用广播星历进行计算。正常使用广播星历计算卫星位置,卫星钟差应该是不会为0的。

3.estpos函数

  • 疑惑1: 为什么单点定位中未知数个数NX=7,应该只有4个未知数?

因为RTKlib利用了多系统的卫星进行单点定位,所以除了四个熟知的未知数(3维位置、接收机钟差),还有系统之间的时间偏差,这个量级可达几百纳秒,乘个光速相当于几十米了,所以必须进行估计。因此RTKlib中增加了3个未知数为glo-gps time offset, gal-gps time offset, bds-gps time offset。

4.seleph函数

  • 疑惑1: 为什么 tmax和tmin都要加 1?

我也没明白,但是感觉影响不大。

  • 疑惑2: IODE正常情况下应该都是 >=0的,为什么还要考虑 <0的情况?

IODE<0实际是指不按期号查找星历,直接查找时间最近的星历。

  • 疑惑3: 考虑到星历中卫星的健康状况,这里在选择星历时是否也应该验证 eph.svh==0呢?

应该是需要验证的,不过影响不大,因为后面计算卫星位置时进行了验证,所以svh!=0的卫星不会参与计算位置和速度。

5.eph2clk函数

  • **疑惑1:**看不懂上述处理过程,跟以往资料上都不一样。咋回事?

因为计算卫星钟差时:
t=tsv−δtsvt = t_{sv} - \delta{t_{sv}} t=tsv​−δtsv​
δtsv=a0+a1(t−toc)+a2(t−toc)2\delta{t_{sv}} = a_0+a_1(t-t_{oc})+a_2(t-t_{oc})^2δtsv​=a0​+a1​(t−toc​)+a2​(t−toc​)2
ttt为卫星信号发射时刻, tsvt_{sv}tsv​为发射时刻的卫星测距码相位时间, δtsv\delta{t_{sv}}δtsv​为卫星测距码相位时间偏移,toct_{oc}toc​是星历中的TOC。可以看到上面两个公式中都有ttt,所以RTKlib做了一些迭代计算。不过在北斗和GP的ICD中都提到ttt可以忽略精度,直接用tsvt_{sv}tsv​计算也可以。

6.rescode函数

  • 疑惑1: 关于 5中的去除重复数据的过程,有以下几个看法:
    ① 这样做的前提是相同卫星的重复数据必须相邻出现!
    ② 为什么在这里要进行重复数据检测,在构建 obsd_t结构体时就可以进行这项工作呀?
    ③ 5中当数据重复时,i++后继续下一次循环,这样的话会直接略去后面所重复的数据,这样做就会将两个相邻重复数据都忽略掉,就相当于重复数据都不使用。感觉可以用其中一个的啊!
  1. 由于在解析Rinex数据时,RTKlib依照时间、卫星系统、卫星号、接收机号对测量值进行了排序,所以可以保证相同卫星的重复数据相邻出现;
  2. 确实可以在构建obsd_t结构体时可以做。
  3. 是的,循环本身也在i++,所以会出现两个数据都不用的情况,可以将这个if中的i++去掉,就可以用到第二个。
  • 疑惑2: 11步中,为什么要选择所用信号频组中第一个频率的波长来进行电离层延时修正呢?还有,电离层延时的值发生了改变,那这里的方差是否也需要跟着一起改变呢?

选择L1算,就可以根据电离层延迟频率间的关系得到其他频率的电离层延迟。

  • 疑惑3: 在计算电离/对流层延时时,均传入了 iter>0?opt->ionoopt:IONOOPT_BRDC或 iter>0?opt->tropopt:TROPOPT_SAAS参数,都强调了当 iter==0时,会强制使用 Klobuchar或Saastamoinen模型。这会不会是因为这两种模型都是属于对接收机位置不是非常敏感的类型?

我也没明白

  • 疑惑3: 这里亏秩应该就是欠定方程的意思吧?这里 17中的操作没有看懂,也没能找到相关理论依据

如3.estpos函数中提到的,加入了系统间时间偏差3个未知数glo-gps time offset, gal-gps time offset, bds-gps time offset。如果某个系统的卫星不存在,比如没有北斗卫星,那么bds-gps time offset这个未知数是估计不出来的,所以需要新增一个约束方程,实际像是将这个time offset当成了一个小噪声。

7.varerr函数

  • 疑惑1: 本函数整体到底是为了计算哪一部分的误差,还是没搞清楚。
    IFLC模型的方差为什么可以用 varr*=SQR(3.0)计算?

本函数是计算测量误差,这部分模型可以参考manual P158,公式(E.6.24)。IFLC组合后的噪声会是原来噪声的约3倍,可以参考《GPS原理与接收机设计》P85。

RTKlib单点定位-部分思考相关推荐

  1. [学习笔记]Rtklib单点定位中电离层相关函数

    [学习笔记]Rtklib单点定位中电离层相关函数 1. readtec函数 所在文件:ionex.c 主要参数: * read ionex ionospheric tec grid file * ar ...

  2. rtklib一之带你一步一步读懂rtklib 单点定位代码及算法

    文章目录 1 调用关系图 2 单点定位程序流程 2.1 计算卫星位置和速度 2.2 位置估计 2.2.1 模型线性化和观测值补偿 2.2.1.1 伪距修正 2.2.1.2 电离层修正 2.2.1.3 ...

  3. rtklib单点定位

    前言 单点定位是卫星定位里面最基本的一个定位算法,基本原理是:假如在地上的一个点A,能观测到4颗卫星(卫星位置已知),通过后方交汇原理就可以求出点A的概略位置,精度在m级. 单点定位算法除了能给提供一 ...

  4. rtklib 后处理_RTKLIB 手册解读及代码调试知识总结

    本目录主要是对 RTKLIB Manual中关于GUI的使用.开源代码定位所用的模型以及EKF,严格按照手册的解释,并添加了一些自己的见解:同时,还包括如何在Visual Studio 中进行调试.如 ...

  5. 本科生如何入门GNSS算法(二)- rtklib定位解算过程中的GNSS数据格式以及基本概念

    目录 rtklib单点定位命令分析 rtklib日志​ 定位结果pos文件说明以及定位精度评估 rtklib界面API rtkplot使用 坐标转换 XYZ->BLH 其他的GNSS数据下载 公 ...

  6. 当SBAS遇上rtklib

    文章目录 简介 RTKLib中对SBAS的支持 SBAS卫星作为普通导航卫星 SBAS卫星做星基增强 关于IPP--电离层切入点 插值处理 简介 SBAS是星基增强系统Satellite-Based ...

  7. RTKLIB :postpos(后处理)

    本博客是转载,原文请看下面的连接 感谢:RTKLIB单点定位处理流程之一(postpos/后处理)_wuwuku123的博客-CSDN博客_rtklib伪距单点定位 版本: #define VER_R ...

  8. RTKLIB 开源代码之科普快速入门网络资料产品/数据下载

    对于新手而言,RTKLIB本身的功能完全能够满足你们的需求:而且最好的参考资料就是RTKLIB MANUAL,介绍的很全,很细,包括怎么使用,每个模块的功能甚至对于代码所用的模型都有介绍:但是对于英文 ...

  9. 测绘工程本科生如何入门GNSS算法 - 引言

    对于本科生来说,搞懂GNSS并入门仍然是一个十分困难的事情.我不太清楚现在本科生的水平,以我大学时的情况来推断,很多同学可能也仅仅处于了解GNSS概念的水平,可能简单的GNSS单点定位的算法流程也不了 ...

  10. 北斗导航 | 精密单点定位软件之rtklib的静态定位测试(RTKlib)

    ================================================ 博主github:https://github.com/MichaelBeechan 博主CSDN:h ...

最新文章

  1. sizeof 操作符详解
  2. SGU101 求有重边的无向图欧拉迹
  3. Verilog定义计算位宽的函数clogb2
  4. 一文了解 ng-template, ng-content, ng-container, 和 *ngTemplateOutlet的区别
  5. command对象提供的3个execute方法是_并发面试题:java中有几种方法可以实现一个线程?...
  6. 2018/3/1 省选模拟考试 50分
  7. python搜论文_python论文
  8. 集邦咨询:预估今年GaN功率元件营收达8300万美元
  9. matlab学习笔记杂项一
  10. import 导入模块学习
  11. AD9361开发:接收与发送滤波器配置
  12. 未能监测到驱动人生服务器,驱动人生查询失败可能是DNS被劫持的锅!
  13. 逻辑思维训练500题
  14. 司马相如——草根逆袭凭借千古情诗赢得白富美,从此走向人生巅峰
  15. 计算机网络——链路层知识总结
  16. w ndows无法完成格式化,windows无法完成格式化怎么办【图文教程】
  17. 【JTS】JTS的几何图形的基本关系方法
  18. Python 用26个英文字母生成序列
  19. 推荐一个免费服务器网站|亲测可用
  20. C++primeplus P368-P391

热门文章

  1. vscode C语言中文输出乱码问题的解决
  2. C++实现 利用前序序列和中序序列构建二叉树
  3. 了解uni-app只需这一篇就足够了
  4. 【转】对硬盘进行分区时,GPT和MBR区别。
  5. 光机电气一体化控制实训系统
  6. html5中加下划线,为超链接添加下划线
  7. ps—图层、(移动工具中)对齐
  8. 无法初始化windows sockets
  9. python算p值,python实现计算两组数据P值的方法
  10. Yang‘s 不等式与 Cauchy-Schwarz 不等式