dop位置精度衰减因子,是对卫星导航系统定位性能进行评估的重要指标, 是体现卫星分布于定位质量影响的重要参数。通常包括几何精度衰减因子(GDOP)、位置精度衰减因子(PDOP)、水平精度衰减因子(HDOP)、垂直精度衰减因子(VDOP)和时间精度衰减因子(TDOP)
RTKLIB原本输出没有dop值,dop值是反应定位性能的一个指标,其实在rtklib定位计算过程中对于dop值已经进行计算,并没有存储输出,只需要打开输出即可。
首先是确定dop值是在哪里计算的,在pntpos.c中的单点定位(pntpos)计算过程中利用伪距计算接收机位置(estpos),最小二乘解算出位置后(lsq)需要对结果进行有效性检验(valsol),其中valsol中利用两种方式进行检验:1、卡方检验;2、gdop值最大检验(通过dops函数)。dops函数就是计算dop值,[0]-[3]分别对应GDOP/PDOP/HDOP/VDOP。
知道在哪计算后需要对计算出的dop值进行储存,用到sol_t结构体,在dops函数下加入一行代码,将计算的dop值储存
for (i=0;i<3;i++) sol->dops[i]=dop[i];
讯享网
储存的同时,需要该函数valsol声明dop
讯享网static int valsol(const double *azel, const int *vsat, int n, const prcopt_t *opt, const double *v, int nv, int nx, char *msg, sol_t* sol) { double azels[MAXOBS*2],vv,dop[3];
只有储存是不够的,还需要将dop输出出来。在solution.c中需要对输出头(outsolheads)和输出主体(outsols)进行更改。
outsols中一般输出XYZ即ecef坐标系,在outecef中找到打印加入sol->dops[1](dops[1]是PDOP)
p+=sprintf(p,"%s%s%14.4f%s%14.4f%s%14.4f%s%3d%s%3d%s%8.4f%s%8.4f%s%8.4f%s" "%8.4f%s%8.4f%s%8.4f%s%6.2f%s%6.1f%s%6.2f", s,sep,sol->rr[0],sep,sol->rr[1],sep,sol->rr[2],sep,sol->stat,sep, sol->ns,sep,SQRT(sol->qr[0]),sep,SQRT(sol->qr[1]),sep, SQRT(sol->qr[2]),sep,sqvar(sol->qr[3]),sep,sqvar(sol->qr[4]),sep, sqvar(sol->qr[5]),sep,sol->age,sep,sol->ratio, sep, sol->dops[1]);
outsolheads中找到对应坐标系输出:else if (opt->posf==SOLF_XYZ) /* x/y/z-ecef */
加入输出头pdop,这一步可有可无,只不过在头中显示该列是pdop,可以不加
讯享网else if (opt->posf==SOLF_XYZ) { /* x/y/z-ecef */ p+=sprintf(p,"%14s%s%14s%s%14s%s%3s%s%3s%s%8s%s%8s%s%8s%s%8s%s%8s%s%8s%s%6s"28 %s%6s "%s%6s%s%6s", "x-ecef(m)",sep,"y-ecef(m)",sep,"z-ecef(m)",sep,"Q",sep,"ns", sep,"sdx(m)",sep,"sdy(m)",sep,"sdz(m)",sep,"sdxy(m)",sep, "sdyz(m)",sep,"sdzx(m)",sep,"age(s)",sep,"ratio", sep, "pdop");
这时,可以发现在打印输出中sol->dops[1]标红,即未在头文件该结构体中声明dops。
在rtklib.h头文件中找到sol_t结构体加入声明 double dops[4];即可运行函数

本人也是刚接触rtklib,写这篇文章是因为当时需要输出dop值,在网上也找不到相关参考,只能一步步摸索,如果有错误也希望和大家相互交流。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/52795.html