From 65e79c90ffdfb657704f7d2176b34e5a197cc0f8 Mon Sep 17 00:00:00 2001 From: Sergi Pujol <sergi.pujol.badell@estudiantat.upc.edu> Date: Thu, 28 Jan 2021 20:44:29 +0100 Subject: [PATCH] Added CornerFalko2d::findLoopClosure function --- src/corner_falko_2d.cpp | 42 +++++++++++++++++++++++++----- src/corner_falko_2d.h | 16 ++++-------- src/examples/corner_falko_demo.cpp | 5 +++- 3 files changed, 44 insertions(+), 19 deletions(-) diff --git a/src/corner_falko_2d.cpp b/src/corner_falko_2d.cpp index 4b298a5..8f1e6b7 100644 --- a/src/corner_falko_2d.cpp +++ b/src/corner_falko_2d.cpp @@ -26,18 +26,46 @@ CornerFalko2d::~CornerFalko2d() } -void CornerFalko2d::train (falkolib::LaserScan scan){ +void CornerFalko2d::storeCorners (falkolib::LaserScan scan, int scanInterval){ - // Extract keypoints - lastKeypointSet.clear(); - extract(scan, lastKeypointSet); + scanNumber=scanNumber+1; + + if (scanNumber % scanInterval == 0){ + // Extract keypoints + lastKeypointSet.clear(); + extract(scan, lastKeypointSet); + + //Compute descriptors + lastDescriptorSet.clear(); + compute(scan, lastKeypointSet, lastDescriptorSet); + + keypointSets.push_back(lastKeypointSet); + descriptorSets.push_back(lastDescriptorSet); + + } + +} + +void CornerFalko2d::findLoopClosure(falkolib::LaserScan scan){ + //Compute descriptors + std::vector<falkolib::FALKO> keypointSet2; + extract(scan, keypointSet2); //Compute descriptors - lastDescriptorSet.clear(); - compute(scan, lastKeypointSet, lastDescriptorSet); + std::vector <falkolib::BSC> descriptorSet2; + compute(scan, keypointSet2, descriptorSet2); + + //Matching + + for (int i=0; i<keypointSets.size();i++){ + std::vector<std::pair<int, int> > assoNN; + int matchingNumber = match(keypointSets[i], keypointSet2, assoNN); + } + + } -} // laserscanutils namespace +} // laserscanutils namespace diff --git a/src/corner_falko_2d.h b/src/corner_falko_2d.h index cb1b675..079db34 100644 --- a/src/corner_falko_2d.h +++ b/src/corner_falko_2d.h @@ -41,7 +41,7 @@ namespace laserscanutils * */ -class CornerFalko2d: public falkolib::FALKOExtractor, falkolib::BSCExtractor<falkolib::FALKO> +class CornerFalko2d: public falkolib::FALKOExtractor, falkolib::BSCExtractor<falkolib::FALKO>, falkolib::NNMatcher<falkolib::FALKO> { public: /** @@ -62,7 +62,7 @@ public: /** \brief Gets a set of landmarks/scenes to use as trained set. **/ - void train(falkolib::LaserScan scan); + void storeCorners(falkolib::LaserScan scan, int scanInterval); /** \brief Extract landmark/scene (list of corners) from a given 2D scan **/ @@ -70,22 +70,16 @@ public: /** \brief compare new scans against the training set in order to find loop closures **/ - void findLoopClosure(); + void findLoopClosure(falkolib::LaserScan scan); std::vector<std::vector<falkolib::FALKO>> keypointSets; std::vector<falkolib::FALKO> lastKeypointSet; std::vector<std::vector<falkolib::BSC>> descriptorSets; std::vector<falkolib::BSC>lastDescriptorSet; - //int _circularSectorNumber; - //int _radialRingNumber; - // Keypoints extractor - //falkolib::FALKOExtractor fe; - // BSC descriptor extractor - //falkolib::BSCExtractor<falkolib::FALKO> bsc(_circularSectorNumber,_radialRingNumber); - + int scanNumber=0; }; -} /* namespace wolf */ +} /* namespace laserscanutils */ #endif /* LANDMARK_POLYLINE_2d_H_ */ diff --git a/src/examples/corner_falko_demo.cpp b/src/examples/corner_falko_demo.cpp index acfdfe4..cda359c 100644 --- a/src/examples/corner_falko_demo.cpp +++ b/src/examples/corner_falko_demo.cpp @@ -21,6 +21,7 @@ int main(int argc, char** argv) { int scanSize = 1440; + int scanInterval =1; falkolib::LaserScan scan1(0, 2.0 * M_PI, scanSize); @@ -28,8 +29,10 @@ int main(int argc, char** argv) CornerFalko2d CornerMatching; - CornerMatching.extract(scan1, CornerMatching.lastKeypointSet); + CornerMatching.storeCorners(scan1, scanInterval); std::cout << "num keypoints1 extracted: " << CornerMatching.lastKeypointSet.size() << std::endl; + CornerMatching.findLoopClosure(scan1); + } -- GitLab