Skip to content
Snippets Groups Projects
Commit 7ef34d03 authored by Joan Vallvé Navarro's avatar Joan Vallvé Navarro
Browse files

new parameter max_loops

parent 320df3ab
No related branches found
No related tags found
1 merge request!413Resolve "New ProcessorLoopClosure"
Pipeline #6540 passed
...@@ -10,11 +10,20 @@ WOLF_STRUCT_PTR_TYPEDEFS(ParamsProcessorLoopClosure); ...@@ -10,11 +10,20 @@ WOLF_STRUCT_PTR_TYPEDEFS(ParamsProcessorLoopClosure);
struct ParamsProcessorLoopClosure : public ParamsProcessorBase struct ParamsProcessorLoopClosure : public ParamsProcessorBase
{ {
using ParamsProcessorBase::ParamsProcessorBase; int max_loops=-1;
// virtual ~ParamsProcessorLoopClosure() = default;
ParamsProcessorLoopClosure() = default;
// add neccesery parameters for loop closure initialisation here and initialize ParamsProcessorLoopClosure(std::string _unique_name, const ParamsServer& _server):
// them in constructor ParamsProcessorBase(_unique_name, _server)
{
max_loops = _server.getParam<int>(prefix + _unique_name + "/max_loops");
}
std::string print() const override
{
return "\n" + ParamsProcessorBase::print()
+ "max_loops: " + std::to_string(max_loops) + "\n";
}
}; };
WOLF_STRUCT_PTR_TYPEDEFS(MatchLoopClosure); WOLF_STRUCT_PTR_TYPEDEFS(MatchLoopClosure);
...@@ -74,7 +83,7 @@ protected: ...@@ -74,7 +83,7 @@ protected:
/** \brief Find captures that correspond to loop closures with the given capture /** \brief Find captures that correspond to loop closures with the given capture
*/ */
virtual std::list<MatchLoopClosurePtr> findLoopClosures(CaptureBasePtr _capture) = 0; virtual std::map<double,MatchLoopClosurePtr> findLoopClosures(CaptureBasePtr _capture) = 0;
/** \brief validates a loop closure /** \brief validates a loop closure
*/ */
......
...@@ -132,14 +132,22 @@ void ProcessorLoopClosure::process(CaptureBasePtr _capture) ...@@ -132,14 +132,22 @@ void ProcessorLoopClosure::process(CaptureBasePtr _capture)
WOLF_DEBUG("finding loop closures..."); WOLF_DEBUG("finding loop closures...");
// Find loop closures // Find loop closures
auto match_lc_list = findLoopClosures(_capture); auto match_lc_map = findLoopClosures(_capture);
WOLF_DEBUG(match_lc_list.size(), " loop closures found"); WOLF_DEBUG(match_lc_map.size(), " loop closures found");
// Emplace factors for each LC if validated // Emplace factors for each LC if validated
for (auto match_lc : match_lc_list) auto n_loops = 0;
if (validateLoopClosure(match_lc)) for (const auto& match_pair : match_lc_map)
emplaceFactors(match_lc); if (validateLoopClosure(match_pair.second))
{
emplaceFactors(match_pair.second);
n_loops++;
if (params_loop_closure_->max_loops > 0 and
n_loops >= params_loop_closure_->max_loops)
break;
}
} }
} }
......
...@@ -30,9 +30,9 @@ class ProcessorLoopClosureDummy : public ProcessorLoopClosure ...@@ -30,9 +30,9 @@ class ProcessorLoopClosureDummy : public ProcessorLoopClosure
MatrixXd::Identity(3,3)); MatrixXd::Identity(3,3));
} }
std::list<MatchLoopClosurePtr> findLoopClosures(CaptureBasePtr _capture) override std::map<double,MatchLoopClosurePtr> findLoopClosures(CaptureBasePtr _capture) override
{ {
std::list<MatchLoopClosurePtr> match_lc_list; std::map<double,MatchLoopClosurePtr> match_lc_map;
auto old_frame = _capture->getFrame()->getPreviousFrame(); auto old_frame = _capture->getFrame()->getPreviousFrame();
while (old_frame) while (old_frame)
...@@ -48,13 +48,16 @@ class ProcessorLoopClosureDummy : public ProcessorLoopClosure ...@@ -48,13 +48,16 @@ class ProcessorLoopClosureDummy : public ProcessorLoopClosure
match->capture_target_ptr_ = _capture; match->capture_target_ptr_ = _capture;
match->normalized_score_ = 1; match->normalized_score_ = 1;
match_lc_list.push_back(match); while (match_lc_map.count(match->normalized_score_))
match->normalized_score_ -= 1e-9;
match_lc_map.emplace(match->normalized_score_, match);
} }
old_frame = old_frame->getPreviousFrame(); old_frame = old_frame->getPreviousFrame();
} }
return match_lc_list; return match_lc_map;
} }
void emplaceFactors(MatchLoopClosurePtr match) override void emplaceFactors(MatchLoopClosurePtr match) override
......
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