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值,在网上也找不到相关参考,只能一步步摸索,如果有错误也希望和大家相互交流。