From 4537ad25abfd179d6ae0f863dab21cab9bf1e76c Mon Sep 17 00:00:00 2001
From: joanvallve <jvallve@iri.upc.edu>
Date: Fri, 2 Apr 2021 22:25:50 +0200
Subject: [PATCH] working on tdcp

---
 include/gnss/processor/processor_gnss_tdcp.h |  2 +-
 src/processor/processor_gnss_tdcp.cpp        | 25 ++++++---------
 src/processor/processor_tracker_gnss.cpp     | 32 +++++++++-----------
 3 files changed, 26 insertions(+), 33 deletions(-)

diff --git a/include/gnss/processor/processor_gnss_tdcp.h b/include/gnss/processor/processor_gnss_tdcp.h
index 833d258fd..c176ac651 100644
--- a/include/gnss/processor/processor_gnss_tdcp.h
+++ b/include/gnss/processor/processor_gnss_tdcp.h
@@ -41,7 +41,7 @@ struct ParamsProcessorGnssTdcp : public ParamsProcessorGnssFix
         tdcp.tdcp.corr_iono = false;
         tdcp.relinearize_jacobian = false;
         tdcp.max_iterations = 1;
-        tdcp.old_nav = false;
+        tdcp.tdcp.use_old_nav = false;
         tdcp.tdcp.multi_freq = false;
     }
     std::string print() const override
diff --git a/src/processor/processor_gnss_tdcp.cpp b/src/processor/processor_gnss_tdcp.cpp
index 1734ecf19..4e27bb919 100644
--- a/src/processor/processor_gnss_tdcp.cpp
+++ b/src/processor/processor_gnss_tdcp.cpp
@@ -165,24 +165,19 @@ void ProcessorGnssTdcp::processKeyFrame(FrameBasePtr _keyframe, const double& _t
         WOLF_INFO("Past KF with feature fix found. Performing TDCP!");
 
         // TDCP
-        Eigen::Vector4d d;
-        Eigen::Matrix4d cov_d;
-        double residual;
-        std::set<int> discarded_sats, raim_discarded_sats;
-        if (GnssUtils::Tdcp(std::static_pointer_cast<CaptureGnss>(cap_gnss_ref)->getSnapshot(),
-                            std::static_pointer_cast<CaptureGnss>(cap_gnss)->getSnapshot(),
-                            feat_fix->getMeasurement(),
-                            d,
-                            cov_d,
-                            residual,
-                            discarded_sats,
-                            raim_discarded_sats,
-                            params_tdcp_->tdcp,
-                            params_tdcp_->compute_pos_opt))
+        std::set<int> discarded_sats;
+        auto tdcp_output = GnssUtils::Tdcp(std::static_pointer_cast<CaptureGnss>(cap_gnss_ref)->getSnapshot(),
+                                           std::static_pointer_cast<CaptureGnss>(cap_gnss)->getSnapshot(),
+                                           feat_fix->getMeasurement(),
+                                           Eigen::Vector4d::Zero(),
+                                           discarded_sats,
+                                           params_tdcp_->tdcp,
+                                           params_tdcp_->compute_pos_opt);
+        if (tdcp_output.success)
         {
             WOLF_INFO("TDCP successfully performed!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
             // EMPLACE FEATURE
-            auto ftr = FeatureBase::emplace<FeatureGnssTdcp>(cap_gnss, d, cov_d);
+            auto ftr = FeatureBase::emplace<FeatureGnssTdcp>(cap_gnss, tdcp_output.d, tdcp_output.cov_d);
 
             // ADD FACTOR
             emplaceFactor(ftr, KF_ref);
diff --git a/src/processor/processor_tracker_gnss.cpp b/src/processor/processor_tracker_gnss.cpp
index 81fc43a2c..02b8fcee3 100644
--- a/src/processor/processor_tracker_gnss.cpp
+++ b/src/processor/processor_tracker_gnss.cpp
@@ -423,33 +423,31 @@ void ProcessorTrackerGnss::establishFactors()
                     std::cout << sat << " ";
                 std::cout << std::endl;
 
+                // reference ECEF position
+                Eigen::Vector3d x_r = sensor_gnss_->computeFrameAntennaPosEcef(KF);
+
                 // compute TDCP batch
-                Eigen::Vector4d d = Eigen::Vector4d::Zero();
-                Eigen::Matrix4d cov_d = Eigen::Matrix4d::Identity();
-                double residual;
-
-                if (GnssUtils::Tdcp(ref_cap_gnss->getSnapshot(),
-                                    last_cap_gnss->getSnapshot(),
-                                    (fix_last_.success ? fix_last_.pos : Eigen::Vector3d::Zero()),
-                                    common_sats,
-                                    d,
-                                    cov_d,
-                                    residual,
-                                    std::set<int>(),
-                                    params_tracker_gnss_->tdcp_batch_params))
+                auto tdcp_output = GnssUtils::Tdcp(ref_cap_gnss->getSnapshot(),
+                                                   last_cap_gnss->getSnapshot(),
+                                                   x_r,
+                                                   common_sats,
+                                                   Eigen::Vector4d::Zero(),
+                                                   params_tracker_gnss_->tdcp_batch_params);
+                if (tdcp_output.success)
                 {
-                    WOLF_DEBUG("TDCP BATCH d = ", d.transpose());
-                    WOLF_DEBUG("TDCP BATCH cov =\n", cov_d);
+                    WOLF_DEBUG("TDCP BATCH d = ", tdcp_output.d.transpose());
+                    WOLF_DEBUG("TDCP BATCH cov =\n", tdcp_output.cov_d);
 
                     // EMPLACE FEATURE
-                    auto ftr = FeatureBase::emplace<FeatureGnssTdcp>(last_cap_gnss, Eigen::Vector3d(d.head<3>()), Eigen::Matrix3d(cov_d.topLeftCorner<3,3>()));
+                    auto ftr = FeatureBase::emplace<FeatureGnssTdcp>(last_cap_gnss, Eigen::Vector3d(tdcp_output.d.head<3>()), Eigen::Matrix3d(tdcp_output.cov_d.topLeftCorner<3,3>()));
+                    //auto ftr = FeatureBase::emplace<FeatureGnssTdcp>(cap_gnss, tdcp_output.d, tdcp_output.cov_d);
 
                     // EMPLACE FACTOR
                     FactorBase::emplace<FactorGnssTdcp3d>(ftr, ftr, KF, sensor_gnss_, shared_from_this());
                 }
                 else
                 {
-                    WOLF_DEBUG("TDCP BATCH failed");
+                    WOLF_WARN("TDCP BATCH failed with msg: ", tdcp_output.msg);
                 }
             }
         }
-- 
GitLab