コード例 #1
0
ファイル: ppp.c プロジェクト: AlfaroP/isr-uc-ros-pkg
/* precise tropospheric model ------------------------------------------------*/
static double prectrop(gtime_t time, const double *pos, const double *azel,
                       const prcopt_t *opt, const double *x, double *dtdx,
                       double *var)
{
    const double zazel[]={0.0,PI/2.0};
    double zhd,m_h,m_w,cotz,grad_n,grad_e;
    
    /* zenith hydrostatic delay */
    zhd=tropmodel(time,pos,zazel,0.0);
    
    /* mapping function */
    m_h=tropmapf(time,pos,azel,&m_w);
    
    if ((opt->tropopt==TROPOPT_ESTG||opt->tropopt==TROPOPT_CORG)&&azel[1]>0.0) {
        
        /* m_w=m_0+m_0*cot(el)*(Gn*cos(az)+Ge*sin(az)): ref [6] */
        cotz=1.0/tan(azel[1]);
        grad_n=m_w*cotz*cos(azel[0]);
        grad_e=m_w*cotz*sin(azel[0]);
        m_w+=grad_n*x[1]+grad_e*x[2];
        dtdx[1]=grad_n*(x[0]-zhd);
        dtdx[2]=grad_e*(x[0]-zhd);
    }
    dtdx[0]=m_w;
    *var=SQR(0.01);
    return m_h*zhd+m_w*(x[0]-zhd);
}
コード例 #2
0
ファイル: rtkpos.c プロジェクト: ndhuan/GPSRTK
/*
static int zdres(int base, const obsd_t *obs, int n, const double *rs,
                 const double *dts, const int *svh, const nav_t *nav,
                 const double *rr, const prcopt_t *opt, double *y,
                 double *e, double *azel)
Description: zero differenced residual
Params: 	base		I			1:base, 0: rover
					obs			I
					n				I			number of obs data
					rs			I			sat positions/velocities
					dts			I			sat clock bias
					svh			I
					nav			I
					rr			I			receiver position
					y				O			zero diff residuals
					e				O
					azel		O			{az/el}
Return:	0 ok, !0 error
*/
static int zdres(int base, const obsd_t *obs, int n, const double *rs,
                 const double *dts, const int *svh, const nav_t *nav,
                 const double *rr, const prcopt_t *opt, int index, double *y,
                 double *e, double *azel)
{
    double r,rr_[3],pos[3];
    double zhd, zazel[]= {0.0,90.0*D2R}; //tai sao init zazel = {0,90}
    int i;

    for (i=0; i<2*n; i++) y[i]=0.0;
    if (sos3(rr)<=0.0) return -1;//no receiver pos
    for (i=0; i<3; i++) rr_[i]=rr[i];
    ecef2pos(rr_,pos);


    for (i=0; i<n; i++)
    {
        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;
        //satellite clock-bias
        r -= CLIGHT*dts[i*2];
        /* troposphere delay model (hydrostatic) */
        zhd=tropmodel(obs[0].time,pos,zazel,0.0);//tai sao chon rel_humi = 0???????????
        r+=tropmapf(obs[i].time,pos,azel+i*2,NULL)*zhd;
        /* undifferenced phase/code residual for satellite */
        zdres_sat(base,r,obs+i,nav,azel+i*2,opt,y+i*2);
    }
    return 0;
}
コード例 #3
0
ファイル: t_atmos.c プロジェクト: Andreas-Krimbacher/rtklib
void utest4(void)
{
    double mapfd,mapfw;
    double e1[]={2007,1,16,6,0,0},e2[]={2030,12,31,23,59,59};
    double pos1 []={ 35*D2R, 140*D2R, 100.0};
    double pos2 []={-80*D2R,-170*D2R,1000.0};
    double pos3 []={ 10*D2R,  30*D2R,   0.0};
    double azel1[]={ 60*D2R, 75*D2R};
    double azel2[]={190*D2R,  3*D2R};
    double azel3[]={350*D2R, 60*D2R};
    double azel4[]={  0*D2R, 90*D2R};
    gtime_t t1=epoch2time(e1),t2=epoch2time(e2);

    mapfd=tropmapf(t1,pos1,azel1,&mapfw);
        assert(fabs(mapfd-1.035184526466435)<1e-8);
        assert(fabs(mapfw-1.035233787448654)<1e-8);
    
    mapfd=tropmapf(t1,pos1,azel2,&mapfw);
        assert(fabs(mapfd-14.643271711748200)<1e-8);
        assert(fabs(mapfw-16.455045694559484)<1e-8);
    
    mapfd=tropmapf(t1,pos1,azel3,&mapfw);
        assert(fabs(mapfd-1.154226397147367)<1e-8);
        assert(fabs(mapfw-1.154481126139610)<1e-8);
    
    mapfd=tropmapf(t1,pos1,azel4,&mapfw);
        assert(fabs(mapfd-1.000000000000000)<1e-8);
        assert(fabs(mapfw-1.000000000000000)<1e-8);
    
    mapfd=tropmapf(t2,pos1,azel1,&mapfw);
        assert(fabs(mapfd-1.035184415128022)<1e-8);
        assert(fabs(mapfw-1.035233787448654)<1e-8);
    
    mapfd=tropmapf(t1,pos2,azel1,&mapfw);
        assert(fabs(mapfd-1.035186155749051)<1e-8);
        assert(fabs(mapfw-1.035230548304367)<1e-8);
    
    mapfd=tropmapf(t1,pos3,azel1,&mapfw);
        assert(fabs(mapfd-1.035181919429758)<1e-8);
        assert(fabs(mapfw-1.035233200318210)<1e-8);
    
    mapfd=tropmapf(t1,pos1,azel1,NULL);
        assert(fabs(mapfd-1.035184526466435)<1e-8);
    
    printf("%s utest4 : OK\n",__FILE__);
}