RTKLIB相对定位部分算法梳理

RTKLIB相对定位部分算法梳理
⽬录
线路保护前⾔
是⼀个著名的GNSS开源项⽬,⾥⾯涵盖了GNSS的⽅⽅⾯⾯,相信很多学习GNSS的朋友读的第⼀份源码便是RTKLIB。恰恰因为RTKLIB 涵盖的东西太多了,学习起来⽐较⿇烦,博主整理了RTKLIB的相对定位部分算法,⽅便⾃⼰回顾复习,也供⼤家参考学习。本博客主要参考RTKLIB源码,RTKLIB⼿册,《GPS测量与数据处理》,及多篇RTKLIB相关博客。
⼀、相对定位整体框架
⼆、伪距单点定位
1、卫星位置
2、伪距定位
伪距残差
/* pseudorange residuals -----------------------------------------------------*/ static int rescode(int iter,const obsd_t *obs,int n,const double*rs,
static int rescode(int iter,const obsd_t *obs,int n,const double*rs,
const double*dts,const double*vare,const int*svh,
const nav_t *nav,const double*x,const prcopt_t *opt,
double*v,double*H,double*var,double*azel,int*vsat,
double*resp,int*ns)
{
double r,dion,dtrp,vmeas,vion,vtrp,rr[3],pos[3],dtr,e[3],P,lam_L1;
int i,j,nv=0,sys,mask[4]={0};
trace(3,"resprng : n=%d\n",n);
for(i=0;i<3;i++) rr[i]=x[i];
dtr=x[3];
ecef2pos(rr,pos);
for(i=*ns=0;i<n&&i<MAXOBS;i++){
vsat[i]=0; azel[i*2]=azel[1+i*2]=resp[i]=0.0;
if(!(sys=satsys(obs[i].sat,NULL)))continue;
/* reject duplicated observation data 剔除重复观测数据 */
if(i<n-1&&i<MAXOBS-1&&obs[i].sat==obs[i+1].sat){
trace(2,"duplicated observation data %s sat=%2d\n",
time_str(obs[i].time,3),obs[i].sat);
i++;家具涂装生产线
continue;密封条生产线
}
/* geometric distance/azimuth/elevation angle ⼏何距离、⽅位、仰⾓ */
if((r=geodist(rs+i*6,rr,e))<=0.0||
satazel(pos,e,azel+i*2)<opt->elmin)continue;
/* psudorange with code bias correction 码偏差校正后的伪距 */
if((P=prange(obs+i,nav,azel+i*2,iter,opt,&vmeas))==0.0)continue;
/* excluded satellite? */
if(satexclude(obs[i].sat,vare[i],svh[i],opt))continue;
/* ionospheric corrections */
if(!ionocorr(obs[i].time,nav,obs[i].sat,pos,azel+i*2,
iter>0?opt->ionoopt:IONOOPT_BRDC,&dion,&vion))continue;
/* GPS-L1 -> L1/B1 */
if((lam_L1=nav->lam[obs[i].sat-1][0])>0.0){
点歌设备dion*=SQR(lam_L1/lam_carr[0]);
}
/* tropospheric corrections */
if(!tropcorr(obs[i].time,nav,pos,azel+i*2,
iter>0?opt->tropopt:TROPOPT_SAAS,&dtrp,&vtrp)){
continue;
}
/* pseudorange residual 伪距残差 */
v[nv]=P-(r+dtr-CLIGHT*dts[i*2]+dion+dtrp);
/* design matrix 设计矩阵 */
for(j=0;j<NX;j++) H[j+nv*NX]=j<3?-e[j]:(j==3?1.0:0.0);
/* time system and receiver bias offset correction 时间系统与接收机偏移补偿校正 */ if(sys==SYS_GLO){v[nv]-=x[4]; H[4+nv*NX]=1.0; mask[1]=1;}
else if(sys==SYS_GAL){v[nv]-=x[5]; H[5+nv*NX]=1.0; mask[2]=1;}
else if(sys==SYS_CMP){v[nv]-=x[6]; H[6+nv*NX]=1.0; mask[3]=1;}
else mask[0]=1;
vsat[i]=1; resp[i]=v[nv];(*ns)++;
/* error variance 伪距测量量误差⽅差 */
/* error variance 伪距测量量误差⽅差 */
var[nv++]=varerr(opt,azel[1+i*2],sys)+vare[i]+vmeas+vion+vtrp;
trace(4,"sat=%2d azel=%5.1f %4.1f res=%7.3f sig=%5.3f\n",obs[i].sat,
azel[i*2]*R2D,azel[1+i*2]*R2D,resp[i],sqrt(var[nv-1]));
}
/* constraint to avoid rank-deficient 避免秩不⾜的约束 */
for(i=0;i<4;i++){
if(mask[i])continue;
v[nv]=0.0;
for(j=0;j<NX;j++) H[j+nv*NX]=j==i+3?1.0:0.0;
var[nv++]=0.01;
}
return nv;
}木材炭化炉
电离层延时校正测试网页游戏
⼴播电离层模型(Klobuchar):
卫星⼴播星历中包含如下⼴播电离层参数:
利⽤这些参数及接收机位置、卫星仰⾓⽅位⾓等,L1的电离层延时I(m)可以利⽤如下公式计算得到:
对应代码:

本文发布于:2024-09-21 17:56:36,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/167901.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:伪距   学习   定位   电离层   接收机   校正   生产线
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议