diff --git a/src/tdcp.cpp b/src/tdcp.cpp index a270b8c0f87b5483c4f2623e78ce039393e10de3..4004d86d2fc868dd576a8d783f78d198fd06569e 100644 --- a/src/tdcp.cpp +++ b/src/tdcp.cpp @@ -453,20 +453,19 @@ TdcpOutput Tdcp(const Eigen::Vector3d& x_r, r_raim(row_removed) = 0; // solve - Eigen::Vector4d delta_d_raim = -(A_raim.transpose() * A_raim).inverse() * A_raim.transpose() * r_raim; - Eigen::Vector4d d_raim = d_0 + delta_d_raim; + Eigen::Vector4d d_raim = d_0 - (A_raim.transpose() * A_raim).inverse() * A_raim.transpose() * r_raim; // no NaN if (!d_raim.array().isNaN().any()) { // residual if (tdcp_params.residual_opt == 0) // RMSE - residual = sqrt((r_raim + A_raim * delta_d_raim).squaredNorm() / (A_raim.rows() - raim_discarded_rows.size() - 1)) / sqrt(var_tdcp); + residual = sqrt((r_raim + A_raim * d_raim).squaredNorm() / (A_raim.rows() - raim_discarded_rows.size() - 1)) / sqrt(var_tdcp); else if (tdcp_params.residual_opt == 1) // max error in squared Mahalanobis distance (using measure noise) - residual = (r_raim + A_raim * delta_d_raim).cwiseAbs2().maxCoeff() / var_tdcp; + residual = (r_raim + A_raim * d_raim).cwiseAbs2().maxCoeff() / var_tdcp; else throw std::runtime_error("unknown value for residual_opt"); - // residual = (r_raim + A_raim * delta_d_raim).norm() / (A_raim.rows() - 1); + // residual = (r_raim + A_raim * d_raim).norm() / (A_raim.rows() - 1); #if GNSS_UTILS_TDCP_DEBUG == 1 std::cout << "RAIM excluding row " << row_removed;// << std::endl; @@ -502,20 +501,19 @@ TdcpOutput Tdcp(const Eigen::Vector3d& x_r, r_raim(worst_sat_row) = 0; // solve - Eigen::Vector4d delta_d_raim = -(A_raim.transpose() * A_raim).inverse() * A_raim.transpose() * r_raim; - Eigen::Vector4d d_raim = d_0 + delta_d_raim; + Eigen::Vector4d d_raim = d_0 - (A_raim.transpose() * A_raim).inverse() * A_raim.transpose() * r_raim; // no NaN if (!d_raim.array().isNaN().any()) { // residual if (tdcp_params.residual_opt == 0) // RMSE - residual = sqrt((r_raim + A_raim * delta_d_raim).squaredNorm() / (A_raim.rows() - raim_discarded_rows.size() - 1)) / sqrt(var_tdcp); + residual = sqrt((r_raim + A_raim * d_raim).squaredNorm() / (A_raim.rows() - raim_discarded_rows.size() - 1)) / sqrt(var_tdcp); else if (tdcp_params.residual_opt == 1) // max error in squared Mahalanobis distance (using measure noise) - residual = (r_raim + A_raim * delta_d_raim).cwiseAbs2().maxCoeff() / var_tdcp; + residual = (r_raim + A_raim * d_raim).cwiseAbs2().maxCoeff() / var_tdcp; else throw std::runtime_error("unknown value for residual_opt"); - // residual = (r_raim + A_raim * delta_d_raim).norm() / (A_raim.rows() - 1); + // residual = (r_raim + A_raim * d_raim).norm() / (A_raim.rows() - 1); #if GNSS_UTILS_TDCP_DEBUG == 1 std::cout << "RAIM excluding row " << worst_sat_row;// << std::endl;