Skip to content
Snippets Groups Projects
Commit 65e79c90 authored by Sergi Pujol's avatar Sergi Pujol
Browse files

Added CornerFalko2d::findLoopClosure function

parent 22ef78f6
No related branches found
No related tags found
1 merge request!4Resolve "Implementation of Falko lib"
...@@ -26,18 +26,46 @@ CornerFalko2d::~CornerFalko2d() ...@@ -26,18 +26,46 @@ CornerFalko2d::~CornerFalko2d()
} }
void CornerFalko2d::train (falkolib::LaserScan scan){ void CornerFalko2d::storeCorners (falkolib::LaserScan scan, int scanInterval){
// Extract keypoints scanNumber=scanNumber+1;
lastKeypointSet.clear();
extract(scan, lastKeypointSet); 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 //Compute descriptors
lastDescriptorSet.clear(); std::vector <falkolib::BSC> descriptorSet2;
compute(scan, lastKeypointSet, lastDescriptorSet); 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
...@@ -41,7 +41,7 @@ namespace laserscanutils ...@@ -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: public:
/** /**
...@@ -62,7 +62,7 @@ public: ...@@ -62,7 +62,7 @@ public:
/** \brief Gets a set of landmarks/scenes to use as trained set. /** \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 /** \brief Extract landmark/scene (list of corners) from a given 2D scan
**/ **/
...@@ -70,22 +70,16 @@ public: ...@@ -70,22 +70,16 @@ public:
/** \brief compare new scans against the training set in order to find loop closures /** \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<std::vector<falkolib::FALKO>> keypointSets;
std::vector<falkolib::FALKO> lastKeypointSet; std::vector<falkolib::FALKO> lastKeypointSet;
std::vector<std::vector<falkolib::BSC>> descriptorSets; std::vector<std::vector<falkolib::BSC>> descriptorSets;
std::vector<falkolib::BSC>lastDescriptorSet; std::vector<falkolib::BSC>lastDescriptorSet;
//int _circularSectorNumber; int scanNumber=0;
//int _radialRingNumber;
// Keypoints extractor
//falkolib::FALKOExtractor fe;
// BSC descriptor extractor
//falkolib::BSCExtractor<falkolib::FALKO> bsc(_circularSectorNumber,_radialRingNumber);
}; };
} /* namespace wolf */ } /* namespace laserscanutils */
#endif /* LANDMARK_POLYLINE_2d_H_ */ #endif /* LANDMARK_POLYLINE_2d_H_ */
...@@ -21,6 +21,7 @@ int main(int argc, char** argv) ...@@ -21,6 +21,7 @@ int main(int argc, char** argv)
{ {
int scanSize = 1440; int scanSize = 1440;
int scanInterval =1;
falkolib::LaserScan scan1(0, 2.0 * M_PI, scanSize); falkolib::LaserScan scan1(0, 2.0 * M_PI, scanSize);
...@@ -28,8 +29,10 @@ int main(int argc, char** argv) ...@@ -28,8 +29,10 @@ int main(int argc, char** argv)
CornerFalko2d CornerMatching; CornerFalko2d CornerMatching;
CornerMatching.extract(scan1, CornerMatching.lastKeypointSet); CornerMatching.storeCorners(scan1, scanInterval);
std::cout << "num keypoints1 extracted: " << CornerMatching.lastKeypointSet.size() << std::endl; std::cout << "num keypoints1 extracted: " << CornerMatching.lastKeypointSet.size() << std::endl;
CornerMatching.findLoopClosure(scan1);
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment