Skip to content
Snippets Groups Projects
Commit 642926e4 authored by Joan Vallvé Navarro's avatar Joan Vallvé Navarro
Browse files

bug in options SBAS

parent 73ad63d4
No related branches found
No related tags found
2 merge requests!28release after RAL,!27After 2nd RAL submission
......@@ -27,6 +27,11 @@ void ProcessorTrackerGnss::preProcess()
WOLF_DEBUG("ProcessorTrackerGnss::preProcess");
GnssUtils::SnapshotPtr inc_snapshot = std::static_pointer_cast<CaptureGnss>(incoming_ptr_)->getSnapshot();
GnssUtils::Options copy_opt = params_tracker_gnss_->gnss_opt;
bool eph_sbas34 = params_tracker_gnss_->gnss_opt.sateph == EPHOPT_SBAS3 or
params_tracker_gnss_->gnss_opt.sateph == EPHOPT_SBAS4;
bool iono_sbas34 = params_tracker_gnss_->gnss_opt.ionopt == IONOOPT_SBAS3 or
params_tracker_gnss_->gnss_opt.ionopt == IONOOPT_SBAS4;
#ifdef _WOLF_DEBUG
int n_initial = inc_snapshot->getObservations()->size();
......@@ -34,10 +39,14 @@ void ProcessorTrackerGnss::preProcess()
for (auto obs : inc_snapshot->getObservations()->getObservations())
initial_str += std::to_string(obs.sat) + " ";
#endif
// overload SBAS3 and SBAS4 first chance
if (eph_sbas34)
copy_opt.sateph = EPHOPT_SBAS;
if (iono_sbas34)
copy_opt.ionoopt = IONOPT_SBAS;
// compute satellites positions
if (!inc_snapshot ->satellitesComputed())
inc_snapshot ->computeSatellites(params_tracker_gnss_->gnss_opt.sateph);
inc_snapshot ->computeSatellites(copy_opt);
/* iono, tropo, eph and sbas options are the less restrictive to avoid RTKLIB to discard satellites
* corrections are applied in computeRanges, this fix is only used for:
......@@ -87,8 +96,12 @@ void ProcessorTrackerGnss::preProcess()
WOLF_DEBUG("TS: ", incoming_ptr_->getTimeStamp(), " - Fix solution (ECEF): ", fix_incoming_.pos.transpose(), " - Fix solution (GEO): ", fix_incoming_.lat_lon.transpose());
// store initial observation before filtering
GnssUtils::ObservationsPtr init_obs;
if (eph_sbas34 or iono_sbas34)
init_obs = std::make_shared<GnssUtils::Observations>(*inc_snapshot->getObservations());
// filter observations (available ephemeris, constellations and elevation&SNR)
auto init_obs = std::make_shared<GnssUtils::Observations>(*inc_snapshot->getObservations());
#ifdef _WOLF_DEBUG
auto discarded_gnssutils =
#endif
......@@ -96,42 +109,36 @@ void ProcessorTrackerGnss::preProcess()
fix_incoming_.sat_azel,
false, // check code
false, // check carrier phase
params_tracker_gnss_->gnss_opt);
copy_opt);
// compute corrected Ranges
inc_snapshot->computeRanges(fix_incoming_.sat_azel,
fix_incoming_.lat_lon,
params_tracker_gnss_->gnss_opt);
/* NOT ENOUGH SATS/RANGES in case of:
/* NOT ENOUGH SATS/RANGES in case of sbas34:
* eph: EPHOPT_SBAS3 and EPHOPT_SBAS4
* iono: IONOOPT_SBAS3 and IONOOPT_SBAS4
*/
if (inc_snapshot->getObservations()->size() < params_tracker_gnss_->min_sbas_sats and
(params_tracker_gnss_->gnss_opt.sateph == EPHOPT_SBAS3 or
params_tracker_gnss_->gnss_opt.sateph == EPHOPT_SBAS4 or
params_tracker_gnss_->gnss_opt.ionoopt == IONOOPT_SBAS3 or
params_tracker_gnss_->gnss_opt.ionoopt == IONOOPT_SBAS4))
(eph_sbas34 or iono_sbas34))
{
WOLF_DEBUG("ProcessorTrackerGnss::preProcess: with SBAS3/SBAS4, not enough ranges: ", inc_snapshot->getObservations()->size(), " Computing with SBAS2/BRDC");
int eph_opt_old = params_tracker_gnss_->gnss_opt.sateph;
int iono_opt_old = params_tracker_gnss_->gnss_opt.ionoopt;
if (eph_opt_old == EPHOPT_SBAS3)
params_tracker_gnss_->gnss_opt.sateph = EPHOPT_SBAS2;
if (eph_opt_old == EPHOPT_SBAS4)
params_tracker_gnss_->gnss_opt.sateph = EPHOPT_BRDC;
if (params_tracker_gnss_->gnss_opt.sateph == EPHOPT_SBAS3)
copy_opt.sateph.sateph = EPHOPT_SBAS2;
if (params_tracker_gnss_->gnss_opt.sateph == EPHOPT_SBAS4)
copy_opt.sateph.sateph = EPHOPT_BRDC;
if (iono_opt_old == IONOOPT_SBAS3)
params_tracker_gnss_->gnss_opt.ionoopt = IONOOPT_SBAS2;
if (iono_opt_old == IONOOPT_SBAS4)
params_tracker_gnss_->gnss_opt.ionoopt = IONOOPT_BRDC;
if (params_tracker_gnss_->gnss_opt.ionoopt == IONOOPT_SBAS3)
copy_opt.ionoopt = IONOOPT_SBAS2;
if (params_tracker_gnss_->gnss_opt.ionoopt == IONOOPT_SBAS4)
copy_opt.ionoopt = IONOOPT_BRDC;
// reset observations
inc_snapshot->setObservations(init_obs);
// recompute satellites
inc_snapshot ->computeSatellites(params_tracker_gnss_->gnss_opt.sateph);
inc_snapshot ->computeSatellites(copy_opt.sateph);
// filter
#ifdef _WOLF_DEBUG
discarded_gnssutils =
......@@ -140,18 +147,15 @@ void ProcessorTrackerGnss::preProcess()
fix_incoming_.sat_azel,
false, // check code
false, // check carrier phase
params_tracker_gnss_->gnss_opt);
copy_opt);
// recompute corrected Ranges
inc_snapshot->computeRanges(fix_incoming_.sat_azel,
fix_incoming_.lat_lon,
params_tracker_gnss_->gnss_opt);
copy_opt);
WOLF_DEBUG("ProcessorTrackerGnss::preProcess: with SBAS2/BRDC, obtained ranges: ", inc_snapshot->getObservations()->size());
params_tracker_gnss_->gnss_opt.sateph = eph_opt_old;
params_tracker_gnss_->gnss_opt.ionoopt = iono_opt_old;
}
// create features pseudorange
......
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