PPP定位实现—part1
实现的函数主体在postpos.c->rtkpos.c->pppos中,在利用pppos求解时,首先要利用单点定位所得到的数据作为初始化,故此直接调用rtkpos函数进行求解。
-
在postpos.c中找寻队rtk_t进行初始化的方法。
调用函数rtkinit时,对prcopt也需要进行初始化,在rnx2rtkp模块中,找初始化的方法.
对于mode的选取:PPP下分为KINEMA,STATIC,FIXED。其中FIXED是用于固定PPP,进行残差分析,因为数据是对于一个基站的数据,采用STATIC进行求解。
refpos:对初始定位的选取,可以选择从文件中读取,也可以选择从单点定位的解中得到。
sateph:星历的选择,直接选取精密星历进行求解
-
rtkpos输入参数n是number of observation data
-
判断此时解的状态:
sol.stat==SOLQ_PPP
,打印接收机的位置信息,否则输出解的类型,sol.type。 -
编译完成后求解只得到了后面一种情况,打开ppp.trace发现出现错误的问题是lack of valid sats ns=4,在之前单点定位时也出现了这样的问题,载波相位波长lambda需要进行初始化。
-
重新编译,可以计算得到结果。
-
再次观察到
pppos
函数中对整周模糊度进行固定时,如果固定成功了,则stat=SOLQ_FIX
,而现在是对于所有的sol.stat==SOLQ_PPP
都进行输出,不论固定是否成功。增加解算指标
opt->modear==ARMODE_PPPAR
,在ppp.trace中按照函数中设置的trace,没有找到pppamb的内容,tracelevel设置的也是3(解决方法:观察ppp_ar中的pppamb函数的条件,在prcopt.default里面,将电离层的修正给关掉了,需要将其打开。number of freq不能小于2,在default中恰好设置为2。)
此时在有些时间段能够输出解算的值,但大部分时间还是未能进行输出。观察ppp.trace,在每个时间段都有pppamb的输出语句,说明进入到了模糊度固定的程序中,必然有些步骤的返回值
stat!=SOLQ_FIX
,当pppamb
函数的返回值不是0时,返回固定解SOLQ_FIX,找返回值设置的函数if (rtk->opt.modear==ARMODE_PPPAR) { stat=fix_amb_ROUND(rtk,sat1,sat2,NW,m); }
fix_amb_ROUND
函数中对stat的值与两部分相关,与sel_amb
和fix_sol
函数相关,需要每个历元下固定的模糊度的数量m>=3对于
sel_amb
,其功能是select fixed ambiguities,m是选择的线性无关组合(两两一组pair)的个数。对于
fix_sol
,可能出现filter error的情况,这样return=0,但在tracelevel(1)下,并没有输出结果。说明这样的错误并没有出现,其余情况下返回值都为1(SOLQ_FIX=1) -
但显然,进入到
pppamb
函数中,不一定全部固定成功。那么只有可能先行无关的模糊度的数量不足,导致对宽巷的模糊度无法固定。暂时的解决方法是对于SOLQ_FIX的部分进行打印,其余按照没有固定的SOLQ_PPP进行打印
-
定位的历元时间再调用
rtkpos
之前没有进行约束rtk.sol.time = obs.data[i].time;
重新执行后,定位的误差与给出来的要更小,XYZ方向上分别做到了3m,1m,2m的误差(这与之前的误差在4m有极大的改善)
**猜测:**也存在着其他的初始化的设置(譬如时间,初始位置),导致没有达到PPP理想的定位精度。
结果对比
-
首先与sp3的结果进行对比(sp3文件中只有各个卫星的数据,不包含基站的位置坐标),与观测文件中进行对比。与文件中所给的APPROX POSITION XYZ,对比之下,各个方向上都有大致4m的差距。
再采用进行了模糊度固定的解SOLQ_FIX(一部分历元可以,另一部分历元因为线性无关的模糊度的数量不够,导致只能达到SOLQ_PPP的程度),通通打印。
偏差出现如此之大的原因:
-
将PPP的结果与SPP的结果进行对比
SPP在各个方向上比PPP更差了2-3m,和文件所给的位置相差6-7m左右。但是对比钟差发现,PPP的sol.dtr数值很大,不像在SPP中钟差很小。
结果分析:求解的应该不是钟差值,在pppos中计算sol.dtr的值:
rtk->sol.dtr[0]=rtk->x[IC(0,opt)]; rtk->sol.dtr[1]=rtk->x[IC(1,opt)]-rtk->x[IC(0,opt)]; ---------------------------------------------------------------------------- define NP(opt) ((opt)->dynamics?9:3) /* number of pos solution */ define IC(s,opt) (NP(opt)+(s)) /* state index of clocks (s=0:gps,1:glo) */
rtk->x在进行Kalman滤波时重新被更新,理论上应该不存在问题。