diff --git a/include/gnss/processor/processor_tracker_gnss.h b/include/gnss/processor/processor_tracker_gnss.h index 51b2fe8824ad6bb53d1cecaa1ca55e322f1eae9f..31c834b5dc71146d4aa995fb003fd9eddd15a136 100644 --- a/include/gnss/processor/processor_tracker_gnss.h +++ b/include/gnss/processor/processor_tracker_gnss.h @@ -37,8 +37,8 @@ struct ParamsProcessorTrackerGnss : public ParamsProcessorTrackerFeature pseudo_ranges = _server.getParam<bool> (prefix + _unique_name + "/pseudo_ranges"); // GNSS OPTIONS (see rtklib.h) - gnss_opt.sateph = _server.getParam<int> (prefix + _unique_name + "/gnss/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 - gnss_opt.ionoopt = _server.getParam<int> (prefix + _unique_name + "/gnss/ionoopt"); // ionosphere option (0:correction off,1:broadcast mode,2:SBAS model,3:L1/L2 or L1/L5,4:estimation,5:IONEX TEC model,6:QZSS broadcast,7:QZSS LEX ionosphere,8:SLANT TEC mode) + gnss_opt.sateph = _server.getParam<int> (prefix + _unique_name + "/gnss/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, EPHOPT_SBAS2(6):broadcast + SBAS(sats with SBAS corr and sats with BRDC eph), EPHOPT_SBAS3(7):broadcast + SBAS(EPHOPT_SBAS if possible, otherwise EPHOPT_SBAS2), EPHOPT_SBAS4(8):broadcast + SBAS(EPHOPT_SBAS if possible, otherwise EPHOPT_BRDC) + gnss_opt.ionoopt = _server.getParam<int> (prefix + _unique_name + "/gnss/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, IONOOPT_SBAS2(9):broadcast + SBAS(sats with SBAS corr and sats with BRDC eph), IONOOPT_SBAS3(10):broadcast + SBAS(IONOOPT_SBAS if possible, otherwise IONOOPT_SBAS2), IONOOPT_SBAS4(8):broadcast + SBAS(IONOOPT_SBAS if possible, otherwise IONOOPT_BRDC) gnss_opt.tropopt = _server.getParam<int> (prefix + _unique_name + "/gnss/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) gnss_opt.sbascorr = _server.getParam<int> (prefix + _unique_name + "/gnss/sbascorr");// SBAS option (1:long term correction,2:fast correction,4:ionosphere correction,8:ranging) gnss_opt.raim = _server.getParam<int> (prefix + _unique_name + "/gnss/raim"); // RAIM enabled @@ -82,6 +82,16 @@ struct ParamsProcessorTrackerGnss : public ParamsProcessorTrackerFeature // COMPUTE FIX OPTIONS (RAIM) fix_opt.elmin = 0; fix_opt.maxgdop = 30; + fix_opt.raim = gnss_opt.raim; + // same constellations + fix_opt.GPS = gnss_opt.GPS; + fix_opt.SBS = gnss_opt.SBS; + fix_opt.GLO = gnss_opt.GLO; + fix_opt.GAL = gnss_opt.GAL; + fix_opt.QZS = gnss_opt.QZS; + fix_opt.CMP = gnss_opt.CMP; + fix_opt.IRN = gnss_opt.IRN; + fix_opt.LEO = gnss_opt.LEO; } std::string print() const diff --git a/src/processor/processor_tracker_gnss.cpp b/src/processor/processor_tracker_gnss.cpp index 3c8bdf9b09497c10d76af3b25f60786853dcec61..a26e2978a74f63e1d80063545386d1e19c7f76ae 100644 --- a/src/processor/processor_tracker_gnss.cpp +++ b/src/processor/processor_tracker_gnss.cpp @@ -63,10 +63,15 @@ void ProcessorTrackerGnss::preProcess() } // Set ECEF-ENU - if (!sensor_gnss_->isEnuDefined() and sensor_gnss_->isEnuModeAuto() and fix_incoming_.success) + if (!sensor_gnss_->isEnuDefined() and sensor_gnss_->isEnuModeAuto() ) { - WOLF_DEBUG("setting ECEF-ENU: ", fix_incoming_.pos.transpose()); - sensor_gnss_->setEcefEnu(fix_incoming_.pos, true); + if (fix_incoming_.success) + { + WOLF_DEBUG("setting ECEF-ENU: ", fix_incoming_.pos.transpose()); + sensor_gnss_->setEcefEnu(fix_incoming_.pos, true); + } + else + WOLF_WARN("Failed to compute fix to set ECEF-ENU in auto mode. Message: ", fix_incoming_.msg); } // Fix ENU-MAP if ((fix_incoming_.pos - first_pos_).norm() > params_tracker_gnss_->enu_map_fix_dist) @@ -105,9 +110,13 @@ void ProcessorTrackerGnss::preProcess() untracked_incoming_features_[feat->satNumber()] = feat; } + std::string discarded_str; + for (auto sat : fix_incoming_.discarded_sats) + discarded_str += std::to_string(sat) + " "; + WOLF_DEBUG("ProcessorTrackerGnss::preProcess()", "\n\tinitial observations: ", n_initial, - "\n\tRTKLIB discarded: ", fix_incoming_.discarded_sats.size(), + "\n\tRTKLIB discarded: ", fix_incoming_.discarded_sats.size(), " (", discarded_str, ")", "\n\tgnssutils discarded: ", n_initial - untracked_incoming_features_.size() - fix_incoming_.discarded_sats.size(), "\n\tdetected incoming features: ", untracked_incoming_features_.size()); }