本科生学习GNSS算法 中级教程(三)- rtklib多系统多频单点定位算法 - 多频残差计算以及新增配置

工具推荐

首先为什么要使用git,因为可以追踪修改历史,方便了解整个算法的迭代过程;

为什么要使用vscode阅读代码,是因为 它真的很方便啊。

比如下图中,框中的部分就是用vscode查看某个commit指定文件的修改情况,一目了然。

具体vscode下载、配置、安装、使用等,请csdn自行查找博客。


其余代码逻辑

上节主要集中在tgd的修改,本节将继续讲解多频单点定位的开发工作。

为了和原始代码中计算残差的函数区别,新增了一个处理多频的伪距残差函数

rescode_mulfreq()

它与rescode的最大区别就是,在卫星循环的基础上,增加了频率循环。

for (i = *ns = 0; i < n && i < MAXOBS; i++){
 for (freq_idx = 0; freq_idx < opt->nf; freq_idx++){
      //logic
    }
 }

另外一个是关于电离层的改动,计算给定的频率的电离层,而不是特定的第一频点的延迟。

需要注意的是,计算的电离层都是GPS L1频点的延迟,因为默认使用的是GPS的电离层参数。

下图就是关于电离层修正的前后改动截图,其实就是将默认传入第一频率的code[0],改变为传入该频率的code[freq_idx]类型。

同时在配置文件中增加了SPP的新模式,即在prcopt_t结构体中增加了一个新的配置选项

并通过宏定义的方式,定义了单点定位的模式配置选项,如下:

#define SPP_MODE_L1  1    /*for single frequency*/
#define SPP_MODE_LX  2   /*for mul-frequency*/
#define SPP_MODE_LIF  3  /*for iono-free*/

并增加通过现有配置,进行单点定位模式设置的相关逻辑,主要逻辑如下

  • 如果配置单频,配置文件中的电离层误差处理选项不能选择无电离层组合;
  • 如果配置双频,电离层误差处理可选择使用模型或者使用无电离层组合;
  • 如果配置三频,电离层暂时只允许选择使用模型进行修正。
  • 当然,三频也可以使用双无电离层组合进行单点定位,但在本次开发中,不考虑这种情况。

spp_mode设置代码逻辑如下:

/* set spp mode  ----------------------------------------------------------
* set the opt->spp_mode with the opt->mode and opt->ionoopt
*-----------------------------------------------------------------------------*/
extern int set_spp_mode(prcopt_t*opt){
    if(opt->nf == 1){
        opt->spp_mode = SPP_MODE_L1;
        if(opt->ionoopt == IONOOPT_IFLC){
            fprintf(stderr,"ionoopt not match spp mode\n");
            return 1;
        }
    }
    else if(opt->nf == 2){
        if(opt->ionoopt == IONOOPT_IFLC){
            opt->spp_mode =SPP_MODE_LIF;
        }else{
            opt->spp_mode = SPP_MODE_LX;
        }
    }
    else{
        opt->spp_mode = SPP_MODE_LX;
        if(opt->ionoopt == IONOOPT_IFLC){
            fprintf(stderr,"ionoopt not match spp mode\n");
            return 1;
        }
    }
    return 0;
}

在此commit前:

a5af554bebc4061872a850c4dc58f453a55725fa

我基于上面代码,将跑出来的结果放在了curtin_data文件夹下out.pos中,发现只有GPS的结果,虽然显示使用的卫星数很多,是因为代码设置卫星数目存在bug,实际只使用了GPS系统。

正好下节讲一下,如何利用rtklib的日志进行问题定位。

公众号

有时会将代码 或者资源放在个人公众号上,有问题,在公众号后台回复,也回答的比较快一些,欢迎关注 GNSS和自动驾驶。

猜你喜欢

转载自blog.csdn.net/dong20081991/article/details/126612099