rtklib源码 rtk差分解算,rtkpos和replos函数流程梳理

2023-11-20

rtklib源码 rtk差分解算,rtkpos和replos函数流程梳理

rtkpos函数梳理

总体流程

  1. 分别计算移动站和基站的观测值数量 nu和nr
  2. 通过单点定位函数得到移动站的大致位置和速度
  3. 判断定位模式,根据不同的定位模式进行解算结果输出,如果是rtk则执行replos函数进行差分解算

replos函数梳理

replos总体流程

  1. 计算卫星的位置、速度、钟差、钟漂等参数

1. 通过satposs函数计算卫星的位置、速度等参数

在函数的最开始可以看到,这里计算的卫星数据是所有移动站和基准站的观测到的卫星星历得到的。(此处的n是n=nu+nr,在replos函数头部处定义时已经相加了 )
在这里插入图片描述

for (i=0;i<n&&i<2*MAXOBS;i++) {

2. 通过zdres函数计算基站伪距和载波相位的非差分残差

    if (!zdres(1,obs+nu,nr,rs+nu*6,dts+nu*2,svh+nu,nav,rtk->rb,opt,1,
               y+nu*nf*2,e+nu*3,azel+nu*2)) {
        errmsg(rtk,"initial base station position error\n");
        free(rs); free(dts); free(var); free(y); free(e); free(azel);
        return 0;
    }

传入的obs是obs+nu而不是obs是因为,obs是由移动站和基站的观测值共同组成,基站部分的在后面,所以加一个nu作为偏移,nu:移动站观测的卫星数 nr:参考站观测的卫星数
输入的rtk->rb是基站的位置信息,这个在前面已经进行了定位了,或者配置中已经给出了基站位置

2.1 初始化残差数组 y

for (i=0;i<n*nf*2;i++) y[i]=0.0;  //nf=2,载波数量

2.2 地球潮汐校正

   if (opt->tidecorr) {
        tidedisp(gpst2utc(obs[0].time),rr_,opt->tidecorr,&nav->erp,
                 opt->odisp[base],disp);
        for (i=0;i<3;i++) rr_[i]+=disp[i];
    }

(在配置中没有用到这个改正)

2.3 基站接收机的星地距离修正(每颗卫星都修正)

    //huhaoming:将 ecef 转换为大地坐标 pos是转化后的坐标
    ecef2pos(rr_,pos);
    
    for (i=0;i<n;i++) {
        /* compute geometric-range and azimuth/elevation angle 计算几何范围和方位角/仰角 */
        if ((r=geodist(rs+i*6,rr_,e+i*3))<=0.0) continue;
        if (satazel(pos,e+i*3,azel+i*2)<opt->elmin) continue;
        
        /* excluded satellite? 剔除卫星*/
        if (satexclude(obs[i].sat,svh[i],opt)) continue;
        
        /* satellite clock-bias 使用钟差补偿到星地几何距离 */
        r+=-CLIGHT*dts[i*2];
        
        /* troposphere delay model (hydrostatic)*/
        zhd=tropmodel(obs[0].time,pos,zazel,0.0);
        r+=tropmapf(obs[i].time,pos,azel+i*2,NULL)*zhd;
        
        /* receiver antenna phase center correction 接收机天线相位中心校正*/
        antmodel(opt->pcvr+index,opt->antdel[index],azel+i*2,opt->posopt[1], dant);
        
        /* undifferenced phase/code residual for satellite */
        zdres_sat(base,r,obs+i,nav,azel+i*2,dant,opt,y+i*nf*2);
    }
2.3.1 计算接收机到卫星的几何距离 geodist
 //huhaoming:求接收机到卫星的几何距离,存在变量r中
        if ((r=geodist(rs+i*6,rr_,e+i*3))<=0.0) continue;```

```c
/* geometric distance ----------------------------------------------------------
 * compute geometric distance and receiver-to-satellite unit vector
 * args   : double *rs       I   satellilte position (ecef at transmission) (m)
 *          double *rr       I   receiver position (ecef at reception) (m)
 *          double *e        O   line-of-sight vector (ecef)
 * return : geometric distance (m) (0>:error/no satellite position)
 * notes  : distance includes sagnac effect correction
*-----------------------------------------------------------------------------*/
extern double geodist(const double *rs, const double *rr, double *e)
{
    double r;
    int i;
    
    if (norm(rs,3)<RE_WGS84) return -1.0;
    for (i=0;i<3;i++) e[i]=rs[i]-rr[i];
    r=norm(e,3);
    for (i=0;i<3;i++) e[i]/=r;

    //huhaoming:OMGE*(rs[0]*rr[1]-rs[1]*rr[0])/CLIGHT:地球自转改正
    return r+OMGE*(rs[0]*rr[1]-rs[1]*rr[0])/CLIGHT;
}
  • rs:卫星位置
  • rr:接收机位置
  • e:接收机到卫星的单位向量,方向是由接收机指向卫星

计算的时候通过两个三维向量相减,最后再求范数即可得到星地距离
最后返回值是地球自转改正后的星地距离

2.3.2 计算每颗卫星的方位角和仰角 satazel
//如果大于最小值,则在后面用卫星钟差和对流层延时来修正星地距离
if (satazel(pos,e+i*3,azel+i*2)<opt->elmin) continue;```
/* satellite azimuth/elevation angle -------------------------------------------
* compute satellite azimuth/elevation angle
* args   : double *pos      I   geodetic position {lat,lon,h} (rad,m)
*          double *e        I   receiver-to-satellilte unit vevtor (ecef)
*          double *azel     IO  azimuth/elevation {az,el} (rad) (NULL: no output)
*                               (0.0<=azel[0]<2*pi,-pi/2<=azel[1]<=pi/2)
* return : elevation angle (rad)
*-----------------------------------------------------------------------------*/
extern double satazel(const double *pos, const double *e, double *azel)
{
    double az=0.0,el=PI/2.0,enu[3];
    
    if (pos[2]>-RE_WGS84) {
        ecef2enu(pos,e,enu);
        az=dot(enu,enu,2)<1E-12?0.0:atan2(enu[0],enu[1]);
        if (az<0.0) az+=2*PI;
        el=asin(enu[2]);
    }
    if (azel) {azel[0]=az; azel[1]=el;}
    return el;
}

先判断基站位置在经纬高坐标系中的高度是否大于-RE_WGS84(基准椭球面的长半径),只有满足才可以进行方位角和高度角的计算。
传入的位置信息 pos 是大地坐标系下的坐标,需要将基站位置坐标由经纬高转换为东北天坐标系中。

ecef2enu(pos,e,enu);

然后在enu坐标系下用课本的公式来计算即可

        az=dot(enu,enu,2)<1E-12?0.0:atan2(enu[0],enu[1]);
        if (az<0.0) az+=2*PI;
        el=asin(enu[2]);
2.3.3 剔除卫星 satexclude

排除卫星的主要是根据prcopt_t结构体中的exsats进行判断是否有要排除或者保留的卫星数据

2.3.4 使用钟差补偿到星地几何距离
r+=-CLIGHT*dts[i*2];
2.3.5 估算对流层延迟并补偿到星地距离 tropmodel、tropmapf
     //huhaoming:用saastamoinen经验模型,通过测站纬度、高程、气温、气压和水汽压等信息计算对流层延迟
        zhd=tropmodel(obs[0].time,pos,zazel,0.0);
        /*huhaoming:计算对流层延迟投影函数(即天顶方向到接收机相对卫星观测方向上的对流层延迟投影系数)
        * 这个函数中有两种投影函数的计算方法,分别是GMF和NMF,对应的两篇参考论文为“Global mapping functions for the atmosphere delay at radio wavelengths”和“Global Mapping Function(GMF): A new empirical mapping function base on numerical weather model data”
        *默认使用的是NMF方法,也可以通过定义IERS_MODEL宏来使用GMF方法。
        *这个函数调用完成后,会将返回的干投影函数和tropmodel中计算得到的天顶方向对流层干延迟相乘,从而得到接收机相对卫星观测方向上的对流层延迟。
        *干投影函数是通过返回值获得的,而湿投影是通过输入/输出参数mapfw获得的。在zdres函数中,本函数输入的mapfw=NULL,即不输出湿投影。
        *湿分量会在之后的ddres(计算双差残差的函数)函数中进行扣除。
        */
        r+=tropmapf(obs[i].time,pos,azel+i*2,NULL)*zhd;
2.3.6 接收机天线相位中心校正
  antmodel(opt->pcvr+index,opt->antdel[index],azel+i*2,opt->posopt[1], dant);

生成一组接收机相对于卫星观测方向的单位矢量e,e[0],e[1],e[2]分别为东、北、天三个方向上的分量;
频段不同,天线的相位中心偏移(PCO)不同。先计算出每个频段天线在东、北、天三个方向总的偏移,即相位中心偏移pcv-off[i][j]与del[j]之和
计算2中的相位中心偏移在观测单位矢量e上的投影dot(off,e,3),由于e是单位矢量,所以和它求内积实际上就在该方向上的投影;
计算天线相位中心变化量(PCV):不同的高度角,相位中心变化不同,因此根据高度角对pcv->var[i]进行插值计算。
3、4两部分即为总的天线偏移:dant[i]=-dot(off,e,3)+(opt?interpvar(90.0-azel[1]*R2D,pcv->var[i]):0.0);

2.4 计算伪距和载波相位残差 zdres_sat
zdres_sat(base,r,obs+i,nav,azel+i*2,dant,opt,y+i*nf*2);
/* undifferenced phase/code residual for satellite ---------------------------*/
static void zdres_sat(int base, double r, const obsd_t *obs, const nav_t *nav,
                      const double *azel, const double *dant,
                      const prcopt_t *opt, double *y)
{
    const double *lam=nav->lam[obs->sat-1];
    double f1,f2,C1,C2,dant_if;
    int i,nf=NF(opt);
    
    if (opt->ionoopt==IONOOPT_IFLC) { /* iono-free linear combination */
        if (lam[0]==0.0||lam[1]==0.0) return;
        
        if (testsnr(base,0,azel[1],obs->SNR[0]*0.25,&opt->snrmask)||
            testsnr(base,1,azel[1],obs->SNR[1]*0.25,&opt->snrmask)) return;
        
        f1=CLIGHT/lam[0];
        f2=CLIGHT/lam[1];
        C1= SQR(f1)/(SQR(f1)-SQR(f2));
        C2=-SQR(f2)/(SQR(f1)-SQR(f2));
        dant_if=C1*dant[0]+C2*dant[1];
        
        if (obs->L[0]!=0.0&&obs->L[1]!=0.0) {
            y[0]=C1*obs->L[0]*lam[0]+C2*obs->L[1]*lam[1]-r-dant_if;
        }
        if (obs->P[0]!=0.0&&obs->P[1]!=0.0) {
            y[1]=C1*obs->P[0]+C2*obs->P[1]-r-dant_if;
        }
    }
    else {
        for (i=0;i<nf;i++) {
            if (lam[i]==0.0) continue;
            
            /* check snr mask */
            /*
			函数testsnr()是用来排除接收信号强度小于规定强度的数据,这个规定信号强度(最小信号强度)
			是根据卫星的仰角来得到的(或者说与卫星的仰角有关)。
			*/
            if (testsnr(base,i,azel[1],obs->SNR[i]*0.25,&opt->snrmask)) {
                continue;
            }
            /* residuals = observable - pseudorange 残差 = 观测值 - 伪距 */
            //huhaoming: 计算每个频段下的载波相位、伪距残差:残差 = 观测量 - 卫地距 - 天线偏移
            //dant:天线相位偏差
            //y[0]到y[nf - 1]保存载波相位残差,y[nf]到y[2nf - 1]保存伪距残差
            if (obs->L[i]!=0.0) y[i   ]=obs->L[i]*lam[i]-r-dant[i];//载波相位
            if (obs->P[i]!=0.0) y[i+nf]=obs->P[i]       -r-dant[i];//伪距
        }
    }
}

处理过程
如果在配置中选择了无电离层线性组合(IFLC:Ionospheric free linear combination):
a). 调用testsnr函数检查L1,L2观测量的载噪比是否大于配置中SNR Mask的最低要求(SNR Mask设置见RTKlib mannual 3.5章);
b). 计算无电离层线性组合系数C1、C2, 并采用该系数计算无电离层组合的天线偏移量;
c). 计算无电离层线性组合载波相位和伪距残差:残差 = IFLC观测量 - 卫地距 - 天线偏移量。
如果不是无电离层组合:
a). 调用testsnr,检查每个频段的载噪比是否大于配置中SNR Mask的要求;
b). 计算每个频段下的载波相位、伪距残差:残差 = 观测量 - 卫地距 - 天线偏移量。

3. 选择移动站和基站之间所有的公共卫星 selsat

/* select common satellites between rover and reference station 选择流动站和参考站之间的公共卫星 --------------*/
static int selsat(const obsd_t *obs, double *azel, int nu, int nr,
                  const prcopt_t *opt, int *sat, int *iu, int *ir)
{
    int i,j,k=0;
    
    trace(3,"selsat  : nu=%d nr=%d\n",nu,nr);
    
    for (i=0,j=nu;i<nu&&j<nu+nr;i++,j++) {
        if      (obs[i].sat<obs[j].sat) j--;
        else if (obs[i].sat>obs[j].sat) i--;
        else if (azel[1+j*2]>=opt->elmin) { /* elevation at base station */
            sat[k]=obs[i].sat; iu[k]=i; ir[k++]=j;
            trace(3,"(%2d) sat=%3d iu=%2d ir=%2d\n",k-1,obs[i].sat,i,j);
        }
    }
    return k;
}

查找算法:
基站和移动站的观测数据都在obs中,并且obs的卫星号都是经过排序的,所以星号大小是按照从小打到的顺序排列。如果移动站所观察的数据卫星号小于基站所观察的卫星号,则基站观察数据不变,依次搜寻移动站的观察数据,直到不再小于,此时有两种情况,一种是等于,一种是大于。

等于时:将当前为星号存入sat[0,1….]中,将这颗卫星所对应的移动站观测数据号i,
基站观测数据j,分别存入iu[0,1….],ir[0,1…].

大于时:说明移动站没有观测的卫星与当前基站的这颗卫星相同。

如果移动站所观察的数据卫星号大于基站所观察的卫星号,算法思路与上面的一致。

4. 当前状态更新 udstate

主要更新:

  1. udpos :kalman中状态更新方程、状态协方差方程更新,包括接收机位置、速度、加速度;
  2. udion : 电离层状态、协方差更新;
  3. udtrop : 对流层状态、协方差更新;
  4. udrcvbias:接收器的时间更新
  5. udbias :更新单差模糊度状态、协方差;
    最后存放到了rtk参数中

4.1 得到相邻历元时间差

double tt=rtk->tt,bl,dr[3];

在前面的时候rtk->tt已经计算过了 rtk->tt=timediff(rtk->sol.time,time); time是前一历元时间,rtk->sol.time是当前历元时间

4.2 rover位置、速度、加速度及其方差更新 udpos

udpos(rtk,tt); :更新位置、速度、加速度,得到rtk->x,也就是浮点解 float状态

  • 如果定位模式是PMODE_FIXED,则将配置中的移动站坐标rtk->opt.ru[]赋值给rtk->x,由此得到状态的协方差矩阵
    在这里插入图片描述
  • 初始化第一个历元的位置
    如果检测到状态矩阵位置为0,则说明是当前的历元是首历元,我们将状态的位置部分初始化为单点定位得到的大致移动站位置,状态矩阵对应的协方差矩阵为:
    在这里插入图片描述
  • 如果是静态模式 static mode 则直接返回,结束udpos
  • 如果是 Kinmatic模式(无动力模型)(本次分析属于这种模式)
    当前的状态矩阵为当前的状态矩阵为:将状态的位置部分初始化为单点定位得到的大致移动站位置。协方差矩阵:
    在这里插入图片描述

最后更新时间:2022年7月18日15:43:15

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rtklib源码 rtk差分解算,rtkpos和replos函数流程梳理 的相关文章

  • Kalman滤波参数、调整原则

    1 Q P R关系 P的迭代为P 61 QTPQ xff1b R为观测的协方差 xff1b 状态延时高 xff0c 说明收敛速度慢 估计参数P越大 xff0c 收敛的越快 测量误差R越小 xff0c 收敛的越快 调整这两个参数即可 xff0
  • RTK和PPK技术科普

    参考链接2 xff1a https blog csdn net hailiannanhai article details 78494366 RTK技术 RTK xff08 Real time kinematic xff0c 实时动态 xf
  • ardupilot & PX4 RTK配置指南

    ardupilot amp PX4 RTK配置指南 随着无人机对于高精度位置需求越来越强烈 xff0c 同时也伴随着北斗三代导航系统正式服务全球 xff0c 国产的实时载波相位差分 xff08 RTK xff09 导航产品也正在以更优惠 更
  • 想免像控?RTK/PPK无人机 vs GCP 测绘精度对比

    无人机航拍测绘具有精度高 作业效率高 数据分析能力强的特点 xff0c 很大程度上解决了人工测绘的痛点 因此 xff0c 无人机在测绘工程中的应用越来越广泛 精度对于测绘从业人员来说精度至关重要 xff0c 针对RTK PPK 无人机和使用
  • kalman滤波器各项参数及矩阵的设置

    参考博客 xff1a https blog csdn net baimafujinji article details 50646814 简单来说 xff0c 卡尔曼滤波器的实现是一个迭代过程 xff0c 使用上一次的结果预测当前的值 xf
  • GPS、RTK、PPK三种定位技术的原理及应用

    一 GPS技术 1 原理 之前做过集成GPS功能的产品 xff0c 对这种不以定位为主要功能的产品 xff0c 精度是没有要求的 xff0c 例如我只是用它来得到当前社区的位置 xff0c 一般的GPS模块都能满足要求 理论上 xff0c
  • QGC开发 显示双GPS/RTK信息以及自定义页面(ubuntu)

    一 QGC开发 显示双GPS RTK信息 1 在sitl中进行仿真 xff0c 虚拟出第二个GPS mavlink发送到地面站 如下图中 xff0c 在mavlink msg gps2 raw h中找到发送第二组gps rtk数据函数mav
  • 定位——GNSS

    GNSS GNSS 即全球导航卫星系统 xff08 Global Navigation Satellite System xff09 是所有导航定位卫星的总称 xff0c 凡是可以通过捕获跟踪其卫星信号实现定位的系统 xff0c 均可纳入G
  • host ntrip 千寻rtk_手把手教你怎样使用瑞得R90T RTK连接千寻cors账号

    瑞得RTK是南方测绘旗下的RTK品牌之一 xff0c 不过相比于南方旗下其他品牌的RTK xff0c 瑞得RTK在操作使用方面以及普及度方面相对来说没有那么高 xff0c 因此很多人对于瑞得RTK连接千寻cors账号的操作比较陌生 xff0
  • RTKlib源码解析:ppp和rtkpost中的周跳检测函数

    文章目录 前言detslp mwdetslp gfdetslp lldetslp dop 欢迎关注个人公众号 xff1a 导航员学习札记 前言 本文解析了RTKlib ppp c中两个周跳检测函数detslp mw和detslp gf xf
  • (3)GNSS在ROS中数据获取与解析

    1 在ubuntu16 04中安装串口工具minicom 输入sudo minicom s进行串口配置 xff1a 弹出如下设置界面 xff1a 使用方向键 选择 Serial port setup xff0c 按Enter键 xff0c
  • rtklib--伪距单点定位(single-point positioning)学习(1)Satposs

    目录 前言pntpos总体调用流程图Satposs总体调用流程图 xff1a 1 Satposs 按照所观测到的卫星顺序计算出每颗卫星的位置 速度 钟差 频漂 2 ephclk 通过广播星历来确定卫星钟偏3 stasys 根据卫星编号确定该
  • GPS 和 RTK 定位

    refers xff1a https blog csdn net u012241570 article details 80802675 GPS定位的基本原理 测量出已知位置的卫星到地面GPS接收器之间的距离 xff0c 然后接收器通过与至
  • RTKLIB之RTKRCV

    1 options file option file can be saved from rtknavi exe modify the options file to fit for ubuntu system remember to ch
  • 你了解RTK技术吗?—— 揭秘GNSS中的定位技术

    上期文章中我们一起探讨了GNSS仿真及其对测试验证的重要意义 xff0c 今天我们将一起走进GNSS中的定位技术 RTK技术 什么是RTK技术 xff1f 传统RTK技术与网络RTK技术又有什么区别呢 xff1f 随着GNSS系统的迅速发展
  • 讲一点点自动驾驶技术(2)自动驾驶定位系统 part 1 GNSS和激光雷达部分

    最近又有点时间了 来唠一唠自动驾驶技术的第一个部分 定位系统吧 对于一辆自动驾驶的车辆来说 定位技术是关键技术之一 在这一篇小Q来说一说不同的定位技术 这里面包括GNSS全球导航卫星系统 激光雷达 LiDAR 高精度地图 视觉里程计和其他的
  • INS/GNSS组合导航(二)-INS常用的坐标系统及转换

    一 常用坐标系 由于INS是一种完全自主的导航系统 不与外界发生联系 但是我们又想知道物体的的位置 尤其是其与GNSS组合时需要知道其与GNSS在同一坐标系下的位置信息 这就牵扯到了INS的几个导航系统之间的转换 笼统的讲 INS输出的是载
  • 什么是Ntrip?Ntrip协议简介

    文章目录 Ntrip通讯协议1 0 Ntrip是什么 Ntrip系统组成 NtripServer NtripClient 4 1 获取源列表 4 2 获取差分数据 其他资料 Ntrip通讯协议1 0 Ntrip是什么 NTRIP是在互联网上
  • rtklib源码 rtk差分解算,rtkpos和replos函数流程梳理

    rtklib源码 rtk差分解算 rtkpos和replos函数流程梳理 rtkpos函数梳理 总体流程 replos函数梳理 replos总体流程 1 通过satposs函数计算卫星的位置 速度等参数 2 通过zdres函数计算基站伪距和
  • RTK、PPP与RTK-PPP?一文带您认识高精定位及如何进行高精定位GNSS测试!(一)

    来源 德思特测试测量 德思特干货丨RTK PPP与RTK PPP 一文带您认识高精定位及如何进行高精定位GNSS测试 一 原文链接 https mp weixin qq com s 6Jb3DuJEhRGqFPrH3CX8xQ 欢迎关注虹科

随机推荐

  • 旋转链表(leetcode)

    61 旋转链表 给你一个链表的头节点 head 旋转链表 将链表每个节点向右移动 k 个位置 示例 1 输入 head 1 2 3 4 5 k 2 输出 4 5 1 2 3 示例 2 输入 head 0 1 2 k 4 输出 2 0 1 提
  • centos安装配置hadoop超详细过程(含故障排除)

    1 集群部署介绍 1 1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台 以Hadoop分布式文件系统 HDFS Hadoop Distributed Filesystem 和MapReduce Goog
  • 计算机科学丛书(2014-2018.Q1)

    ISBN 名称 作者 出版时间 978 7 111 53451 8 数学设计和计算机体系结构 原书第2版 美 戴维 莫尼 哈里斯 莎拉 L 哈里斯著 978 7 111 44075 8 嵌入式计算系统设计原理 美 Marilyn Wolf著
  • C#中string.Format输出内容中含有花括号的解决方法

    转载一篇 版权声明 本文为CSDN博主 九德真君 的原创文章 遵循CC 4 0 BY SA版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net lzdidiv article details 69469
  • python matrix用法_numpy中matrix使用方法

    matrix T transpose 返回矩阵的转置矩阵 matrix H hermitian conjugate transpose 返回复数矩阵的共轭元素矩阵 matrix I inverse 返回矩阵的逆矩阵 matrix A bas
  • 基于C语言实现的文件压缩算法-哈夫曼编码

    哈夫曼编码 是一种数据压缩算法 通常用于无损数据压缩 该算法是由 David A Huffman在麻省理工学院就读理学博士 Doctor of Science 的时候发明的 这位大佬在1952年发表了相关的一篇论文A Method for
  • 页面上input输入框宽度实现自动调整

    input输入框宽度实现自动调整 本文介绍两种方式 一是通过获取input内容的宽度实现输入框宽度的自动调整 二是通过内容字符串的长度乘以文本字体大小的积 来实现输入框宽度的自动调整 1 input输入框宽度的获取方式一 由于input输入
  • 利用maven项目创建一个web项目工程(图文详解)

    最近正开始学习java 老师布置的第一个作业便是用maven项目创建一个web项目工程 不会 跑去百度了半天 跳出来的全是我们csdn的教程 但到创建资源包的时候就没法跟着做了 因为显示已存在 没法跟着创建了 那些文章基本一样的讲法 都是默
  • 超详细的用IDEA整合SSM框架和profile 配置环境

    SSM作为现在最流行的开发框架 很大的提升了开发效率 一些同学在SSM基础上的整合一些更实用的开发基础框架 被用来作为快速开发的基础框架 本次实践主要是以下3个目标 从最基础的SSM框架做起 摸索和处理SSM框架整合中可能会遇到的问题 使用
  • 手机知识:手机的快充技术是什么,看完本文你就懂了

    目录 1 什么是手机快充 2 目前主流的手机快充协议 2 1 PD协议 2 2 PE协议 联发科 2 3 QC协议 高通 2 4 VOOC闪充 OPPO厂商 2 5 SCP FCP闪充 华为厂商 2 6 FlashCharge闪充 Vivo
  • 【前后端数据交互:Axios】

    前后端数据交互 Axios Axios 介绍 在前端页面展示的数据大多数都是通过访问一个API获取的 做这件事的方法有好几种 例如jquery ajax vue resource axios 而vue resource是vue插件 但3版本
  • 基于RGB颜色空间使用OpenCV-Python实现照片换底

    前往老猿Python博文目录 https blog csdn net LaoYuanPython 一 引言 前一阵子家人报考教师资格证考试 因报名需要将蓝底的数字相片换成白底的 老猿虽然在学习图像处理相关开发技术 但并没有熟练使用的图像编辑
  • BigDecimal精度问题

    BigDecimal精度问题 在近来项目展示价格的时候 遇到了一个问题 一个价格为99999 999的商品在购物车中的展示却是100000 00 原因归结于在原项目代码中 是采用BigDecimal的格式 然而前端需要展示的时候 采用的却是
  • .NET6.0的日志组件Log4net

    前言 不允许让没有任何日志监控的项目上线 所以说真正开发起来必须要有监控 相当于多一双眼睛帮着我们看项目在运行时会不会有什么问题 我们要不断的在每个环节写日志 这样发生异常我们可以快速知道哪里有问题了 就可以快速解决 目录 一 Log4ne
  • addEventListener()方法第三个参数(useCapture)与浏览器事件触发阶段

    最近面试中有被问到EventTarget addEventListener 方法的第三个参数useCapture 此方法就不着重讲解了 同时该方法的第三个参数可以传一个对象 可以参考mdn文档 讲解的很详细EventTarget addEv
  • 数据挖掘知识浅析

    一 什么是数据挖掘 数据挖掘是指从大量数据中提取或 挖掘 知识 数据挖掘是一种 黄金挖掘 从沙子堆中挖掘出黄金 找出最有价值的黄金 这种有机的价值物提取的过程称为 黄金挖掘 通过某种手段或者经验丰富人士 从海量的数据中找出有用的 数据 掌握
  • Markdown入门2-标题、引用、列表、代码、分隔线

    区块元素 网上推荐了很多撰写Markdown文件的软件 根据个人爱好可以自己去选一款 小编觉得选哪个都差不多 能出来效果就行呗 以下相关代码测试小编是在有道云笔记上进行的 我会把代码贴出来方便大家演练 1 标题 Markdown 支持两种标
  • fastadmin隐藏table操作栏拖动排序按钮

    记录 fastadmin隐藏table操作栏拖动排序按钮 在 js 文件中的 Table api init 中添加一下代码 dragsort url
  • C++ 第一阶段编程练习

    目录 1 1 编程练习 1 1 1 编程题目 第一题 第二题 第三题 第四题 第五题 第六题 第七题 1 2 编程讲解 1 2 1 题目一 1 2 2 题目二 1 2 3 题目三 1 2 4 题目四 1 2 5 题目五 1 2 6 题目六
  • rtklib源码 rtk差分解算,rtkpos和replos函数流程梳理

    rtklib源码 rtk差分解算 rtkpos和replos函数流程梳理 rtkpos函数梳理 总体流程 replos函数梳理 replos总体流程 1 通过satposs函数计算卫星的位置 速度等参数 2 通过zdres函数计算基站伪距和