diff --git a/src/corner_scene.h b/src/corner_scene.h index 19e45d3c057fe47c2b9d858ab9d11d733794cc96..fb1932c375223a4aade272ac205e3a1705eee938 100644 --- a/src/corner_scene.h +++ b/src/corner_scene.h @@ -28,12 +28,17 @@ namespace laserscanutils { + + template <typename D> struct cornerScene{ std::vector<falkolib::FALKO> keypointsList; std::vector<D> descriptorsList; }; +typedef std::shared_ptr<cornerScene<falkolib::BSC>> cornerSceneBSCPtr; + + } /* namespace laserscanutils */ #endif /* CORNER_SCENE_H_ */ diff --git a/src/loop_closure_falko.cpp b/src/loop_closure_falko.cpp index 3a5a20c4cbb7c3f643f9bc0c8fc04f37bca23877..caf5518f9bedd8756efd103469b37be6bd581c3a 100644 --- a/src/loop_closure_falko.cpp +++ b/src/loop_closure_falko.cpp @@ -10,8 +10,13 @@ namespace laserscanutils{ //CONSTRUCTOR - template <typename D,typename E, typename M> - loopClosureFalko<D,E, M>::loopClosureFalko(){ + template <typename D,typename Extr, typename M> + loopClosureFalko<D,Extr, M>::loopClosureFalko(int _circularSectorNumber, int _radialRingNumber) : + loopClosureBase2d(), + falkolib::FALKOExtractor(), + extractor_(_circularSectorNumber, _radialRingNumber), + matcher_() + { // FALKO Extractor Parameters setMinExtractionRange(0.1); setMaxExtractionRange(25); @@ -28,15 +33,21 @@ namespace laserscanutils{ // DESTRUCTOR - template <typename D,typename E, typename M> - loopClosureFalko<D,E,M>::~loopClosureFalko(){} + template <typename D,typename Extr, typename M> + loopClosureFalko<D,Extr,M>::~loopClosureFalko(){} - template <typename D,typename E, typename M> - std::shared_ptr<cornerScene<D>> loopClosureFalko<D,E, M>::extractScene(LaserScan &scan,LaserScanParams &scanParams){ + template <typename D,typename Extr, typename M> + std::shared_ptr<cornerScene<D>> loopClosureFalko<D,Extr, M>::extractScene(LaserScan &scan,LaserScanParams &scanParams){ auto newScene=std::make_shared<cornerScene<D>>(); - auto scanFALKO =loopClosureFalko<D,E,M>::convert2LaserScanFALKO(scan, scanParams); + auto scanFALKO =loopClosureFalko<D,Extr,M>::convert2LaserScanFALKO(scan, scanParams); // Extract keypoints - extract((*scanFALKO), ((*newScene).keypointsList)); + extract((*scanFALKO), (newScene->keypointsList)); + + // Compute descriptors + //loopClosureFalko<D,Extr,M>::extractor: + extractor_.compute(*scanFALKO,newScene->keypointsList, newScene->descriptorsList); + //extractor.compute((*scanFALKO),((*newScene).keypointsList), ((*newScene).descriptorsList)); + //loopClosureFalko<D,Extr,M>::extractor::compute((*scanFALKO),((*newScene).keypointsList), ((*newScene).descriptorsList)); return newScene; } diff --git a/src/loop_closure_falko.h b/src/loop_closure_falko.h index 41503976af69950f028da67e93106fed021f8273..379a49d002cccabf2cf3ad2ce28d7b4d92623b75 100644 --- a/src/loop_closure_falko.h +++ b/src/loop_closure_falko.h @@ -44,14 +44,18 @@ typedef falkolib::NNMatcher<falkolib::FALKO> NNMatcher; /** \brief A base class for loop closure using falko library **/ -template <typename D, typename E, typename M> +template <typename D, typename Extr, typename M> class loopClosureFalko : public loopClosureBase2d, public falkolib::FALKOExtractor{ private: public: + Extr extractor_; + M matcher_; + int test=1; + /** \brief Constructor **/ - loopClosureFalko(); + loopClosureFalko(int _circularSectorNumber=16, int _radialRingNumber=8); /** \brief Destructor **/ @@ -65,8 +69,7 @@ public: **/ std::shared_ptr<cornerScene<D>> extractScene(LaserScan &scan,LaserScanParams &scanParams); - //E extractor; - //M matcher; + }; } /* namespace laserscanutils */ diff --git a/test/gtest_loop_closure_base_2d.cpp b/test/gtest_loop_closure_base_2d.cpp index f45d07f1941ca931646df6ddf3d19f3071825f48..66aca01933e50762cfa086fbfd827eef4470edca 100644 --- a/test/gtest_loop_closure_base_2d.cpp +++ b/test/gtest_loop_closure_base_2d.cpp @@ -7,7 +7,7 @@ using namespace laserscanutils; -TEST(loop_closure_fako, extractScene) +TEST(loop_closure_falko, extractScene) { int scanSize = 1440; @@ -27,12 +27,12 @@ TEST(loop_closure_fako, extractScene) int detectedKeypoints =((*newScene).keypointsList).size(); - EXPECT_FALSE(false); - - ASSERT_TRUE(true); + int detectedDescriptors =newScene->descriptorsList.size(); ASSERT_EQ(detectedKeypoints, 18); + ASSERT_EQ(detectedDescriptors, 18); + // PRINTF("All good at TestTest::DummyTestExample !\n"); }