13 template <
class GRAPH_t>
15 : sep_header(40,
'='), sep_subheader(20,
'-')
19 template <
class GRAPH_t>
27 regs_descriptions.begin();
28 it != regs_descriptions.end(); ++it)
33 optimizers_descriptions.begin();
34 it != optimizers_descriptions.end(); ++it)
40 template <
class GRAPH_t>
51 node_regs_map[
"CEmptyNRD"] =
52 &createNodeRegistrationDecider<CEmptyNRD<GRAPH_t>>;
53 node_regs_map[
"CFixedIntervalsNRD"] =
54 &createNodeRegistrationDecider<CFixedIntervalsNRD<GRAPH_t>>;
56 edge_regs_map[
"CEmptyERD"] =
57 &createEdgeRegistrationDecider<CEmptyERD<GRAPH_t>>;
59 optimizers_map[
"CLevMarqGSO"] =
60 &createGraphSlamOptimizer<CLevMarqGSO<GRAPH_t>>;
61 optimizers_map[
"CEmptyGSO"] =
62 &createGraphSlamOptimizer<CLevMarqGSO<GRAPH_t>>;
65 this->_createDeciderOptimizerMappings();
70 template <
class GRAPH_t>
82 node_regs_map[
"CICPCriteriaNRD"] =
83 &createNodeRegistrationDecider<CICPCriteriaNRD<CNetworkOfPoses2DInf>>;
84 edge_regs_map[
"CICPCriteriaERD"] =
85 &createEdgeRegistrationDecider<CICPCriteriaERD<CNetworkOfPoses2DInf>>;
86 edge_regs_map[
"CLoopCloserERD"] =
87 &createEdgeRegistrationDecider<CLoopCloserERD<CNetworkOfPoses2DInf>>;
95 node_regs_map[
"CICPCriteriaNRD"] = &createNodeRegistrationDecider<
97 edge_regs_map[
"CICPCriteriaERD"] = &createEdgeRegistrationDecider<
99 edge_regs_map[
"CLoopCloserERD"] =
100 &createEdgeRegistrationDecider<CLoopCloserERD<CNetworkOfPoses2DInf_NA>>;
110 template <
class GRAPH_t>
116 using namespace mrpt;
122 "Registrar string '%s' does not match a known registrar name.\n" 123 "Specify 'node' 'edge' or 'all'",
130 <<
" Registration Deciders: " << endl;
131 cout << sep_header << endl;
134 regs_descriptions.begin();
135 dec_it != regs_descriptions.end(); ++dec_it)
140 cout << dec->
name << endl;
141 cout << sep_subheader << endl;
147 <<
"Observations that can be used: " << endl;
149 <<
"Multi-robot SLAM capable decider: " 152 <<
"SLAM Type: " << endl;
168 cout <<
"\t\t+ " << *obs_it << endl;
175 dumpRegistrarsToConsole(
"node");
176 dumpRegistrarsToConsole(
"edge");
182 template <
class GRAPH_t>
189 cout << endl <<
"Available GraphSlam Optimizer classes: " << endl;
190 cout << sep_header << endl;
193 optimizers_descriptions.begin();
194 opt_it != optimizers_descriptions.end(); ++opt_it)
197 cout << opt->
name << endl;
198 cout << sep_subheader << endl;
203 <<
"Multi-robot SLAM capable optimizer: " 206 <<
"SLAM Type: " << endl;
221 template <
class GRAPH_t>
228 using namespace mrpt;
235 "Registrar string \"%s\" does not match a known registrar name.\n" 236 "Specify 'node' or 'edge' ",
241 regs_descriptions.begin();
242 dec_it != regs_descriptions.end(); ++dec_it)
269 template <
class GRAPH_t>
275 using namespace mrpt;
281 optimizers_descriptions.begin();
282 opt_it != optimizers_descriptions.end(); ++opt_it)
305 template <
class GRAPH_t>
311 regs_descriptions.clear();
312 optimizers_descriptions.clear();
317 dec->
name =
"CFixedIntervalsNRD";
319 "Register a new node if the distance from the previous node " 320 "surpasses a predefined distance threshold. Uses odometry " 321 "information for estimating the robot movement";
329 regs_descriptions.push_back(dec);
333 dec->
name =
"CICPCriteriaNRD";
335 "Register a new node if the distance from the previous node " 336 "surpasses a predefined distance threshold. Uses 2D/3D RangeScans " 337 "alignment for estimating the robot movement";
344 regs_descriptions.push_back(dec);
348 dec->
name =
"CEmptyNRD";
350 "Empty Decider - does nothing when its class methods are called";
357 regs_descriptions.push_back(dec);
361 dec->
name =
"CICPCriteriaERD";
363 "Register a new edge by aligning the provided 2D/3D RangeScans of " 364 "2 nodes. Uses the goodness of the ICP Alignment as the criterium " 365 "for adding a new edge";
369 "CObservation2DRangeScan - Format #1, #2");
373 regs_descriptions.push_back(dec);
377 dec->
name =
"CEmptyERD";
379 "Empty Decider - does nothing when its class methods are called";
386 regs_descriptions.push_back(dec);
390 dec->
name =
"CLoopCloserERD";
392 "Partition the map and register *sets* of edges based on the " 393 "Pairwise consistency matrix of each set.";
397 "CObservation2DRangeScan - Format #1, #2");
400 regs_descriptions.push_back(dec);
406 opt->
name =
"CEmptyGSO";
408 "Empty Optimizer - does nothing when its class methods are called";
413 optimizers_descriptions.push_back(opt);
418 opt->
name =
"CLevMarqGSO";
419 opt->
description =
"Levenberg-Marqurdt non-linear graphSLAM solver";
424 optimizers_descriptions.push_back(opt);
Class containing the declarations of supplementary methods that can be used in application-related co...
ICP-based Edge Registration.
TUserOptionsChecker()
Constructor.
Abstract graph and tree data structures, plus generic graph algorithms.
Properties struct for the Registration Decider classes.
ICP-based Fixed Intervals Node Registration.
std::vector< std::string > observations_used
Measurements that the current decider class can utilize.
bool is_mr_slam_class
Class indicating if the current decider/optimizer class can be used in a multi-robot SLAM operation...
A directed graph of pose constraints, with edges being the relative poses between pairs of nodes iden...
std::string type
Type of decider.
typename GRAPH_T ::constraint_t::type_value pose_t
std::string description
General description of the decicder or optimizer class.
GLsizei const GLchar ** string
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
#define ASSERTDEBMSG_(f, __ERROR_MSG)
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle...
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
std::string format(const char *fmt,...) MRPT_printf_format_check(1
A std::string version of C sprintf.
#define IS_CLASS(ptrObj, class_name)
Evaluates to true if the given pointer to an object (derived from mrpt::rtti::CObject) is of the give...
std::string name
Name of the decider or optimizer class.
std::string upperCase(const std::string &str)
Returns a upper-case version of a string.
Properties struct for the Optimizer classes.
std::string rawlog_format
Rawlog formats that the decider can be used in.
bool strCmpI(const std::string &s1, const std::string &s2)
Return true if the two strings are equal (case insensitive)
const Scalar * const_iterator