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

added optional check of residual

parent e04020bb
No related branches found
No related tags found
2 merge requests!20new tag,!19new tag
...@@ -12,6 +12,7 @@ struct TdcpBatchParams ...@@ -12,6 +12,7 @@ struct TdcpBatchParams
TdcpOptions tdcp; TdcpOptions tdcp;
int min_common_sats; int min_common_sats;
int raim_n; int raim_n;
bool validate_residual;
double max_residual; // max allowed residual to be considered good solution. RAIM applied if enabled in this case. double max_residual; // max allowed residual to be considered good solution. RAIM applied if enabled in this case.
bool relinearize_jacobian; bool relinearize_jacobian;
int max_iterations; int max_iterations;
......
...@@ -492,7 +492,7 @@ TdcpOutput Tdcp(const Eigen::Vector3d& x_r, ...@@ -492,7 +492,7 @@ TdcpOutput Tdcp(const Eigen::Vector3d& x_r,
} }
} }
// METHOD B: using max residual in Mahalanobis distance // METHOD B: using max residual in Mahalanobis distance
else else if (tdcp_params.residual_opt == 1)
{ {
// find index of max residual // find index of max residual
(r + A * delta_d).cwiseAbs2().maxCoeff(&worst_sat_row); (r + A * delta_d).cwiseAbs2().maxCoeff(&worst_sat_row);
...@@ -532,6 +532,8 @@ TdcpOutput Tdcp(const Eigen::Vector3d& x_r, ...@@ -532,6 +532,8 @@ TdcpOutput Tdcp(const Eigen::Vector3d& x_r,
best_d = d_raim; best_d = d_raim;
} }
} }
else
throw std::runtime_error("unknown value for 'residual_opt'");
// No successful RAIM solution // No successful RAIM solution
if (worst_sat_row == -1) if (worst_sat_row == -1)
...@@ -603,7 +605,7 @@ TdcpOutput Tdcp(const Eigen::Vector3d& x_r, ...@@ -603,7 +605,7 @@ TdcpOutput Tdcp(const Eigen::Vector3d& x_r,
//residual = sqrt(r.squaredNorm() / (r.size() - raim_discarded_rows.size())); //residual = sqrt(r.squaredNorm() / (r.size() - raim_discarded_rows.size()));
// check residual condition // check residual condition
if (residual > tdcp_params.max_residual) if (tdcp_params.validate_residual and residual > tdcp_params.max_residual)
{ {
printf("Tdcp: Didn't success. Final residual=%f bigger than max_residual=%f.\n", residual, tdcp_params.max_residual); printf("Tdcp: Didn't success. Final residual=%f bigger than max_residual=%f.\n", residual, tdcp_params.max_residual);
output.msg = "Residual bigger than max_residual"; output.msg = "Residual bigger than max_residual";
......
...@@ -74,6 +74,8 @@ TEST(Tdcp, Tdcp) ...@@ -74,6 +74,8 @@ TEST(Tdcp, Tdcp)
tdcp_params.raim_n = 0; tdcp_params.raim_n = 0;
tdcp_params.residual_opt = 0; tdcp_params.residual_opt = 0;
tdcp_params.max_residual = 1e20; tdcp_params.max_residual = 1e20;
tdcp_params.validate_residual = false;
tdcp_params.sagnac_correction = false;
tdcp_params.relinearize_jacobian = true; tdcp_params.relinearize_jacobian = true;
tdcp_params.tdcp.multi_freq = false; tdcp_params.tdcp.multi_freq = false;
tdcp_params.tdcp.sigma_atm = 1; tdcp_params.tdcp.sigma_atm = 1;
...@@ -214,6 +216,8 @@ TEST(Tdcp, Tdcp_raim_residual_rmse) ...@@ -214,6 +216,8 @@ TEST(Tdcp, Tdcp_raim_residual_rmse)
tdcp_params.relinearize_jacobian = true; tdcp_params.relinearize_jacobian = true;
tdcp_params.residual_opt = 0; // Normalized RMSE tdcp_params.residual_opt = 0; // Normalized RMSE
tdcp_params.max_residual = 0.1; // low threshold to detect outliers... tdcp_params.max_residual = 0.1; // low threshold to detect outliers...
tdcp_params.validate_residual = false;
tdcp_params.sagnac_correction = false;
tdcp_params.tdcp.multi_freq = false; tdcp_params.tdcp.multi_freq = false;
tdcp_params.tdcp.sigma_atm = 1; tdcp_params.tdcp.sigma_atm = 1;
tdcp_params.tdcp.sigma_carrier = 1; tdcp_params.tdcp.sigma_carrier = 1;
...@@ -369,6 +373,8 @@ TEST(Tdcp, Tdcp_raim_residual_max_mah) ...@@ -369,6 +373,8 @@ TEST(Tdcp, Tdcp_raim_residual_max_mah)
tdcp_params.relinearize_jacobian = true; tdcp_params.relinearize_jacobian = true;
tdcp_params.residual_opt = 1; // Max residual in Mahalanobis distance tdcp_params.residual_opt = 1; // Max residual in Mahalanobis distance
tdcp_params.max_residual = 3.84; // 95% of confidence tdcp_params.max_residual = 3.84; // 95% of confidence
tdcp_params.validate_residual = false;
tdcp_params.sagnac_correction = false;
tdcp_params.tdcp.multi_freq = false; tdcp_params.tdcp.multi_freq = false;
tdcp_params.tdcp.sigma_atm = 1; tdcp_params.tdcp.sigma_atm = 1;
tdcp_params.tdcp.sigma_carrier = 1; tdcp_params.tdcp.sigma_carrier = 1;
......
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