Skip to content
Snippets Groups Projects
Commit dc455e44 authored by Joan Solà Ortega's avatar Joan Solà Ortega
Browse files

Merge branch 'devel' of...

Merge branch 'devel' of ssh://gitlab.iri.upc.edu:2202/mobile_robotics/gauss_project/gnss_utils into devel
parents 3bc0ffbd c9c15060
No related branches found
No related tags found
2 merge requests!20new tag,!19new tag
...@@ -66,22 +66,22 @@ struct ComputePosOutput ...@@ -66,22 +66,22 @@ struct ComputePosOutput
}; };
/* defaults processing options */ /* defaults processing options */
const prcopt_t opt_default = { const prcopt_t default_prcopt = {
PMODE_SINGLE, /* mode: positioning mode (PMODE_???) */ PMODE_SINGLE, /* mode: positioning mode (PMODE_???) */
0, /* soltype: solution type (0:forward,1:backward,2:combined) */ 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) */ 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 */ SYS_GPS|SYS_GLO|SYS_GAL, /* navsys */
15.0*D2R,{{0,0}}, /* elmin (rad) ,snrmask */ 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 */ 3,3,1,0,1, /* modear,glomodear,gpsmodear,bdsmodear,arfilter */
20,0,4,5,10,20, /* maxout,minlock,minfixsats,minholdsats,mindropsats,minfix */ 20,0,4,5,10,20, /* maxout,minlock,minfixsats,minholdsats,mindropsats,minfix */
0,1, /* rcvstds,armaxiter */ 0,1, /* rcvstds,armaxiter */
IONOOPT_BRDC, /* ionoopt: ionosphere option (IONOOPT_???) */ 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: troposphere option (TROPOPT_???) */ 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 */ 1,0, /* dynamics,tidecorr */
3, /* niter: number of filter iteration */ 3, /* niter: number of filter iteration */
0,0, /* codesmooth,intpref */ 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, /* sbasssatsel: SBAS satellite selection (0:all) */
0,0, /* rovpos,refpos */ 0,0, /* rovpos,refpos */
WEIGHTOPT_ELEVATION, /* weightmode */ WEIGHTOPT_ELEVATION, /* weightmode */
...@@ -115,20 +115,19 @@ struct TdcpOptions ...@@ -115,20 +115,19 @@ struct TdcpOptions
bool corr_iono; // apply correction also in TDCP bool corr_iono; // apply correction also in TDCP
bool corr_tropo; // apply correction also in TDCP bool corr_tropo; // apply correction also in TDCP
bool loss_function; // apply loss function in TDCP factors 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_atm;
double sigma_carrier; double sigma_carrier;
bool use_old_nav; bool use_old_nav;
bool use_multi_freq; bool multi_freq;
double time_window; // window of time in which we perform TDCP double time_window; // window of time in which we perform TDCP
}; };
struct Options 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 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,5:IONEX TEC model,6:QZSS broadcast,7:QZSS LEX ionosphere,8:SLANT TEC mode) 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: (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 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 option (1:long term correction,2:fast correction,4:ionosphere correction,8:ranging) 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 bool raim; // RAIM enabled
double elmin; // min elevation (degrees) double elmin; // min elevation (degrees)
double maxgdop; // maxgdop: reject threshold of gdop double maxgdop; // maxgdop: reject threshold of gdop
...@@ -143,13 +142,13 @@ struct Options ...@@ -143,13 +142,13 @@ struct Options
snrmask_t getSnrMask() const snrmask_t getSnrMask() const
{ {
return opt_default.snrmask; return default_prcopt.snrmask;
} }
// create a rtklib option struct from this // create a rtklib option struct from this
prcopt_t getPrcopt() const prcopt_t getPrcopt() const
{ {
prcopt_t opt{opt_default}; prcopt_t opt{default_prcopt};
opt.sateph = sateph; opt.sateph = sateph;
opt.ionoopt = ionoopt; opt.ionoopt = ionoopt;
opt.tropopt = tropopt; opt.tropopt = tropopt;
...@@ -162,6 +161,19 @@ struct Options ...@@ -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 // forward declarations
class Observations; class Observations;
class Navigation; class Navigation;
......
...@@ -14,7 +14,7 @@ struct TdcpBatchParams ...@@ -14,7 +14,7 @@ struct TdcpBatchParams
int raim_n; int raim_n;
double raim_min_residual; double raim_min_residual;
bool relinearize_jacobian; bool relinearize_jacobian;
bool use_old_nav; bool old_nav;
int max_iterations; int max_iterations;
}; };
......
...@@ -422,7 +422,7 @@ std::set<int> Observations::filter(const Satellites& sats, ...@@ -422,7 +422,7 @@ std::set<int> Observations::filter(const Satellites& sats,
opt.getNavSys(), opt.getNavSys(),
opt.getSnrMask(), opt.getSnrMask(),
opt.elmin, 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, std::set<int> Observations::filter(const Satellites& sats,
...@@ -494,7 +494,7 @@ std::set<int> Observations::filter(const Satellites& sats, ...@@ -494,7 +494,7 @@ std::set<int> Observations::filter(const Satellites& sats,
opt.getNavSys(), opt.getNavSys(),
opt.getSnrMask(), opt.getSnrMask(),
opt.elmin, 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, std::set<int> Observations::filter(const Satellites& sats,
......
...@@ -40,7 +40,7 @@ bool Tdcp(SnapshotPtr snapshot_r, ...@@ -40,7 +40,7 @@ bool Tdcp(SnapshotPtr snapshot_r,
{ {
// If use old nav temporary change navigation to (re)compute satellites positions // If use old nav temporary change navigation to (re)compute satellites positions
auto nav_k = snapshot_k->getNavigation(); auto nav_k = snapshot_k->getNavigation();
if (tdcp_params.use_old_nav) if (tdcp_params.old_nav)
{ {
snapshot_k->getSatellites().clear(); snapshot_k->getSatellites().clear();
snapshot_k->setNavigation(snapshot_r->getNavigation()); snapshot_k->setNavigation(snapshot_r->getNavigation());
...@@ -82,7 +82,7 @@ bool Tdcp(SnapshotPtr snapshot_r, ...@@ -82,7 +82,7 @@ bool Tdcp(SnapshotPtr snapshot_r,
tdcp_params); tdcp_params);
// UNDO temporary change navigation // UNDO temporary change navigation
if (tdcp_params.use_old_nav) if (tdcp_params.old_nav)
{ {
snapshot_k->setNavigation(nav_k); snapshot_k->setNavigation(nav_k);
snapshot_k->computeSatellites(opt.sateph); snapshot_k->computeSatellites(opt.sateph);
...@@ -155,7 +155,7 @@ bool Tdcp(SnapshotPtr snapshot_r, ...@@ -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) 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); row_2_sat_freq[row++] = std::make_pair(sat, 0);
if (!tdcp_params.tdcp.use_multi_freq) if (!tdcp_params.tdcp.multi_freq)
continue; continue;
// L2 (GPS/GLO/QZS) // L2 (GPS/GLO/QZS)
...@@ -310,7 +310,7 @@ bool Tdcp(SnapshotPtr snapshot_r, ...@@ -310,7 +310,7 @@ bool Tdcp(SnapshotPtr snapshot_r,
// Multi-freq: some rows for the same satellite // Multi-freq: some rows for the same satellite
n_removed_rows = 1; 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 while (row_removed + n_removed_rows < A_raim.rows() and
row_2_sat_freq.at(row_removed + n_removed_rows).first == sat_removed) row_2_sat_freq.at(row_removed + n_removed_rows).first == sat_removed)
n_removed_rows++; n_removed_rows++;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment