RTKLIB专题学习(七)
前几篇我们主要针对RTKLIB中的单点定位流程、函数调用和具体实现以及定位效果进行了详细介绍和分析,那么接下来的几篇博文,将带大家走进RTKLIB中的精密单点定位的部分,这一块需要好好理解,好好吸收,是重中之重
1.类似于estpos在单点定位中的作用,精密单点定位中的pppos可以说是这部分的核心函数了,直接引用了卡尔曼滤波进行参数估计
/* precise point positioning -------------------------------------------------*/
extern void pppos(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav)
{
const prcopt_t *opt=&rtk->opt;
double *rs,*dts,*var,*v,*H,*R,*azel,*xp,*Pp,dr[3]={
0},std[3];
char str[32];
int i,j,nv,num,info,svh[MAXOBS],exc[MAXOBS]={
0},stat=SOLQ_SINGLE;
time2str(obs[0].time,str,2);
trace(3,"pppos : time=%s nx=%d n=%d\n",str,rtk->nx,n);
rs=mat(6,n); dts=mat(2,n); var=mat(1,n); azel=zeros(2,n);
for (i=0;i<MAXSAT;i++) for (j=0;j<opt->nf;j++) rtk->ssat[i].fix[j]=0;
/* temporal update of ekf states */
udstate_ppp(rtk,obs,n,nav);
/* satellite positions and clocks */
satposs(obs[0].time,obs,n,nav,rtk->opt.sateph,rs,dts,var,svh);
/* exclude measurements of eclipsing satellite (block IIA) */
if (rtk->opt.posopt[3]) {
testeclipse(obs,n,nav,rs);
}
/* earth tides correction */
if (opt->tidecorr) {
tidedisp(gpst2utc(obs[0].time),rtk->x,opt->tidecorr==1?1:7,&nav->erp,
opt->odisp[0],dr);
}
nv=n*rtk->opt.nf*2+MAXSAT+3;
num = nv;
xp=mat(rtk->nx,1); Pp=zeros(rtk->nx,rtk->nx);
v=mat(nv,1

本文深入剖析RTKLIB中精密单点定位的核心函数pppos,该函数采用卡尔曼滤波进行参数估计。介绍了udstate_ppp函数,包括位置、钟差参数的时间更新,以及在不同定位模式下的处理。动态和静态模式下的状态更新各有侧重,钟差部分的更新则是必不可少的。通过对状态矩阵和协方差矩阵的更新,确保了定位精度的提升。
&spm=1001.2101.3001.5002&articleId=124063222&d=1&t=3&u=aa3f7dd2e43a45ebb2f2c4faeec2aece)
2392

被折叠的 条评论
为什么被折叠?



