diff --git a/include/gnss/processor/processor_gnss_tdcp.h b/include/gnss/processor/processor_gnss_tdcp.h index 13291adca12eb9f5d49d8a49e2636f82085bc8c4..dd43403b7b9de8044f15ec4f2af64b0cc7ea127d 100644 --- a/include/gnss/processor/processor_gnss_tdcp.h +++ b/include/gnss/processor/processor_gnss_tdcp.h @@ -23,7 +23,7 @@ WOLF_STRUCT_PTR_TYPEDEFS(ParamsProcessorGnssTdcp); struct ParamsProcessorGnssTdcp : public ParamsProcessorGnssFix { - struct GnssUtils::TdcpBatchParams tdcp; + struct GnssUtils::TdcpOptions tdcp; ParamsProcessorGnssTdcp() = default; ParamsProcessorGnssTdcp(std::string _unique_name, const ParamsServer& _server): @@ -33,17 +33,18 @@ struct ParamsProcessorGnssTdcp : public ParamsProcessorGnssFix tdcp.raim_n = _server.getParam<double>(prefix + _unique_name + "/tdcp/raim_n"); tdcp.max_residual = _server.getParam<double>(prefix + _unique_name + "/tdcp/max_residual"); tdcp.residual_opt = _server.getParam<int> (prefix + _unique_name + "/tdcp/residual_opt"); - tdcp.tdcp.sigma_atm = _server.getParam<double>(prefix + _unique_name + "/tdcp/sigma_atm"); - tdcp.tdcp.sigma_carrier = _server.getParam<double>(prefix + _unique_name + "/tdcp/sigma_carrier"); - tdcp.tdcp.time_window = _server.getParam<double>(prefix + _unique_name + "/tdcp/time_window"); + tdcp.sigma_atm = _server.getParam<double>(prefix + _unique_name + "/tdcp/sigma_atm"); + tdcp.sigma_carrier = _server.getParam<double>(prefix + _unique_name + "/tdcp/sigma_carrier"); + tdcp.time_window = _server.getParam<double>(prefix + _unique_name + "/tdcp/time_window"); // hardcoded params - tdcp.tdcp.corr_tropo = false; - tdcp.tdcp.corr_iono = false; + compute_pos_opt.carrier_opt.corr_tropo = false; + compute_pos_opt.carrier_opt.corr_iono = false; + compute_pos_opt.carrier_opt.corr_clock = false; tdcp.relinearize_jacobian = false; tdcp.max_iterations = 1; - tdcp.tdcp.use_old_nav = false; - tdcp.tdcp.multi_freq = false; + tdcp.use_old_nav = false; + tdcp.multi_freq = false; } std::string print() const override { @@ -52,9 +53,9 @@ struct ParamsProcessorGnssTdcp : public ParamsProcessorGnssFix + "tdcp/raim_n: " + std::to_string(tdcp.raim_n) + "\n" + "tdcp/max_residual: " + std::to_string(tdcp.max_residual) + "\n" + "tdcp/residual_opt: " + std::to_string(tdcp.residual_opt) + "\n" - + "tdcp/sigma_atm: " + std::to_string(tdcp.tdcp.sigma_atm) + "\n" - + "tdcp/sigma_carrier: " + std::to_string(tdcp.tdcp.sigma_carrier)+ "\n" - + "tdcp/time_window: " + std::to_string(tdcp.tdcp.time_window) + "\n"; + + "tdcp/sigma_atm: " + std::to_string(tdcp.sigma_atm) + "\n" + + "tdcp/sigma_carrier: " + std::to_string(tdcp.sigma_carrier)+ "\n" + + "tdcp/time_window: " + std::to_string(tdcp.time_window) + "\n"; } }; diff --git a/include/gnss/processor/processor_tracker_gnss.h b/include/gnss/processor/processor_tracker_gnss.h index 67495633d1e064215fd854328cfdba5504c20d7c..c821bffac1a775b2c5d0957cd2d14b8306028e42 100644 --- a/include/gnss/processor/processor_tracker_gnss.h +++ b/include/gnss/processor/processor_tracker_gnss.h @@ -18,13 +18,14 @@ struct ParamsProcessorTrackerGnss : public ParamsProcessorTrackerFeature { GnssUtils::Options gnss_opt; GnssUtils::Options fix_opt{GnssUtils::default_options}; - GnssUtils::TdcpBatchParams tdcp_batch_params; + GnssUtils::TdcpOptions tdcp_params; double max_time_span; bool remove_outliers, remove_outliers_tdcp, remove_outliers_with_fix; double outlier_residual_th; bool init_frames, pseudo_ranges, fix; double enu_map_fix_dist; int min_sbas_sats; + bool tdcp_enabled; bool tdcp_all_against_all; ParamsProcessorTrackerGnss() = default; @@ -61,28 +62,27 @@ struct ParamsProcessorTrackerGnss : public ParamsProcessorTrackerFeature gnss_opt.LEO = _server.getParam<bool>(prefix + _unique_name + "/gnss/constellations/LEO"); // TDCP - gnss_opt.tdcp.enabled = _server.getParam<bool>(prefix + _unique_name + "/gnss/tdcp/enabled"); - if (gnss_opt.tdcp.enabled) + tdcp_enabled = _server.getParam<bool>(prefix + _unique_name + "/gnss/tdcp/enabled"); + if (tdcp_enabled) { - remove_outliers_tdcp = _server.getParam<bool> (prefix + _unique_name + "/gnss/tdcp/remove_outliers"); - gnss_opt.tdcp.batch = _server.getParam<bool> (prefix + _unique_name + "/gnss/tdcp/batch"); - gnss_opt.tdcp.corr_iono = _server.getParam<bool> (prefix + _unique_name + "/gnss/tdcp/corr_iono"); - gnss_opt.tdcp.corr_tropo = _server.getParam<bool> (prefix + _unique_name + "/gnss/tdcp/corr_tropo"); - gnss_opt.tdcp.loss_function = _server.getParam<bool> (prefix + _unique_name + "/gnss/tdcp/loss_function"); - gnss_opt.tdcp.time_window = _server.getParam<double>(prefix + _unique_name + "/gnss/tdcp/time_window"); - gnss_opt.tdcp.sigma_atm = _server.getParam<double>(prefix + _unique_name + "/gnss/tdcp/sigma_atm"); - gnss_opt.tdcp.sigma_carrier = _server.getParam<double>(prefix + _unique_name + "/gnss/tdcp/sigma_carrier"); - gnss_opt.tdcp.multi_freq = _server.getParam<bool> (prefix + _unique_name + "/gnss/tdcp/multi_freq"); - if (gnss_opt.tdcp.batch) + remove_outliers_tdcp = _server.getParam<bool> (prefix + _unique_name + "/gnss/tdcp/remove_outliers"); + tdcp_params.batch = _server.getParam<bool> (prefix + _unique_name + "/gnss/tdcp/batch"); + gnss_opt.carrier_opt.corr_iono = _server.getParam<bool> (prefix + _unique_name + "/gnss/tdcp/corr_iono"); + gnss_opt.carrier_opt.corr_tropo = _server.getParam<bool> (prefix + _unique_name + "/gnss/tdcp/corr_tropo"); + gnss_opt.carrier_opt.corr_clock = _server.getParam<bool> (prefix + _unique_name + "/gnss/tdcp/corr_clock"); + tdcp_params.loss_function = _server.getParam<bool> (prefix + _unique_name + "/gnss/tdcp/loss_function"); + tdcp_params.time_window = _server.getParam<double>(prefix + _unique_name + "/gnss/tdcp/time_window"); + tdcp_params.sigma_atm = _server.getParam<double>(prefix + _unique_name + "/gnss/tdcp/sigma_atm"); + tdcp_params.sigma_carrier = _server.getParam<double>(prefix + _unique_name + "/gnss/tdcp/sigma_carrier"); + tdcp_params.multi_freq = _server.getParam<bool> (prefix + _unique_name + "/gnss/tdcp/multi_freq"); + if (tdcp_params.batch) { - tdcp_batch_params.min_common_sats = _server.getParam<int> (prefix + _unique_name + "/gnss/tdcp/min_common_sats"); - tdcp_batch_params.raim_n = _server.getParam<int> (prefix + _unique_name + "/gnss/tdcp/raim_n"); - tdcp_batch_params.max_residual = _server.getParam<double> (prefix + _unique_name + "/gnss/tdcp/max_residual"); - tdcp_batch_params.relinearize_jacobian = _server.getParam<bool> (prefix + _unique_name + "/gnss/tdcp/relinearize_jacobian"); - tdcp_batch_params.max_iterations = _server.getParam<int> (prefix + _unique_name + "/gnss/tdcp/max_iterations"); - tdcp_batch_params.residual_opt = _server.getParam<int> (prefix + _unique_name + "/gnss/tdcp/residual_opt"); - tdcp_batch_params.tdcp.multi_freq = gnss_opt.tdcp.multi_freq; - tdcp_batch_params.tdcp = gnss_opt.tdcp; + tdcp_params.min_common_sats = _server.getParam<int> (prefix + _unique_name + "/gnss/tdcp/min_common_sats"); + tdcp_params.raim_n = _server.getParam<int> (prefix + _unique_name + "/gnss/tdcp/raim_n"); + tdcp_params.max_residual = _server.getParam<double> (prefix + _unique_name + "/gnss/tdcp/max_residual"); + tdcp_params.relinearize_jacobian = _server.getParam<bool> (prefix + _unique_name + "/gnss/tdcp/relinearize_jacobian"); + tdcp_params.max_iterations = _server.getParam<int> (prefix + _unique_name + "/gnss/tdcp/max_iterations"); + tdcp_params.residual_opt = _server.getParam<int> (prefix + _unique_name + "/gnss/tdcp/residual_opt"); } } @@ -128,16 +128,17 @@ struct ParamsProcessorTrackerGnss : public ParamsProcessorTrackerFeature + "gnss/constellations/CMP: " + std::to_string(gnss_opt.CMP) + "\n" + "gnss/constellations/IRN: " + std::to_string(gnss_opt.IRN) + "\n" + "gnss/constellations/LEO: " + std::to_string(gnss_opt.LEO) + "\n" - + "gnss/tdcp/enabled: " + std::to_string(gnss_opt.tdcp.enabled) + "\n" + + "gnss/tdcp/enabled: " + std::to_string(tdcp_enabled) + "\n" + "gnss/tdcp/all_agains_all: " + std::to_string(tdcp_all_against_all) + "\n" - + "gnss/tdcp/batch: " + std::to_string(gnss_opt.tdcp.batch) + "\n" - + "gnss/tdcp/corr_iono: " + std::to_string(gnss_opt.tdcp.corr_iono) + "\n" - + "gnss/tdcp/corr_tropo: " + std::to_string(gnss_opt.tdcp.corr_tropo) + "\n" - + "gnss/tdcp/loss_function: " + std::to_string(gnss_opt.tdcp.loss_function) + "\n" - + "gnss/tdcp/time_window: " + std::to_string(gnss_opt.tdcp.time_window) + "\n" - + "gnss/tdcp/sigma_atm: " + std::to_string(gnss_opt.tdcp.sigma_atm) + "\n" - + "gnss/tdcp/sigma_carrier: " + std::to_string(gnss_opt.tdcp.sigma_carrier) + "\n" - + "gnss/tdcp/multi_freq: " + std::to_string(gnss_opt.tdcp.multi_freq) + "\n"; + + "gnss/tdcp/batch: " + std::to_string(tdcp_params.batch) + "\n" + + "gnss/tdcp/corr_iono: " + std::to_string(gnss_opt.carrier_opt.corr_iono)+ "\n" + + "gnss/tdcp/corr_tropo: " + std::to_string(gnss_opt.carrier_opt.corr_tropo)+ "\n" + + "gnss/tdcp/corr_clock: " + std::to_string(gnss_opt.carrier_opt.corr_clock)+ "\n" + + "gnss/tdcp/loss_function: " + std::to_string(tdcp_params.loss_function) + "\n" + + "gnss/tdcp/time_window: " + std::to_string(tdcp_params.time_window) + "\n" + + "gnss/tdcp/sigma_atm: " + std::to_string(tdcp_params.sigma_atm) + "\n" + + "gnss/tdcp/sigma_carrier: " + std::to_string(tdcp_params.sigma_carrier) + "\n" + + "gnss/tdcp/multi_freq: " + std::to_string(tdcp_params.multi_freq) + "\n"; } }; diff --git a/src/processor/processor_gnss_tdcp.cpp b/src/processor/processor_gnss_tdcp.cpp index 4e27bb919022a3cfc40fa5cad9342167f44e4f14..3f2c15cfa393a235a4de3520638a0d82de28d80e 100644 --- a/src/processor/processor_gnss_tdcp.cpp +++ b/src/processor/processor_gnss_tdcp.cpp @@ -141,7 +141,7 @@ void ProcessorGnssTdcp::processKeyFrame(FrameBasePtr _keyframe, const double& _t continue; // stop if KF_ref too old w.r.t. keyframe - if (_keyframe->getTimeStamp() - KF_ref->getTimeStamp() > params_tdcp_->tdcp.tdcp.time_window) + if (_keyframe->getTimeStamp() - KF_ref->getTimeStamp() > params_tdcp_->tdcp.time_window) break; // Get feature GNSS fix diff --git a/src/processor/processor_tracker_gnss.cpp b/src/processor/processor_tracker_gnss.cpp index ae16732675aad95f535b0f0d7b540dd27852494e..ca533fc159fe61c19abe897f6d2e1237acd69d0b 100644 --- a/src/processor/processor_tracker_gnss.cpp +++ b/src/processor/processor_tracker_gnss.cpp @@ -381,10 +381,10 @@ void ProcessorTrackerGnss::establishFactors() } // TDCP FACTORS (tracked sats) - if (origin_ptr_ != last_ptr_ and params_tracker_gnss_->gnss_opt.tdcp.enabled) + if (origin_ptr_ != last_ptr_ and params_tracker_gnss_->tdcp_enabled) { // Displacement factor from batch TDCP (FactorGnssTdcp3d) - if (params_tracker_gnss_->gnss_opt.tdcp.batch) + if (params_tracker_gnss_->tdcp_params.batch) { WOLF_DEBUG("TDCP BATCH frame ", last_ptr_->getFrame()->id()); @@ -414,7 +414,7 @@ void ProcessorTrackerGnss::establishFactors() continue; // within time window - if (dt > params_tracker_gnss_->gnss_opt.tdcp.time_window) + if (dt > params_tracker_gnss_->tdcp_params.time_window) break; // discard removing Frame/capture/feature @@ -455,7 +455,7 @@ void ProcessorTrackerGnss::establishFactors() x_r, common_sats, Eigen::Vector4d::Zero(), - params_tracker_gnss_->tdcp_batch_params); + params_tracker_gnss_->tdcp_params); if (tdcp_output.success) { WOLF_DEBUG("TDCP BATCH d = ", tdcp_output.d.transpose()); @@ -517,7 +517,7 @@ void ProcessorTrackerGnss::establishFactors() continue; // within time window - if (dt > params_tracker_gnss_->gnss_opt.tdcp.time_window) + if (dt > params_tracker_gnss_->tdcp_params.time_window) break; // discard removing Frame/capture/feature @@ -530,14 +530,14 @@ void ProcessorTrackerGnss::establishFactors() WOLF_DEBUG("previous feature at KF: ", ftr_r->getCapture()->getFrame()->id(), " sat: ", ftr_r->satNumber(), " id: ", ftr_r->id()); // emplace tdcp factor - double var_tdcp = dt * std::pow(params_tracker_gnss_->gnss_opt.tdcp.sigma_atm,2) + std::pow(params_tracker_gnss_->gnss_opt.tdcp.sigma_carrier,2); + double var_tdcp = dt * std::pow(params_tracker_gnss_->tdcp_params.sigma_atm,2) + std::pow(params_tracker_gnss_->tdcp_params.sigma_carrier,2); auto new_fac = FactorBase::emplace<FactorGnssTdcp>(ftr_k, sqrt(var_tdcp), ftr_r, ftr_k, sensor_gnss_, shared_from_this(), - params_tracker_gnss_->gnss_opt.tdcp.loss_function); + params_tracker_gnss_->tdcp_params.loss_function); new_factors.push_back(new_fac); // WOLF_DEBUG( "Factor: track: " , feature_in_last->trackId(), @@ -799,7 +799,7 @@ void ProcessorTrackerGnss::removeOutliers(FactorBasePtrList fac_list, CaptureBas "\n\tPseudorange: ", outliers_pseudorange_, "\t( ", (100.0 * outliers_pseudorange_)/(outliers_pseudorange_+inliers_pseudorange_), " %)"); if (not remove_fac.empty() and - params_tracker_gnss_->gnss_opt.tdcp.enabled and + params_tracker_gnss_->tdcp_enabled and params_tracker_gnss_->remove_outliers_tdcp) std::cout << "\tTDCP: " << outliers_tdcp_