From 68fcc731c3decfd1ed16c66ac11fa8762e9dd983 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Joan=20Vallv=C3=A9=20Navarro?= <jvallve@iri.upc.edu>
Date: Fri, 12 Jul 2019 14:19:41 +0200
Subject: [PATCH] added distance_traveled param and corresponding voting for KF
 condition

---
 include/gnss/processor/processor_gnss_fix.h         | 3 +++
 include/gnss/processor/processor_gnss_single_diff.h | 3 +++
 src/processor/processor_gnss_fix.cpp                | 4 ++++
 src/processor/processor_gnss_single_diff.cpp        | 6 ++++++
 4 files changed, 16 insertions(+)

diff --git a/include/gnss/processor/processor_gnss_fix.h b/include/gnss/processor/processor_gnss_fix.h
index 6a2cba34e..c33561169 100644
--- a/include/gnss/processor/processor_gnss_fix.h
+++ b/include/gnss/processor/processor_gnss_fix.h
@@ -18,18 +18,21 @@ WOLF_STRUCT_PTR_TYPEDEFS(ProcessorParamsGnssFix);
 struct ProcessorParamsGnssFix : public ProcessorParamsBase
 {
     Scalar time_th;
+    Scalar dist_traveled;
     Scalar enu_map_init_dist_min;
     ProcessorParamsGnssFix() = default;
     ProcessorParamsGnssFix(std::string _unique_name, const paramsServer& _server):
         ProcessorParamsBase(_unique_name, _server)
     {
         time_th                 = _server.getParam<Scalar>(_unique_name + "/time_th");
+        dist_traveled           = _server.getParam<Scalar>(_unique_name + "/dist_traveled");
         enu_map_init_dist_min   = _server.getParam<Scalar>(_unique_name + "/enu_map_init_dist_min");
     }
     std::string print()
     {
         return "\n" + ProcessorParamsBase::print()
             + "time_th: " + std::to_string(time_th) + "\n";
+            + "dist_traveled: " + std::to_string(dist_traveled) + "\n";
             + "enu_map_init_dist_min: " + std::to_string(enu_map_init_dist_min) + "\n";
     }
 };
diff --git a/include/gnss/processor/processor_gnss_single_diff.h b/include/gnss/processor/processor_gnss_single_diff.h
index ebd286c8e..940b759d6 100644
--- a/include/gnss/processor/processor_gnss_single_diff.h
+++ b/include/gnss/processor/processor_gnss_single_diff.h
@@ -18,18 +18,21 @@ WOLF_STRUCT_PTR_TYPEDEFS(ProcessorParamsGnssSingleDiff);
 struct ProcessorParamsGnssSingleDiff : public ProcessorParamsBase
 {
     Scalar time_th;
+    Scalar dist_traveled;
     Scalar enu_map_init_dist_min;
     ProcessorParamsGnssSingleDiff() = default;
     ProcessorParamsGnssSingleDiff(std::string _unique_name, const paramsServer& _server):
         ProcessorParamsBase(_unique_name, _server)
     {
         time_th                 = _server.getParam<Scalar>(_unique_name + "/time_th");
+        dist_traveled           = _server.getParam<Scalar>(_unique_name + "/dist_traveled");
         enu_map_init_dist_min   = _server.getParam<Scalar>(_unique_name + "/enu_map_init_dist_min");
     }
     std::string print()
     {
         return "\n" + ProcessorParamsBase::print()
             + "time_th: " + std::to_string(time_th) + "\n";
+            + "dist_traveled: " + std::to_string(dist_traveled) + "\n";
             + "enu_map_init_dist_min: " + std::to_string(enu_map_init_dist_min) + "\n";
     }
 };
diff --git a/src/processor/processor_gnss_fix.cpp b/src/processor/processor_gnss_fix.cpp
index fca7b52b3..b4efaea1f 100644
--- a/src/processor/processor_gnss_fix.cpp
+++ b/src/processor/processor_gnss_fix.cpp
@@ -145,6 +145,10 @@ bool ProcessorGnssFix::voteForKeyFrame()
     if (!last_KF_ || (incoming_capture_->getTimeStamp() - last_KF_->getTimeStamp()) > params_gnss_->time_th)
         return true;
 
+    // Distance criterion
+    if ((incoming_capture_->getFrame()->getP()->getState() - last_KF_->getP()->getState()).norm() > params_gnss_->dist_traveled)
+        return true;
+
     // TODO: more alternatives?
 
     // otherwise
diff --git a/src/processor/processor_gnss_single_diff.cpp b/src/processor/processor_gnss_single_diff.cpp
index ff31924f1..cb37515ef 100644
--- a/src/processor/processor_gnss_single_diff.cpp
+++ b/src/processor/processor_gnss_single_diff.cpp
@@ -101,6 +101,12 @@ bool ProcessorGnssSingleDiff::voteForKeyFrame()
     if (last_KF_==nullptr || (last_KF_->getTimeStamp() - incoming_capture_->getTimeStamp()) > params_gnss_->time_th)
         return true;
 
+    // Distance criterion
+    std::cout << "params_gnss_->dist_traveled" << params_gnss_->dist_traveled << std::endl;
+    std::cout << "incoming_capture_->getData().norm()" << incoming_capture_->getData().norm() << std::endl;
+    if (incoming_capture_->getData().norm() > params_gnss_->dist_traveled)
+        return true;
+
     // TODO: more alternatives?
 
     // otherwise
-- 
GitLab