Skip to content
Snippets Groups Projects

Resolve "Implementation of Falko lib"

Merged Sergi Pujol Badell requested to merge 26-implementation-of-falko-lib into master
2 files
+ 46
20
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 40
18
@@ -46,6 +46,25 @@ typedef falkolib::CGH cgh;
typedef falkolib::CGHExtractor<falkolib::FALKO> cghExtractor;
typedef falkolib::AHTMatcher<falkolib::FALKO> AHTatcher;
struct parameterLoopClosureFalko {
// Keypoints extractor
double _min_extraction_range=0.1;
double _max_extraction_range=25;
bool _enable_subbeam=true;
double _nms_radius=0.1;
double _neigh_b=0.01;
double _b_ratio=4;
int _grid_sectors=16;
//Descriptors parameters
int _circularSectorNumber = 16;
int _radialRingNumber = 8;
//matcher threshold
double matcher_distance_th=0.1;
int keypoints_number_th = 5;
};
/** \brief A base class for loop closure using falko library
**/
@@ -63,20 +82,21 @@ public:
/** \brief Constructor
**/
loopClosureFalko(int _circularSectorNumber = 16, int _radialRingNumber = 8)
loopClosureFalko(parameterLoopClosureFalko param)
: loopClosureBase2d(), falkolib::FALKOExtractor(),
extractor_(_circularSectorNumber, _radialRingNumber), matcher_() {
extractor_(param._circularSectorNumber, param._radialRingNumber), matcher_() {
// FALKO Extractor Parameters
setMinExtractionRange(0.1);
setMaxExtractionRange(25);
enableSubbeam(true);
setNMSRadius(0.1);
setNeighB(0.01);
setBRatio(4);
setGridSectors(16);
setMinExtractionRange(param._min_extraction_range);
setMaxExtractionRange(param._max_extraction_range);
enableSubbeam(param._enable_subbeam);
setNMSRadius(param._nms_radius);
setNeighB(param._neigh_b);
setBRatio(param._b_ratio);
setGridSectors(param._grid_sectors);
// Matcher Extractor Parameters
matcher_.setDistanceThreshold(0.1);
matcher_.setDistanceThreshold(param.matcher_distance_th);
keypoints_number_th = param.keypoints_number_th;
};
/** \brief Destructor
@@ -100,13 +120,13 @@ public:
/** \brief Convert scans from laserscanutils::LaserScan to
*falkolib::LaserScan object
**/
laserScanPtr convert2LaserScanFALKO(LaserScan &scan, LaserScanParams &scanParams) {
auto scanFALKO = std::make_shared<falkolib::LaserScan>(
scanParams.angle_min_, scanParams.angle_max_, scan.ranges_raw_.size());
std::vector<double> doubleRanges(scan.ranges_raw_.begin(),
scan.ranges_raw_.end());
((*scanFALKO).fromRanges)(doubleRanges);
return scanFALKO;
laserScanPtr convert2LaserScanFALKO(LaserScan &_scan, LaserScanParams &_scan_params) {
auto scan_falko = std::make_shared<falkolib::LaserScan>(
_scan_params.angle_min_, _scan_params.angle_max_, _scan.ranges_raw_.size());
std::vector<double> double_ranges(_scan.ranges_raw_.begin(),
_scan.ranges_raw_.end());
scan_falko->fromRanges(double_ranges);
return scan_falko;
};
/** \brief Create and update a matchLoopClosure struct with the info that is
@@ -119,7 +139,6 @@ public:
matcher_.match(scene1->keypointsList, scene2->keypointsList, assoNN);
auto new_match = std::make_shared<matchLoopClosure<D>>();
new_match->keypointsNumberMatch = matching_number;
int keypoints_number_th = 5;
if (matching_number > keypoints_number_th) {
new_match->match = true;
} else {
@@ -145,6 +164,9 @@ public:
}
return matchings;
}
int keypoints_number_th;
};
} /* namespace laserscanutils */
Loading