diff --git a/src/algorithms/PVT/adapters/rtklib_pvt.cc b/src/algorithms/PVT/adapters/rtklib_pvt.cc index c2db5ed3d..59641df60 100644 --- a/src/algorithms/PVT/adapters/rtklib_pvt.cc +++ b/src/algorithms/PVT/adapters/rtklib_pvt.cc @@ -231,7 +231,6 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration, In case of RAIM FDE enabled, a satellite is excluded if SSE (sum of squared errors) of residuals is over a threshold. The excluded satellite is selected to indicate the minimum SSE. */ - int nsys = 0; if ((gps_1C_count > 0) || (gps_2S_count > 0)) nsys += SYS_GPS; if ((gal_1B_count > 0) || (gal_E5a_count > 0) || (gal_E5b_count > 0)) nsys += SYS_GAL; @@ -263,12 +262,13 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration, integer_ambiguity_resolution_bds = 1; } - //int max_iter_resolve_ambiguity = configuration->property(role + ".max_iter_resolve_ambiguity", 1); + double min_ratio_to_fix_ambiguity = configuration->property(role + ".min_ratio_to_fix_ambiguity", 3.0); /* Set the integer ambiguity validation threshold for ratio‐test, + which uses the ratio of squared residuals of the best integer vector to the second‐best vector. */ int min_lock_to_fix_ambiguity = configuration->property(role + ".min_lock_to_fix_ambiguity", 0); /* Set the minimum lock count to fix integer ambiguity. If the lock count is less than the value, the ambiguity is excluded from the fixed integer vector. */ - double min_elevation_to_fix_ambiguity = configuration->property(role + ".min_elevation_to_fix_ambiguity", 0.0); /* Set the minimum eveation (deg) to fix integer ambiguity. + double min_elevation_to_fix_ambiguity = configuration->property(role + ".min_elevation_to_fix_ambiguity", 0.0); /* Set the minimum elevation (deg) to fix integer ambiguity. If the elevation of the satellite is less than the value, the ambiguity is excluded from the fixed integer vector. */ int outage_reset_ambiguity = configuration->property(role + ".outage_reset_ambiguity", 5); /* Set the outage count to reset ambiguity. If the data outage count is over the value, the estimated ambiguity is reset to the initial value. */ @@ -279,6 +279,12 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration, double threshold_reject_innovation = configuration->property(role + ".threshold_reject_innovation", 30.0); /* reject threshold of innovation (m). If the innovation is over the value, the observable is excluded for the estimation process as an outlier. */ + int number_filter_iter = configuration->property(role + ".number_filter_iter", 1); /* Set the number of iteration in the measurement update of the estimation filter. + If the baseline length is very short like 1 m, the iteration may be effective to handle + the nonlinearity of measurement equation. */ + + + /// Statistics double bias_0 = configuration->property(role + ".bias_0", 30.0); @@ -319,11 +325,11 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration, trop_model, /* troposphere option (TROPOPT_XXX) */ dynamics_model, /* dynamics model (0:none, 1:velocity, 2:accel) */ 0, /* earth tide correction (0:off,1:solid,2:solid+otl+pole) */ - 1, /* number of filter iteration */ + number_filter_iter, /* number of filter iteration */ 0, /* code smoothing window size (0:none) */ 0, /* interpolate reference obs (for post mission) */ 0, /* sbssat_t sbssat SBAS correction options */ - 0, /* sbsion_t sbsion[MAXBAND+1] SBAS satellite selection (0:all) */ + {}, /* sbsion_t sbsion[MAXBAND+1] SBAS satellite selection (0:all) */ 0, /* rover position for fixed mode */ 0, /* base position for relative mode */ /* 0:pos in prcopt, 1:average of single pos, */ @@ -333,7 +339,7 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration, {bias_0,iono_0,trop_0}, /* std[3]: initial-state std [0]bias,[1]iono [2]trop*/ {sigma_bias,sigma_iono,sigma_trop,sigma_acch,sigma_accv,sigma_pos}, /* prn[6] process-noise std */ 5e-12, /* sclkstab: satellite clock stability (sec/sec) */ - {3.0,0.9999,0.25,0.1,0.05}, /* thresar[8]: AR validation threshold */ + {min_ratio_to_fix_ambiguity,0.9999,0.25,0.1,0.05,0.0,0.0,0.0}, /* thresar[8]: AR validation threshold */ min_elevation_to_fix_ambiguity, /* elevation mask of AR for rising satellite (deg) */ 0.0, /* elevation mask to hold ambiguity (deg) */ slip_threshold, /* slip threshold of geometry-free phase (m) */ @@ -343,8 +349,8 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration, {}, /* double baseline[2] baseline length constraint {const,sigma} (m) */ {}, /* double ru[3] rover position for fixed mode {x,y,z} (ecef) (m) */ {}, /* double rb[3] base position for relative mode {x,y,z} (ecef) (m) */ - {"",""}, /* char anttype[2][MAXANT] antenna types {rover,base} */ - {}, /* double antdel[2][3] antenna delta {{rov_e,rov_n,rov_u},{ref_e,ref_n,ref_u}} */ + {"",""}, /* char anttype[2][MAXANT] antenna types {rover,base} */ + {{},{}}, /* double antdel[2][3] antenna delta {{rov_e,rov_n,rov_u},{ref_e,ref_n,ref_u}} */ {}, /* pcv_t pcvr[2] receiver antenna parameters {rov,base} */ {}, /* unsigned char exsats[MAXSAT] excluded satellites (1:excluded, 2:included) */ 0, /* max averaging epoches */ diff --git a/src/algorithms/libs/rtklib/rtklib.h b/src/algorithms/libs/rtklib/rtklib.h index cd0e83435..776e0f2a1 100644 --- a/src/algorithms/libs/rtklib/rtklib.h +++ b/src/algorithms/libs/rtklib/rtklib.h @@ -270,12 +270,12 @@ const int TROPOPT_EST = 3; //!< troposphere option: ZTD estimation const int TROPOPT_ESTG = 4; //!< troposphere option: ZTD+grad estimation const int TROPOPT_ZTD = 5; //!< troposphere option: ZTD correction -const unsigned int EPHOPT_BRDC = 0; //!< ephemeris option: broadcast ephemeris -const unsigned int EPHOPT_PREC = 1; //!< ephemeris option: precise ephemeris -const unsigned int EPHOPT_SBAS = 2; //!< ephemeris option: broadcast + SBAS -const unsigned int EPHOPT_SSRAPC = 3; //!< ephemeris option: broadcast + SSR_APC -const unsigned int EPHOPT_SSRCOM = 4; //!< ephemeris option: broadcast + SSR_COM -const unsigned int EPHOPT_LEX = 5; //!< ephemeris option: QZSS LEX ephemeris +const int EPHOPT_BRDC = 0; //!< ephemeris option: broadcast ephemeris +const int EPHOPT_PREC = 1; //!< ephemeris option: precise ephemeris +const int EPHOPT_SBAS = 2; //!< ephemeris option: broadcast + SBAS +const int EPHOPT_SSRAPC = 3; //!< ephemeris option: broadcast + SSR_APC +const int EPHOPT_SSRCOM = 4; //!< ephemeris option: broadcast + SSR_COM +const int EPHOPT_LEX = 5; //!< ephemeris option: QZSS LEX ephemeris const double EFACT_GPS = 1.0; //!< error factor: GPS const double EFACT_GLO = 1.5; //!< error factor: GLONASS @@ -289,12 +289,12 @@ const int MAXEXFILE = 1024; //!< max number of expanded files const double MAXSBSAGEF = 30.0; //!< max age of SBAS fast correction (s) const double MAXSBSAGEL = 1800.0; //!< max age of SBAS long term corr (s) -const unsigned int ARMODE_OFF = 0; //!< AR mode: off -const unsigned int ARMODE_CONT = 1; //!< AR mode: continuous -const unsigned int ARMODE_INST = 2; //!< AR mode: instantaneous -const unsigned int ARMODE_FIXHOLD = 3; //!< AR mode: fix and hold -const unsigned int ARMODE_WLNL = 4; //!< AR mode: wide lane/narrow lane -const unsigned int ARMODE_TCAR = 5; //!< AR mode: triple carrier ar +const int ARMODE_OFF = 0; //!< AR mode: off +const int ARMODE_CONT = 1; //!< AR mode: continuous +const int ARMODE_INST = 2; //!< AR mode: instantaneous +const int ARMODE_FIXHOLD = 3; //!< AR mode: fix and hold +const int ARMODE_WLNL = 4; //!< AR mode: wide lane/narrow lane +const int ARMODE_TCAR = 5; //!< AR mode: triple carrier ar const int POSOPT_RINEX = 3; //!< pos option: rinex header pos */ @@ -444,7 +444,7 @@ typedef struct { /* SBAS ephemeris type */ typedef struct { /* norad two line element data type */ char name [32]; /* common name */ char alias[32]; /* alias name */ - char satno[16]; /* satellilte catalog number */ + char satno[16]; /* satellite catalog number */ char satclass; /* classification */ char desig[16]; /* international designator */ gtime_t epoch; /* element set epoch (UTC) */ @@ -734,8 +734,8 @@ typedef struct { /* solution type */ unsigned char stat; /* solution status (SOLQ_???) */ unsigned char ns; /* number of valid satellites */ float age; /* age of differential (s) */ - float ratio; /* AR ratio factor for valiation */ - float thres; /* AR ratio threshold for valiation */ + float ratio; /* AR ratio factor for validation */ + float thres; /* AR ratio threshold for validation */ } sol_t;