diff --git a/src/corner_scene.h b/src/corner_scene.h index a2cd43c7869b0b0c7c53ee420d3e18ca7d742324..19e45d3c057fe47c2b9d858ab9d11d733794cc96 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 ec48fe61056c4527c0ebfe6e327441088c1189d3..def39c0476b51016b0aa5921d63dd34dd2dafbcd 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 9e9b3c4231dc77255e41930365355f29390bbb1d..38fb1643cfbb7e729d862ef391a05d8933154690 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 8a7aabd5e9f7c889abc8b00da66dc93a51c8e445..451cb82dd84e08df40956ff6d9c7758685e3df2f 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;