RTKlib单点定位-部分思考

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

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 = t s v − δ t s v t = t_{sv} - \delta{t_{sv}} t=tsvδtsv
δ t s v = a 0 + a 1 ( t − t o c ) + a 2 ( t − t o c ) 2 \delta{t_{sv}} = a_0+a_1(t-t_{oc})+a_2(t-t_{oc})^2 δtsv=a0+a1(ttoc)+a2(ttoc)2
t t t为卫星信号发射时刻, t s v t_{sv} tsv为发射时刻的卫星测距码相位时间, δ t s v \delta{t_{sv}} δtsv为卫星测距码相位时间偏移, t o c t_{oc} toc是星历中的TOC。可以看到上面两个公式中都有 t t t,所以RTKlib做了一些迭代计算。不过在北斗和GP的ICD中都提到 t t t可以忽略精度,直接用 t s v t_{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。

  • 17
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
rtklib单点定位是通过procpos()函数实现的,该函数包括数据输入inputobs()、数据处理rtkpos()和数据输出outsol()三个部分。其中,rtkpos()是核心处理单元,包括单点定位pntpos、精密单点定位pppos和相对定位relpos三个部分单点定位公式需要通过求解卫星的位置、速度和钟差,并考虑电离层和对流层等修正来获取接收机的位置和钟差。卫星部分参数的计算可以通过satposs()函数实现。当增量矩阵满足一定条件时,输出结果包括接收机的位置、钟差以及误差协方差矩阵等信息。具体的计算过程和函数定义可以参考rtklib的源代码。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [RTKLIB学习(二)——单点定位-卫星位置、速度、钟差的计算](https://blog.csdn.net/qq_45598117/article/details/121945476)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [RTKLIB专题学习(五)---单点定位实现进阶(一)](https://blog.csdn.net/absll/article/details/124005570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值