一个大致的、笔记性质的介绍,细致的等比较空闲的时候再写。
事后精密单点定位:postpos->procpos->rtkpos->pppos

1
2
3
4
5
6
7
8
9
#define PMODE_SINGLE 0 /* positioning mode: single */
#define PMODE_DGPS 1 /* positioning mode: DGPS/DGNSS */
#define PMODE_KINEMA 2 /* positioning mode: kinematic */
#define PMODE_STATIC 3 /* positioning mode: static */
#define PMODE_MOVEB 4 /* positioning mode: moving-base */
#define PMODE_FIXED 5 /* positioning mode: fixed */
#define PMODE_PPP_KINEMA 6 /* positioning mode: PPP-kinemaric */
#define PMODE_PPP_STATIC 7 /* positioning mode: PPP-static */
#define PMODE_PPP_FIXED 8 /* positioning mode: PPP-fixed */

以上为rtklib具备的定位模式。
KINEMA、STATIC为相对定位

事后精密单点定位

postpos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
extern int postpos(gtime_t ts, gtime_t te, double ti, double tu,
const prcopt_t *popt, const solopt_t *sopt,
const filopt_t *fopt, char **infile, int n, char *outfile,
const char *rov, const char *base)
/* post-processing positioning -------------------------------------------------
* post-processing positioning
* args : gtime_t ts I processing start time (ts.time==0: no limit)
* : gtime_t te I processing end time (te.time==0: no limit)
* double ti I processing interval (s) (0:all)
* double tu I processing unit time (s) (0:all)
* prcopt_t *popt I processing options
* solopt_t *sopt I solution options
* filopt_t *fopt I file options
* char **infile I input files (see below)
* int n I number of input files
* char *outfile I output file ("":stdout, see below)
* char *rov I rover id list (separated by " ")
* char *base I base station id list (separated by " ")
* return : status (0:ok,0>:error,1:aborted)
*-----------------------------------------------------------------------------*/

execses_b->execses_r->execess
精密星历的读取在execses_b中执行。从execess开始:

execess
1.readtec   读电离层等
2.readerp   读地球自转参数等文件
3.readobsnav    读观测值文件、导航文件
4.readdcb   读dcb,差分码偏差
5.setpcv    设置天线参数【测站、卫星】
6.readotl   大洋潮汐
相对定位在此处设置参考位置,antpos
后续涉及定位模式,(精密)单点定位为procpos
procpos
初始化rtk类
1.inputobs读入一历元的观测值数据,返回这一历元的卫星个数
2.排除除你选择的卫星系统【如选择了GPS,则剔除除GPS外所有卫星系统】
3.若有fcb值就进行fcb的载波相位改正,否则进行ssr的载波相位改正
4.调用rtkpos进行定位
    4.1 设置基准站位置【】,计算流动站和基准站观测值数量
    4.2 流动站首先进行标准单点定位,若有结果进行下一步
    4.3 查看定位模式,为spp直接输出,若为ppp则调用pppos函数定位后输出
5.输出
PPPOS
1.udstate_ppp 首先暂时更新EKF的状态【初始化】
    1.1 udpos_ppp,udclk_ppp,udtrop_ppp更新位置、钟差、对流层的初始值。
        存放在x向量。协方差阵存放在矩阵P
    1.2探测周跳 GF MW LLI GF和MW都采用了经验阈值
    若探测到周跳,则重置协方差
    1.3 corr_meas 天线校正 计算了LC PC即无电离层组合的值
2.satposs计算卫星位置
    2.1peph2pos用精密星历计算
    其中调用了pephpos和pephclk通过插值(拉格朗日,10阶)得到精确的卫星位置
    对卫星位置进行了天线改正 对钟差进行了相对论效应改正
    【相对论效应分两部分1圆形轨道广义相对论引起的偏差
    2轨道偏心率产生的周期性偏差】
3.ppp_res 计算相位和码偏差
    从ecef(地心地固)转换为大地坐标
    geodist计算几何距离(卫星到接收机)小于0进入下一次循环
    satazel计算方位角和高度角,高度角小于设定的值进入下一次循环
    检查排除卫星
    进行对流层和电离层改正 dtrp dion
    进行卫星和接收机的pcv改正 天线模型dnts dntr
    进行卫星和接收机的天线相位缠绕改正phw
    corr_meas再总的改正天线
    更新观测矩阵的值
    并计算残差【此处的残差为改正后的几何距离和未改正之差】
    同时计算方差,确定方差阵
4.ekf
5.ppp_res 滤波后的各类矩阵的更新和各种改正和上同
6.ppp_ar 到了激动人心的模糊度确定
看更新日志 ppp_ar被删了..

最后更新: 2019年06月30日 00:00

原始链接: https://wu941202.github.io/2019/06/30/2019-06-30/