diff --git a/src/corner_falko_2d.cpp b/src/corner_falko_2d.cpp index 80e5b84193c06f8f51272acbaf1c95d1e8d45b4e..6e7b42f66bb61d6049b496f0d4f204860be7ad12 100644 --- a/src/corner_falko_2d.cpp +++ b/src/corner_falko_2d.cpp @@ -9,30 +9,31 @@ namespace wolf{ -void CornerFalko2d::extract (falkolib::LaserScan scan){ - - - - fe.setMinExtractionRange(0.25); - fe.setMaxExtractionRange(25); - fe.enableSubbeam(true); - fe.setNMSRadius(0.1); - fe.setNeighB(0.01); - fe.setBRatio(4); - fe.setGridSectors(16); - - std::vector<falkolib::FALKO> keypoints; - - /* - fe.extract(scan, keypoints); - - - falkolib::BSCExtractor<falkolib::FALKO> bsc(16,8); - std::vector<falkolib::BSC> bscDesc; - bsc.compute(scan, keypoints, bscDesc); - */ +CornerFalko2d::CornerFalko2d(int _circularSectorNumber, int _radialRingNumber, bool _useKeypointRadius, double _radius) :BSCExtractor( _circularSectorNumber, _radialRingNumber, _useKeypointRadius ,_radius ) { + // FALKO EXTRACTOR PARAMS + setMinExtractionRange(0.25); + setMaxExtractionRange(25); + enableSubbeam(true); + setNMSRadius(0.1); + setNeighB(0.01); + setBRatio(4); + setGridSectors(16); + } + +void CornerFalko2d::train (falkolib::LaserScan scan){ + + // Extract keypoints + lastKeypointSet.clear(); + extract(scan, lastKeypointSet); + + //Compute descriptors + lastDescriptorSet.clear(); + bsc.compute(scan, lastKeypointSet, lastDescriptorSet); + } +} // wolf namespace + diff --git a/src/corner_falko_2d.h b/src/corner_falko_2d.h index b5986b333b4ddedc77e691ed256c2deba03bc443..13d52892da45e5c3ec3ee89e23335c6631b673f7 100644 --- a/src/corner_falko_2d.h +++ b/src/corner_falko_2d.h @@ -33,15 +33,25 @@ namespace wolf { -class CornerFalko2d + +/** \brief A 2D corner extractor and loop closure computing class + * + * + * + * + */ + +class CornerFalko2d: public falkolib::FALKOExtractor, falkolib::BSCExtractor<falkolib::FALKO> { public: - /** \brief Constructor - * - * Constructor - * - **/ - CornerFalko2d(); + /** + * @brief Constructor + * @param _circularSectorNumber number of grid circular sector (BSCExtractor) + * @param _radialRingNumber number of grid radial number (BSCExtractor) + * @param _useKeypointRadius if true, the selected neighborhood points search radius is keypoint one (BSCExtractor) + * @param _radius neighborhood points search radius (BSCExtractor) + */ + CornerFalko2d(int _circularSectorNumber=16, int _radialRingNumber=8, bool _useKeypointRadius = true, double _radius = 0.1) ; /** \brief Destructor * @@ -52,19 +62,28 @@ public: /** \brief Gets a set of landmarks/scenes to use as trained set. **/ - void train(); + void train(falkolib::LaserScan scan); /** \brief Extract landmark/scene (list of corners) from a given 2D scan **/ - void extract(falkolib::LaserScan scan); + //void extract(falkolib::LaserScan scan); /** \brief compare new scans against the training set in order to find loop closures **/ void findLoopClosure(); - std::vector<std::vector<falkolib::FALKO>> CornerSet; + std::vector<std::vector<falkolib::FALKO>> keypointSets; + std::vector<falkolib::FALKO> lastKeypointSet; std::vector<std::vector<falkolib::BSC>> descriptorSets; - falkolib::FALKOExtractor fe; + std::vector<falkolib::BSC>lastDescriptorSet; + + //int _circularSectorNumber; + //int _radialRingNumber; + // Keypoints extractor + //falkolib::FALKOExtractor fe; + // BSC descriptor extractor + //falkolib::BSCExtractor<falkolib::FALKO> bsc(_circularSectorNumber,_radialRingNumber); + }; } /* namespace wolf */