From e1c5b86d644b9da7e4095076bd96b8b77b2a0cb2 Mon Sep 17 00:00:00 2001
From: Sergi Pujol <sergi.pujol.badell@estudiantat.upc.edu>
Date: Sun, 14 Feb 2021 20:43:48 +0100
Subject: [PATCH] added template to cornerScene

---
 src/corner_scene.h         | 22 +++++++++++++++++++---
 src/loop_closure_base_2d.h |  5 +++--
 src/loop_closure_falko.cpp | 19 +++++++++++--------
 src/loop_closure_falko.h   |  9 ++++++---
 4 files changed, 39 insertions(+), 16 deletions(-)

diff --git a/src/corner_scene.h b/src/corner_scene.h
index a2cd43c..19e45d3 100644
--- a/src/corner_scene.h
+++ b/src/corner_scene.h
@@ -11,13 +11,29 @@
 #include <iostream>
 #include <fstream>
 
+/**************************
+ *      Falko includes      *
+ **************************/
+#include <falkolib/Feature/FALKO.h>
+#include <falkolib/Feature/CGH.h>
+#include <falkolib/Feature/BSC.h>
+#include <falkolib/Feature/FALKOExtractor.h>
+
+#include <falkolib/Feature/BSCExtractor.h>
+#include <falkolib/Feature/CGHExtractor.h>
+
+#include <falkolib/Matching/NNMatcher.h>
+#include <falkolib/Matching/AHTMatcher.h>
+
 namespace laserscanutils
 {
+
+template <typename D>
 struct cornerScene{
-    std::vector<double> keypointsList;
-    std::vector<double> descriptorsList;
+    std::vector<falkolib::FALKO> keypointsList;
+    std::vector<D> descriptorsList;
 };
 
 } /* namespace laserscanutils */
 
-#endif /* CORNER_SCENE_H_ */
\ No newline at end of file
+#endif /* CORNER_SCENE_H_ */
diff --git a/src/loop_closure_base_2d.h b/src/loop_closure_base_2d.h
index ec48fe6..def39c0 100644
--- a/src/loop_closure_base_2d.h
+++ b/src/loop_closure_base_2d.h
@@ -51,11 +51,12 @@ public:
 
     /** \brief compare new scans against the trained set in order to find loop closures
      **/
-    virtual void findLoopClosure(std::list<cornerScene>& scenes, const cornerScene newScene){}
+    //virtual void findLoopClosure(std::list<cornerScene>& scenes, const cornerScene newScene){}
+    virtual void findLoopClosure(){}
 
     /** \brief update the scene struct with keypoints and descriptors
      **/
-    virtual std::shared_ptr<cornerScene> extractScene(LaserScan &scan,LaserScanParams &scanParams){}
+    virtual void extractScene(LaserScan &scan,LaserScanParams &scanParams){}
 
     /** \brief Convert scans from laserscanutils::LaserScan to falkolib::LaserScan object
      **/
diff --git a/src/loop_closure_falko.cpp b/src/loop_closure_falko.cpp
index 9e9b3c4..38fb164 100644
--- a/src/loop_closure_falko.cpp
+++ b/src/loop_closure_falko.cpp
@@ -10,8 +10,8 @@
 namespace laserscanutils{
 
     //CONSTRUCTOR
-    template <typename E, typename M>
-    loopClosureFalko<E, M>::loopClosureFalko(){
+    template <typename D,typename E, typename M>
+    loopClosureFalko<D,E, M>::loopClosureFalko(){
         // FALKO Extractor Parameters
         setMinExtractionRange(0.1);
         setMaxExtractionRange(25);
@@ -23,18 +23,21 @@ namespace laserscanutils{
 
         // Matcher Extractor Parameters
         matcher.setDistanceThreshold(0.1);
+
     }
 
     // DESTRUCTOR
-    template <typename E, typename M>
-    loopClosureFalko<E,M>::~loopClosureFalko(){}
+    template <typename D,typename E, typename M>
+    loopClosureFalko<D,E,M>::~loopClosureFalko(){}
+
+    template <typename D,typename E, typename M>
+    std::shared_ptr<cornerScene<D>> loopClosureFalko<D,E, M>::extractScene(LaserScan &scan,LaserScanParams &scanParams){
+
+        auto scanFALKO =loopClosureFalko<D,E,M>::convert2LaserScanFALKO(scan, scanParams);
 
-    template <typename E, typename M>
-    std::shared_ptr<cornerScene> loopClosureFalko<E, M>::extractScene(LaserScan &scan,LaserScanParams &scanParams){
 
-        auto scanFALKO =loopClosureFalko<E,M>::convert2LaserScanFALKO(scan, scanParams);
+        auto NewScene=std::make_shared<cornerScene<D>>();
 
-        auto NewScene=std::make_shared<cornerScene>();
 
         return NewScene;
     }
diff --git a/src/loop_closure_falko.h b/src/loop_closure_falko.h
index 8a7aabd..451cb82 100644
--- a/src/loop_closure_falko.h
+++ b/src/loop_closure_falko.h
@@ -34,12 +34,15 @@
 
 namespace laserscanutils
 {
+
+typedef falkolib::BSC bsc;
 typedef falkolib::BSCExtractor<falkolib::FALKO> bscExtractor;
 typedef falkolib::NNMatcher<falkolib::FALKO> NNMatcher;
 
+
    /** \brief A base class for loop closure using falko library
    **/
-template <typename E, typename M>
+template <typename D, typename E, typename M>
 class loopClosureFalko : public falkolib::FALKOExtractor{
 private:
 
@@ -54,11 +57,11 @@ public:
 
     /** \brief compare new scans against the trained set in order to find loop closures
      **/
-    void findLoopClosure(std::list<cornerScene>& scenes, const cornerScene newScene){}
+    //void findLoopClosure(std::list<cornerScene>& scenes, const cornerScene newScene){}
 
     /** \brief update the scene struct with keypoints and descriptors
      **/
-    std::shared_ptr<cornerScene> extractScene(LaserScan &scan,LaserScanParams &scanParams);
+    std::shared_ptr<cornerScene<D>> extractScene(LaserScan &scan,LaserScanParams &scanParams);
 
     E extractor;
     M matcher;
-- 
GitLab