Parasol Planning Library (PPL)
Methods.h
Go to the documentation of this file.
1 #ifndef PMPL_AVAILABLE_METHODS_H_
2 #define PMPL_AVAILABLE_METHODS_H_
3 
4 #include <boost/preprocessor/seq.hpp>
5 #define BOOST_PP_SEQ_ENUM_0
6 
7 // Connectors
8 #define CCS_CONNECTOR_AVAILABLE 1
9 #define NEIGHBOR_CONNECTOR_AVAILABLE 1
10 #define REWIRE_CONNECTOR_AVAILABLE 1
11 
12 // DistanceMetrics
13 #define BIN_LP_SWEPT_AVAILABLE 1
14 #define LP_SWEPT_AVAILABLE 1
15 #define EUCLIDEAN_AVAILABLE 1
16 #define SCALED_EUCLIDEAN_AVAILABLE 0
17 #define WEIGHTED_EUCLIDEAN_AVAILABLE 1
18 #define MINKOWSKI_AVAILABLE 1
19 #define MANHATTAN_AVAILABLE 1
20 #define RMSD_AVAILABLE 1
21 #define TOPOLOGICAL_DISTANCE_AVAILABLE 1
22 #define WORKSPACE_TRANSLATION_AVAILABLE 1
23 
24 // EdgeValidityCheckers
25 #define INTERMEDIATES_EVC_AVAILABLE 1
26 
27 // Extenders
28 #define BASIC_EXTENDER_AVAILABLE 1
29 #define ROTATION_THEN_TRANSLATION_AVAILABLE 1
30 
31 // LocalPlanners
32 #define STRAIGHT_LINE_AVAILABLE 1
33 #define HIERARCHICAL_LP_AVAILABLE 1
34 
35 // MapEvaluators
36 #define CBS_QUERY_AVAILABLE 1
37 #define CLEARANCE_QUERY_AVAILABLE 1
38 #define COLLISION_EVAL_AVAILABLE 1
39 #define COMPOSE_EVAL_AVAILABLE 1
40 #define CONDITIONAL_EVAL_AVAILABLE 1
41 #define GROUP_QUERY_AVAILABLE 1
42 #define LAZY_QUERY_AVAILABLE 1
43 #define MIN_DIST_EVAL_AVAILABLE 1
44 #define NEGATE_EVAL_AVAILABLE 1
45 #define PATH_EVAL_AVAILABLE 1
46 #define PRINT_MAP_AVAILABLE 1
47 #define QUERY_METHOD_AVAILABLE 1
48 #define SIPP_METHOD_AVAILABLE 1
49 #define TIME_EVAL_AVAILABLE 1
50 
51 // Metrics
52 #define NUM_NODES_AVAILABLE 1
53 #define NUM_EDGES_AVAILABLE 1
54 #define TIME_METRIC_AVAILABLE 1
55 
56 // MPStrategies
57 #define ADAPTIVE_RRT_AVAILABLE 1
58 #define BASIC_PRM_AVAILABLE 1
59 #define BASIC_RRT_AVAILABLE 1
60 #define DYNAMIC_DOMAIN_RRT_AVAILABLE 1
61 #define DYNAMIC_REGION_RRT_AVAILABLE 1
62 #define DYNAMIC_REGION_PRM_AVAILABLE 1
63 #define EET_AVAILABLE 1
64 #define GROUP_DECOUPLED_STRAT_AVAILABLE 1
65 #define GROUP_PRM_AVAILABLE 1
66 #define MODIFY_PATH_AVAILABLE 1
67 #define PATH_STRATEGY_AVAILABLE 0
68 #define SYCLOP_AVAILABLE 1
69 #define TOGGLE_PRM_AVAILABLE 1
70 #define WRENCH_ACCESS_STRAT_AVAILABLE 1
71 
72 // NeighborhoodFinders
73 #define BRUTE_FORCE_NF_AVAILABLE 1
74 #define KDTREE_NF_AVAILABLE 1
75 #define RADIUS_NF_AVAILABLE 1
76 #define RANDOM_NF_AVAILABLE 1
77 
78 // PathModifiers
79 #define SHORTCUTTING_AVAILABLE 1
80 
81 // Samplers
82 #define BRIDGE_TEST_AVAILABLE 1
83 #define GAUSSIAN_AVAILABLE 1
84 #define MIX_SAMPLER_AVAILABLE 1
85 #define OBSTACLE_BASED_SAMPLER_AVAILABLE 1
86 #define UNIFORM_RANDOM_AVAILABLE 1
87 #define UNIFORM_OBSTACLE_AVAILABLE 0
88 
89 // ValidityCheckers
90 #define ALWAYS_TRUE_AVAILABLE 1
91 #define COMPOSE_CD_AVAILABLE 1
92 #define COMPOSE_VC_AVAILABLE 1
93 #define NODE_CLEARANCE_VC_AVAILABLE 1
94 #define OBSTACLE_CLEARANCE_VC_AVAILABLE 1
95 #define TERRAIN_VC_AVAILABLE 1
96 #define TOPOLOGICAL_MAP_VC_AVAILABLE 1
97 
98 /******************************* Connectors ***********************************/
99 #if CCS_CONNECTOR_AVAILABLE
101 #endif
102 #if NEIGHBOR_CONNECTOR_AVAILABLE
104 #endif
105 #if REWIRE_CONNECTOR_AVAILABLE
107 #endif
108 
109 #define CONNECTOR_CLASSES \
110  ((CCsConnector, CCS_CONNECTOR_AVAILABLE))( \
111  (NeighborhoodConnector, NEIGHBOR_CONNECTOR_AVAILABLE))( \
112  (RewireConnector, REWIRE_CONNECTOR_AVAILABLE))
113 
114 /***************************** DistanceMetrics ********************************/
115 #if BIN_LP_SWEPT_AVAILABLE
117 #endif
118 #if LP_SWEPT_AVAILABLE
120 #endif
121 #if MINKOWSKI_AVAILABLE
123 #endif
124 #if EUCLIDEAN_AVAILABLE
126 #endif
127 #if SCALED_EUCLIDEAN_AVAILABLE
129 #endif
130 #if WEIGHTED_EUCLIDEAN_AVAILABLE
132 #endif
133 #if MANHATTAN_AVAILABLE
135 #endif
136 #if RMSD_AVAILABLE
138 #endif
139 #if TOPOLOGICAL_DISTANCE_AVAILABLE
141 #endif
142 #if WORKSPACE_TRANSLATION_AVAILABLE
144 #endif
145 
146 #define DM_CLASSES \
147  ((BinaryLPSweptDistance, BIN_LP_SWEPT_AVAILABLE))( \
148  (LPSweptDistance, LP_SWEPT_AVAILABLE))( \
149  (MinkowskiDistance, MINKOWSKI_AVAILABLE))( \
150  (EuclideanDistance, EUCLIDEAN_AVAILABLE))( \
151  (ScaledEuclideanDistance, SCALED_EUCLIDEAN_AVAILABLE))( \
152  (WeightedEuclideanDistance, WEIGHTED_EUCLIDEAN_AVAILABLE))( \
153  (ManhattanDistance, MANHATTAN_AVAILABLE))( \
154  (RMSDDistance, RMSD_AVAILABLE))( \
155  (TopologicalDistance, TOPOLOGICAL_DISTANCE_AVAILABLE))( \
156  (WorkspaceTranslationDistance, WORKSPACE_TRANSLATION_AVAILABLE))
157 
158 /************************** EdgeValidityCheckers ******************************/
159 #if INTERMEDIATES_EVC_AVAILABLE
161 #endif
162 
163 #define EVC_CLASSES \
164  ((IntermediatesEdgeValidityChecker, INTERMEDIATES_EVC_AVAILABLE))
165 
166 /******************************* Extenders ************************************/
167 #if BASIC_EXTENDER_AVAILABLE
169 #endif
170 #if ROTATION_THEN_TRANSLATION_AVAILABLE
172 #endif
173 
174 #define EXT_CLASSES \
175  ((BasicExtender, BASIC_EXTENDER_AVAILABLE))( \
176  (RotationThenTranslation, ROTATION_THEN_TRANSLATION_AVAILABLE))
177 // ... and so on ...
178 
179 /***************************** LocalPlanners **********************************/
180 #if STRAIGHT_LINE_AVAILABLE
182 #endif
183 #if HIERARCHICAL_LP_AVAILABLE
185 #endif
186 
187 #define LP_CLASSES \
188  ((StraightLine, STRAIGHT_LINE_AVAILABLE))( \
189  (HierarchicalLP, HIERARCHICAL_LP_AVAILABLE))
190 // ... and so on ...
191 
192 /***************************** MapEvaluators **********************************/
193 #if CBS_QUERY_AVAILABLE
195 #endif
196 #if CLEARANCE_QUERY_AVAILABLE
198 #endif
199 #if CONDITIONAL_EVAL_AVAILABLE
201 #endif
202 #if COLLISION_EVAL_AVAILABLE
204 #endif
205 #if COMPOSE_EVAL_AVAILABLE
207 #endif
208 #if GROUP_QUERY_AVAILABLE
210 #endif
211 #if LAZY_QUERY_AVAILABLE
213 #endif
214 #if MIN_DIST_EVAL_AVAILABLE
216 #endif
217 #if NEGATE_EVAL_AVAILABLE
219 #endif
220 #if PATH_EVAL_AVAILABLE
222 #endif
223 #if PRINT_MAP_AVAILABLE
225 #endif
226 #if QUERY_METHOD_AVAILABLE
228 #endif
229 #if SIPP_METHOD_AVAILABLE
231 #endif
232 #if TIME_EVAL_AVAILABLE
234 #endif
235 
236 #define ME_CLASSES \
237  ((CBSQuery, CBS_QUERY_AVAILABLE))( \
238  (ClearanceQuery, CLEARANCE_QUERY_AVAILABLE))( \
239  (CollisionEvaluator, COLLISION_EVAL_AVAILABLE))( \
240  (ComposeEvaluator, COMPOSE_EVAL_AVAILABLE))( \
241  (ConditionalEvaluator, CONDITIONAL_EVAL_AVAILABLE))( \
242  (GroupQuery, GROUP_QUERY_AVAILABLE))((LazyQuery, LAZY_QUERY_AVAILABLE))( \
243  (MinimumDistanceEvaluator, MIN_DIST_EVAL_AVAILABLE))( \
244  (NegateEvaluator, NEGATE_EVAL_AVAILABLE))( \
245  (PathEvaluator, PATH_EVAL_AVAILABLE))( \
246  (PrintMapEvaluation, PRINT_MAP_AVAILABLE))( \
247  (QueryMethod, QUERY_METHOD_AVAILABLE))( \
248  (SIPPMethod, SIPP_METHOD_AVAILABLE))( \
249  (TimeEvaluator, TIME_EVAL_AVAILABLE))
250 
251 /******************************** Metrics *************************************/
252 #if NUM_NODES_AVAILABLE
254 #endif
255 #if NUM_EDGES_AVAILABLE
257 #endif
258 #if TIME_METRIC_AVAILABLE
260 #endif
261 
262 #define METRIC_CLASSES \
263  ((NumNodesMetric, NUM_NODES_AVAILABLE))( \
264  (NumEdgesMetric, NUM_EDGES_AVAILABLE))( \
265  (TimeMetric, TIME_METRIC_AVAILABLE))
266 
267 /***************************** MPStrategies ***********************************/
268 #if ADAPTIVE_RRT_AVAILABLE
270 #endif
271 #if BASIC_PRM_AVAILABLE
273 #endif
274 #if BASIC_RRT_AVAILABLE
276 #endif
277 #if DYNAMIC_DOMAIN_RRT_AVAILABLE
279 #endif
280 #if DYNAMIC_REGION_RRT_AVAILABLE
282 #endif
283 #if DYNAMIC_REGION_PRM_AVAILABLE
285 #endif
286 #if EET_AVAILABLE
288 #endif
289 #if GROUP_DECOUPLED_STRAT_AVAILABLE
291 #endif
292 #if GROUP_PRM_AVAILABLE
294 #endif
295 #if MODIFY_PATH_AVAILABLE
297 #endif
298 #if PATH_STRATEGY_AVAILABLE
300 #endif
301 #if SYCLOP_AVAILABLE
303 #endif
304 #if TOGGLE_PRM_AVAILABLE
306 #endif
307 #if WRENCH_ACCESS_STRAT_AVAILABLE
309 #endif
310 
311 #define MPSTRATEGY_CLASSES \
312  ((AdaptiveRRT, ADAPTIVE_RRT_AVAILABLE))((BasicPRM, BASIC_PRM_AVAILABLE))( \
313  (BasicRRTStrategy, BASIC_RRT_AVAILABLE))( \
314  (DynamicDomainRRT, DYNAMIC_DOMAIN_RRT_AVAILABLE))( \
315  (DynamicRegionRRT, DYNAMIC_REGION_RRT_AVAILABLE))(( \
316  DynamicRegionsPRM, DYNAMIC_REGION_PRM_AVAILABLE))((EET, EET_AVAILABLE))( \
317  (GroupDecoupledStrategy, GROUP_DECOUPLED_STRAT_AVAILABLE))( \
318  (GroupPRM, GROUP_PRM_AVAILABLE))((ModifyPath, MODIFY_PATH_AVAILABLE))( \
319  (PathStrategy, PATH_STRATEGY_AVAILABLE))((Syclop, SYCLOP_AVAILABLE))( \
320  (TogglePRMStrategy, TOGGLE_PRM_AVAILABLE))( \
321  (WrenchAccessibilityStrategy, WRENCH_ACCESS_STRAT_AVAILABLE))
322 
323 /************************** NeighborhoodFinders *******************************/
324 #if BRUTE_FORCE_NF_AVAILABLE
326 #endif
327 #if KDTREE_NF_AVAILABLE
329 #endif
330 #if RADIUS_NF_AVAILABLE
332 #endif
333 #if RANDOM_NF_AVAILABLE
335 #endif
336 
337 #define NF_CLASSES \
338  ((BruteForceNF, BRUTE_FORCE_NF_AVAILABLE))((KdTreeNF, KDTREE_NF_AVAILABLE))( \
339  (RandomNF, RANDOM_NF_AVAILABLE))((RadiusNF, RADIUS_NF_AVAILABLE))
340 
341 /***************************** PathModifiers **********************************/
342 #if SHORTCUTTING_AVAILABLE
344 #endif
345 
346 #define PM_CLASSES ((ShortcuttingPathModifier, SHORTCUTTING_AVAILABLE))
347 
348 /******************************* Samplers *************************************/
349 #if BRIDGE_TEST_AVAILABLE
351 #endif
352 #if GAUSSIAN_AVAILABLE
354 #endif
355 #if MIX_SAMPLER_AVAILABLE
357 #endif
358 #if OBSTACLE_BASED_SAMPLER_AVAILABLE
360 #endif
361 #if UNIFORM_RANDOM_AVAILABLE
363 #endif
364 #if UNIFORM_OBSTACLE_AVAILABLE
366 #endif
367 
368 #define SAMPLER_CLASSES \
369  ((BridgeTestSampler, BRIDGE_TEST_AVAILABLE))( \
370  (GaussianSampler, GAUSSIAN_AVAILABLE))( \
371  (MixSampler, MIX_SAMPLER_AVAILABLE))( \
372  (ObstacleBasedSampler, OBSTACLE_BASED_SAMPLER_AVAILABLE))( \
373  (UniformRandomSampler, UNIFORM_RANDOM_AVAILABLE))( \
374  (UniformObstacleBasedSampler, UNIFORM_OBSTACLE_AVAILABLE))
375 
376 /**************************** ValidityCheckers ********************************/
378 #if ALWAYS_TRUE_AVAILABLE
380 #endif
381 #if COMPOSE_CD_AVAILABLE
383 #endif
384 #if COMPOSE_VC_AVAILABLE
386 #endif
387 #if NODE_CLEARANCE_VC_AVAILABLE
389 #endif
390 #if OBSTACLE_CLEARANCE_VC_AVAILABLE
392 #endif
393 #if TERRAIN_VC_AVAILABLE
395 #endif
396 #if TOPOLOGICAL_MAP_VC_AVAILABLE
398 #endif
399 
400 #define VC_CLASSES \
401  ((CollisionDetectionValidity, 1))( \
402  (AlwaysTrueValidity, ALWAYS_TRUE_AVAILABLE))( \
403  (ComposeCollision, COMPOSE_CD_AVAILABLE))( \
404  (ComposeValidity, COMPOSE_VC_AVAILABLE))( \
405  (NodeClearanceValidity, NODE_CLEARANCE_VC_AVAILABLE))( \
406  (ObstacleClearanceValidity, OBSTACLE_CLEARANCE_VC_AVAILABLE))( \
407  (TerrainValidityChecker, TERRAIN_VC_AVAILABLE))( \
408  (TopologicalMapValidity, TOPOLOGICAL_MAP_VC_AVAILABLE))
409 
410 /******************************************************************************/
411 
412 #define ADD_CLASS_IF_AVAILABLE(r, data, elem) \
413  BOOST_PP_IF(BOOST_PP_TUPLE_ELEM(2, 1, elem), \
414  (BOOST_PP_TUPLE_ELEM(2, 0, elem)), BOOST_PP_EMPTY())
415 
416 #define CONN_SEQ \
417  BOOST_PP_SEQ_FOR_EACH(ADD_CLASS_IF_AVAILABLE, _, CONNECTOR_CLASSES)
418 #define DM_SEQ BOOST_PP_SEQ_FOR_EACH(ADD_CLASS_IF_AVAILABLE, _, DM_CLASSES)
419 #define EXT_SEQ BOOST_PP_SEQ_FOR_EACH(ADD_CLASS_IF_AVAILABLE, _, EXT_CLASSES)
420 #define EVC_SEQ BOOST_PP_SEQ_FOR_EACH(ADD_CLASS_IF_AVAILABLE, _, EVC_CLASSES)
421 #define LP_SEQ BOOST_PP_SEQ_FOR_EACH(ADD_CLASS_IF_AVAILABLE, _, LP_CLASSES)
422 #define ME_SEQ BOOST_PP_SEQ_FOR_EACH(ADD_CLASS_IF_AVAILABLE, _, ME_CLASSES)
423 #define METRIC_SEQ \
424  BOOST_PP_SEQ_FOR_EACH(ADD_CLASS_IF_AVAILABLE, _, METRIC_CLASSES)
425 #define MPSTRATEGY_SEQ \
426  BOOST_PP_SEQ_FOR_EACH(ADD_CLASS_IF_AVAILABLE, _, MPSTRATEGY_CLASSES)
427 #define NF_SEQ BOOST_PP_SEQ_FOR_EACH(ADD_CLASS_IF_AVAILABLE, _, NF_CLASSES)
428 #define PM_SEQ BOOST_PP_SEQ_FOR_EACH(ADD_CLASS_IF_AVAILABLE, _, PM_CLASSES)
429 #define SAMPLER_SEQ \
430  BOOST_PP_SEQ_FOR_EACH(ADD_CLASS_IF_AVAILABLE, _, SAMPLER_CLASSES)
431 #define VC_SEQ BOOST_PP_SEQ_FOR_EACH(ADD_CLASS_IF_AVAILABLE, _, VC_CLASSES)
432 
437 struct MPUniverse {
438  // types of distance metrics available in our world
439  typedef boost::mpl::list<BOOST_PP_SEQ_ENUM(DM_SEQ)> DistanceMetricMethodList;
440 
441  // types of validity checkers available in our world
442  typedef boost::mpl::list<BOOST_PP_SEQ_ENUM(VC_SEQ)> ValidityCheckerMethodList;
443 
444  // types of neighborhood finders available in our world
445  typedef boost::mpl::list<BOOST_PP_SEQ_ENUM(NF_SEQ)>
447 
448  // types of samplers available in our world
449  typedef boost::mpl::list<BOOST_PP_SEQ_ENUM(SAMPLER_SEQ)> SamplerMethodList;
450 
451  // types of local planners available in our world
452  typedef boost::mpl::list<BOOST_PP_SEQ_ENUM(LP_SEQ)> LocalPlannerMethodList;
453 
454  // types of extenders avaible in our world
455  typedef boost::mpl::list<BOOST_PP_SEQ_ENUM(EXT_SEQ)> ExtenderMethodList;
456 
457  // types of path smoothing available in our world
458  typedef boost::mpl::list<BOOST_PP_SEQ_ENUM(PM_SEQ)> PathModifierMethodList;
459 
460  // types of edge validity checkers available in our world
461  typedef boost::mpl::list<BOOST_PP_SEQ_ENUM(EVC_SEQ)>
463 
464  // types of connectors available in our world
465  typedef boost::mpl::list<BOOST_PP_SEQ_ENUM(CONN_SEQ)> ConnectorMethodList;
466 
467  // types of metrics available in our world
468  typedef boost::mpl::list<BOOST_PP_SEQ_ENUM(METRIC_SEQ)> MetricMethodList;
469 
470  // types of map evaluators available in our world
471  typedef boost::mpl::list<BOOST_PP_SEQ_ENUM(ME_SEQ)> MapEvaluatorMethodList;
472 
473  // types of motion planning strategies available in our world
474  typedef boost::mpl::list<BOOST_PP_SEQ_ENUM(MPSTRATEGY_SEQ)>
476 };
477 
478 #endif
#define LP_SEQ
Definition: Methods.h:421
#define EXT_SEQ
Definition: Methods.h:419
#define METRIC_SEQ
Definition: Methods.h:423
#define MPSTRATEGY_SEQ
Definition: Methods.h:425
#define VC_SEQ
Definition: Methods.h:431
#define EVC_SEQ
Definition: Methods.h:420
#define PM_SEQ
Definition: Methods.h:428
#define CONN_SEQ
Definition: Methods.h:416
#define SAMPLER_SEQ
Definition: Methods.h:429
#define DM_SEQ
Definition: Methods.h:418
#define NF_SEQ
Definition: Methods.h:427
#define ME_SEQ
Definition: Methods.h:422
Defines available methods in the Motion Planning Universe.
Definition: Methods.h:437
boost::mpl::list< BOOST_PP_SEQ_ENUM(ME_SEQ)> MapEvaluatorMethodList
Definition: Methods.h:471
boost::mpl::list< BOOST_PP_SEQ_ENUM(EXT_SEQ)> ExtenderMethodList
Definition: Methods.h:455
boost::mpl::list< BOOST_PP_SEQ_ENUM(PM_SEQ)> PathModifierMethodList
Definition: Methods.h:458
boost::mpl::list< BOOST_PP_SEQ_ENUM(VC_SEQ)> ValidityCheckerMethodList
Definition: Methods.h:442
boost::mpl::list< BOOST_PP_SEQ_ENUM(METRIC_SEQ)> MetricMethodList
Definition: Methods.h:468
boost::mpl::list< BOOST_PP_SEQ_ENUM(LP_SEQ)> LocalPlannerMethodList
Definition: Methods.h:452
boost::mpl::list< BOOST_PP_SEQ_ENUM(MPSTRATEGY_SEQ)> MPStrategyMethodList
Definition: Methods.h:475
boost::mpl::list< BOOST_PP_SEQ_ENUM(DM_SEQ)> DistanceMetricMethodList
Definition: Methods.h:439
boost::mpl::list< BOOST_PP_SEQ_ENUM(EVC_SEQ)> EdgeValidityCheckerMethodList
Definition: Methods.h:462
boost::mpl::list< BOOST_PP_SEQ_ENUM(CONN_SEQ)> ConnectorMethodList
Definition: Methods.h:465
boost::mpl::list< BOOST_PP_SEQ_ENUM(SAMPLER_SEQ)> SamplerMethodList
Definition: Methods.h:449
boost::mpl::list< BOOST_PP_SEQ_ENUM(NF_SEQ)> NeighborhoodFinderMethodList
Definition: Methods.h:446