From ecf99a0e8122710d77f7f31b43174b107c8f909d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Vallv=C3=A9=20Navarro?= <jvallve@iri.upc.edu> Date: Mon, 5 Jul 2021 12:46:22 +0200 Subject: [PATCH] sagnac 2 --- include/gnss_utils/tdcp.h | 2 +- src/tdcp.cpp | 35 +++++++++++++++++++++++++++++------ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/include/gnss_utils/tdcp.h b/include/gnss_utils/tdcp.h index 6cd6cde..818fe3f 100644 --- a/include/gnss_utils/tdcp.h +++ b/include/gnss_utils/tdcp.h @@ -54,7 +54,7 @@ TdcpOutput Tdcp(SnapshotPtr snapshot_r, TdcpOutput Tdcp(const Eigen::Vector3d& x_r, Eigen::MatrixXd& A, Eigen::VectorXd& r, - const Eigen::VectorXd& drho_m, + Eigen::VectorXd& drho_m, const Eigen::MatrixXd& s_k, const Eigen::MatrixXd& s_r, const Eigen::Vector4d& d_0, diff --git a/src/tdcp.cpp b/src/tdcp.cpp index e2e48d9..44b0f24 100644 --- a/src/tdcp.cpp +++ b/src/tdcp.cpp @@ -221,12 +221,9 @@ TdcpOutput Tdcp(SnapshotPtr snapshot_r, if (tdcp_params.sagnac_correction != 0) { double sagnac_corr_r = computeSagnacCorrection(x_r,s_r.col(row)); //OMGE*(s_r.col(row)(0)*x_r(1)-s_r.col(row)(1)*x_r(0))/CLIGHT; - double sagnac_corr_k = computeSagnacCorrection(x_r,s_k.col(row)); //OMGE*(s_k.col(row)(0)*(x_r(1)+d_0(1))-s_k.col(row)(1)*(x_r(0)+d_0(0)))/CLIGHT; + double sagnac_corr_k = computeSagnacCorrection(x_r+d_0.head(3),s_k.col(row)); //OMGE*(s_k.col(row)(0)*(x_r(1)+d_0(1))-s_k.col(row)(1)*(x_r(0)+d_0(0)))/CLIGHT; - if (tdcp_params.sagnac_correction == 1) - drho_m(row) += -sagnac_corr_k + sagnac_corr_r; - else - drho_m(row) -= -sagnac_corr_k + sagnac_corr_r; + drho_m(row) += -sagnac_corr_k + sagnac_corr_r; } #if GNSS_UTILS_TDCP_DEBUG == 1 @@ -275,7 +272,7 @@ TdcpOutput Tdcp(SnapshotPtr snapshot_r, TdcpOutput Tdcp(const Eigen::Vector3d& x_r, Eigen::MatrixXd& A, Eigen::VectorXd& r, - const Eigen::VectorXd& drho_m, + Eigen::VectorXd& drho_m, const Eigen::MatrixXd& s_k, const Eigen::MatrixXd& s_r, const Eigen::Vector4d& d_0, @@ -296,6 +293,17 @@ TdcpOutput Tdcp(const Eigen::Vector3d& x_r, Eigen::Vector4d delta_d(Eigen::Vector4d::Zero()); d = d_0; + // initial sagnac correction + Eigen::VectorXd prev_sagnac_corr(s_k.cols()); + if (tdcp_params.sagnac_correction == 2 ) + for (int row = 0; row < A.rows(); row++) + { + double sagnac_corr_r = computeSagnacCorrection(x_r,s_r.col(row)); //OMGE*(s_r.col(row)(0)*x_r(1)-s_r.col(row)(1)*x_r(0))/CLIGHT; + double sagnac_corr_k = computeSagnacCorrection(x_r+d_0.head(3),s_k.col(row)); //OMGE*(s_k.col(row)(0)*(x_r(1)+d_0(1))-s_k.col(row)(1)*(x_r(0)+d_0(0)))/CLIGHT; + + prev_sagnac_corr(row) = -sagnac_corr_k + sagnac_corr_r; + } + for (int j = 0; j < tdcp_params.max_iterations; j++) { // fill A and r @@ -305,6 +313,21 @@ TdcpOutput Tdcp(const Eigen::Vector3d& x_r, if (raim_discarded_rows.count(row) != 0) continue; + // update sagnac correction + if (tdcp_params.sagnac_correction == 2 and j > 0) + { + // undo prev_correction + drho_m(row) -= prev_sagnac_corr(row); + + // apply new correction + double sagnac_corr_r = computeSagnacCorrection(x_r,s_r.col(row)); //OMGE*(s_r.col(row)(0)*x_r(1)-s_r.col(row)(1)*x_r(0))/CLIGHT; + double sagnac_corr_k = computeSagnacCorrection(x_r+d.head(3),s_k.col(row)); //OMGE*(s_k.col(row)(0)*(x_r(1)+d_0(1))-s_k.col(row)(1)*(x_r(0)+d_0(0)))/CLIGHT; + drho_m(row) += -sagnac_corr_k + sagnac_corr_r; + + // store correction + prev_sagnac_corr(row) = -sagnac_corr_k + sagnac_corr_r; + } + // Evaluate r r(row) = drho_m(row) - (s_k.col(row) - x_r - d.head(3)).norm() + (s_r.col(row) - x_r).norm() - d(3); -- GitLab