diff --git a/include/gnss_utils/gnss_utils.h b/include/gnss_utils/gnss_utils.h index 8fc1dd999b292064f92ea7ac572a5a3546b2a136..1ffa2afcb73bab06de6d40f5bd2c22d252cebd89 100644 --- a/include/gnss_utils/gnss_utils.h +++ b/include/gnss_utils/gnss_utils.h @@ -66,22 +66,22 @@ struct ComputePosOutput }; /* defaults processing options */ -const prcopt_t opt_default = { +const prcopt_t default_prcopt = { PMODE_SINGLE, /* mode: positioning mode (PMODE_???) */ 0, /* soltype: solution type (0:forward,1:backward,2:combined) */ 2, /* nf: number of frequencies (1:L1,2:L1+L2,3:L1+L2+L3,4:L1+L2+L3+L4) */ SYS_GPS|SYS_GLO|SYS_GAL, /* navsys */ 15.0*D2R,{{0,0}}, /* elmin (rad) ,snrmask */ - 0, /* satellite ephemeris/clock (EPHOPT_???) */ + 0, /* satellite ephemeris option: EPHOPT_BRDC(0):broadcast ephemeris, EPHOPT_PREC(1): precise ephemeris, EPHOPT_SBAS(2): broadcast + SBAS, EPHOPT_SSRAPC(3): broadcast + SSR_APC, EPHOPT_SSRCOM(4): broadcast + SSR_COM, EPHOPT_LEX(5): QZSS LEX ephemeris */ 3,3,1,0,1, /* modear,glomodear,gpsmodear,bdsmodear,arfilter */ 20,0,4,5,10,20, /* maxout,minlock,minfixsats,minholdsats,mindropsats,minfix */ 0,1, /* rcvstds,armaxiter */ - IONOOPT_BRDC, /* ionoopt: ionosphere option (IONOOPT_???) */ - TROPOPT_SAAS, /* tropopt: troposphere option (TROPOPT_???) */ + IONOOPT_BRDC, /* ionoopt: IONOOPT_OFF(0):correction off, IONOOPT_BRDC(1):broadcast mode, IONOOPT_SBAS(2):SBAS model, IONOOPT_IFLC(3):L1/L2 or L1/L5, IONOOPT_EST(4):estimation, IONOOPT_TEC(5):IONEX TEC model, IONOOPT_QZS(6):QZSS broadcast, IONOOPT_LEX(7):QZSS LEX ionosphere, IONOOPT_STEC(8):SLANT TEC mode */ + TROPOPT_SAAS, /* tropopt: TROPOPT_OFF(0):correction off, TROPOPT_SAAS(1):Saastamoinen model, TROPOPT_SBAS(2):SBAS model, TROPOPT_EST(3):troposphere option: ZTD estimation, TROPOPT_ESTG(4):ZTD+grad estimation, TROPOPT_ZTD(5):ZTD correction,6:ZTD+grad correction */ 1,0, /* dynamics,tidecorr */ 3, /* niter: number of filter iteration */ 0,0, /* codesmooth,intpref */ - 0, /* sbascorr: SBAS correction options */ + 0, /* sbascorr: SBAS correction options (can be added): SBSOPT_LCORR(1): long term correction, SBSOPT_FCORR(2): fast correction, SBSOPT_ICORR(4): ionosphere correction, SBSOPT_RANGE(8): ranging */ 0, /* sbasssatsel: SBAS satellite selection (0:all) */ 0,0, /* rovpos,refpos */ WEIGHTOPT_ELEVATION, /* weightmode */ @@ -115,20 +115,19 @@ struct TdcpOptions bool corr_iono; // apply correction also in TDCP bool corr_tropo; // apply correction also in TDCP bool loss_function; // apply loss function in TDCP factors - //double std_time_factor; // std of TDCP measurements: std_time_factor * dt double sigma_atm; double sigma_carrier; bool use_old_nav; - bool use_multi_freq; + bool multi_freq; double time_window; // window of time in which we perform TDCP }; struct Options { - int sateph; // satellite ephemeris/clock (0:broadcast ephemeris,1:precise ephemeris,2:broadcast + SBAS,3:ephemeris option: broadcast + SSR_APC,4:broadcast + SSR_COM,5: QZSS LEX ephemeris - int ionoopt; // ionosphere option (IONOOPT_OFF(0):correction off, IONOOPT_BRDC(1):broadcast mode, IONOOPT_SBAS(2):SBAS model, IONOOPT_IFLC(3):L1/L2 or L1/L5, IONOOPT_EST(4):estimation,5:IONEX TEC model,6:QZSS broadcast,7:QZSS LEX ionosphere,8:SLANT TEC mode) - int tropopt; // troposphere option: (0:correction off,1:Saastamoinen model,2:SBAS model,3:troposphere option: ZTD estimation,4:ZTD+grad estimation,5:ZTD correction,6:ZTD+grad correction) - int sbascorr; // SBAS option (1:long term correction,2:fast correction,4:ionosphere correction,8:ranging) + int sateph; // satellite ephemeris option: EPHOPT_BRDC(0):broadcast ephemeris, EPHOPT_PREC(1): precise ephemeris, EPHOPT_SBAS(2): broadcast + SBAS, EPHOPT_SSRAPC(3): broadcast + SSR_APC, EPHOPT_SSRCOM(4): broadcast + SSR_COM, EPHOPT_LEX(5): QZSS LEX ephemeris + int ionoopt; // ionosphere option: IONOOPT_OFF(0):correction off, IONOOPT_BRDC(1):broadcast mode, IONOOPT_SBAS(2):SBAS model, IONOOPT_IFLC(3):L1/L2 or L1/L5, IONOOPT_EST(4):estimation, IONOOPT_TEC(5):IONEX TEC model, IONOOPT_QZS(6):QZSS broadcast, IONOOPT_LEX(7):QZSS LEX ionosphere, IONOOPT_STEC(8):SLANT TEC mode + int tropopt; // troposphere option: TROPOPT_OFF(0):correction off, TROPOPT_SAAS(1):Saastamoinen model, TROPOPT_SBAS(2):SBAS model, TROPOPT_EST(3):troposphere option: ZTD estimation, TROPOPT_ESTG(4):ZTD+grad estimation, TROPOPT_ZTD(5):ZTD correction,6:ZTD+grad correction + int sbascorr; // SBAS correction options (can be added): SBSOPT_LCORR(1): long term correction, SBSOPT_FCORR(2): fast correction, SBSOPT_ICORR(4): ionosphere correction, SBSOPT_RANGE(8): ranging bool raim; // RAIM enabled double elmin; // min elevation (degrees) double maxgdop; // maxgdop: reject threshold of gdop @@ -143,13 +142,13 @@ struct Options snrmask_t getSnrMask() const { - return opt_default.snrmask; + return default_prcopt.snrmask; } // create a rtklib option struct from this prcopt_t getPrcopt() const { - prcopt_t opt{opt_default}; + prcopt_t opt{default_prcopt}; opt.sateph = sateph; opt.ionoopt = ionoopt; opt.tropopt = tropopt; @@ -162,6 +161,19 @@ struct Options } }; +const Options default_options = +{ + EPHOPT_BRDC, // satellite ephemeris option: EPHOPT_BRDC(0):broadcast ephemeris, EPHOPT_PREC(1): precise ephemeris, EPHOPT_SBAS(2): broadcast + SBAS, EPHOPT_SSRAPC(3): broadcast + SSR_APC, EPHOPT_SSRCOM(4): broadcast + SSR_COM, EPHOPT_LEX(5): QZSS LEX ephemeris + IONOOPT_BRDC, // ionosphere option: IONOOPT_OFF(0):correction off, IONOOPT_BRDC(1):broadcast mode, IONOOPT_SBAS(2):SBAS model, IONOOPT_IFLC(3):L1/L2 or L1/L5, IONOOPT_EST(4):estimation, IONOOPT_TEC(5):IONEX TEC model, IONOOPT_QZS(6):QZSS broadcast, IONOOPT_LEX(7):QZSS LEX ionosphere, IONOOPT_STEC(8):SLANT TEC mode + TROPOPT_SAAS, // troposphere option: TROPOPT_OFF(0):correction off, TROPOPT_SAAS(1):Saastamoinen model, TROPOPT_SBAS(2):SBAS model, TROPOPT_EST(3):troposphere option: ZTD estimation, TROPOPT_ESTG(4):ZTD+grad estimation, TROPOPT_ZTD(5):ZTD correction,6:ZTD+grad correction + SBSOPT_LCORR+SBSOPT_FCORR+SBSOPT_ICORR+SBSOPT_RANGE, // SBAS correction options (can be added): SBSOPT_LCORR(1): long term correction, SBSOPT_FCORR(2): fast correction, SBSOPT_ICORR(4): ionosphere correction, SBSOPT_RANGE(8): ranging + false, // RAIM enabled + D2R*30.0, // min elevation (degrees) + 0, // maxgdop: reject threshold of gdop + true, false, true, true, false, false, false, false, //GPS,SBS,GLO,GAL,QZS,CMP,IRN,LEO; // constellations used + {0} // TDCP options +}; + // forward declarations class Observations; class Navigation; diff --git a/include/gnss_utils/tdcp.h b/include/gnss_utils/tdcp.h index f5f8a8205a6ad183aa8505471dd3acc96e07fa11..7885eb45d1d25d69f89ebe921a186ce9b921c1fa 100644 --- a/include/gnss_utils/tdcp.h +++ b/include/gnss_utils/tdcp.h @@ -14,7 +14,7 @@ struct TdcpBatchParams int raim_n; double raim_min_residual; bool relinearize_jacobian; - bool use_old_nav; + bool old_nav; int max_iterations; }; diff --git a/src/observations.cpp b/src/observations.cpp index 191ed998efac58027feb800933cda805bf915f82..a6b856a351de30b8aa0dedd2cecdf0cef6c32f17 100644 --- a/src/observations.cpp +++ b/src/observations.cpp @@ -422,7 +422,7 @@ std::set<int> Observations::filter(const Satellites& sats, opt.getNavSys(), opt.getSnrMask(), opt.elmin, - opt.ionoopt == IONOOPT_IFLC or (opt.tdcp.enabled and opt.tdcp.use_multi_freq)); + opt.ionoopt == IONOOPT_IFLC or (opt.tdcp.enabled and opt.tdcp.multi_freq)); } std::set<int> Observations::filter(const Satellites& sats, @@ -494,7 +494,7 @@ std::set<int> Observations::filter(const Satellites& sats, opt.getNavSys(), opt.getSnrMask(), opt.elmin, - opt.ionoopt == IONOOPT_IFLC or (opt.tdcp.enabled and opt.tdcp.use_multi_freq)); + opt.ionoopt == IONOOPT_IFLC or (opt.tdcp.enabled and opt.tdcp.multi_freq)); } std::set<int> Observations::filter(const Satellites& sats, diff --git a/src/tdcp.cpp b/src/tdcp.cpp index 9207f4cf0e3a4cc4515a80789fcf9b8d71c4ce23..783f738183e3935f254ac7bdf371e3cc3c0d4e77 100644 --- a/src/tdcp.cpp +++ b/src/tdcp.cpp @@ -40,7 +40,7 @@ bool Tdcp(SnapshotPtr snapshot_r, { // If use old nav temporary change navigation to (re)compute satellites positions auto nav_k = snapshot_k->getNavigation(); - if (tdcp_params.use_old_nav) + if (tdcp_params.old_nav) { snapshot_k->getSatellites().clear(); snapshot_k->setNavigation(snapshot_r->getNavigation()); @@ -82,7 +82,7 @@ bool Tdcp(SnapshotPtr snapshot_r, tdcp_params); // UNDO temporary change navigation - if (tdcp_params.use_old_nav) + if (tdcp_params.old_nav) { snapshot_k->setNavigation(nav_k); snapshot_k->computeSatellites(opt.sateph); @@ -155,7 +155,7 @@ bool Tdcp(SnapshotPtr snapshot_r, if (std::abs(obs_r.L[0]) > 1e-12 and std::abs(obs_k.L[0]) > 1e-12) row_2_sat_freq[row++] = std::make_pair(sat, 0); - if (!tdcp_params.tdcp.use_multi_freq) + if (!tdcp_params.tdcp.multi_freq) continue; // L2 (GPS/GLO/QZS) @@ -310,7 +310,7 @@ bool Tdcp(SnapshotPtr snapshot_r, // Multi-freq: some rows for the same satellite n_removed_rows = 1; - if (tdcp_params.tdcp.use_multi_freq) + if (tdcp_params.tdcp.multi_freq) while (row_removed + n_removed_rows < A_raim.rows() and row_2_sat_freq.at(row_removed + n_removed_rows).first == sat_removed) n_removed_rows++;