Parasol Planning Library (PPL)
MPLibrary.h
Go to the documentation of this file.
1 #ifndef PMPL_MP_LIBRARY_H_
2 #define PMPL_MP_LIBRARY_H_
3 
4 #include "MPLibrary/MPSolution.h"
5 
7 
8 #include "MPProblem/MPProblem.h"
9 #include "MPProblem/MPTask.h"
10 #include "MPProblem/GroupTask.h"
11 #include "MPProblem/Robot/Robot.h"
13 
14 #include "Utilities/MetricUtils.h"
15 #include "Utilities/MPUtils.h"
16 #include "Utilities/XMLNode.h"
17 #include "Utilities/MethodSet.h"
18 
19 #include "Traits/Methods.h"
20 
35 #include "MPLibrary/GoalTracker.h"
36 
37 
42 #ifdef _PARALLEL
43 class MPLibrary : public stapl::p_object
44 #else
45 class MPLibrary
46 #endif
47 {
48 
49  public:
50 
53 
57  typedef size_t VID;
60 
64 
67  struct Solver {
68  std::string label;
69  long seed;
70  std::string baseFilename;
71  bool vizmoDebug;
72  };
73 
77 
93 
97 
100  typedef typename NeighborhoodFinderSet::MethodPointer
112 
116 
117  MPLibrary();
118 
119  MPLibrary(const std::string& _filename);
120 
121  MPLibrary(XMLNode& planningLibraryNode);
122 
123  virtual ~MPLibrary();
124 
128 
131  void ReadXMLFile(const std::string& _filename);
132 
133  void ProcessXML(XMLNode &node);
134 
138 
139  DistanceMetricPointer GetDistanceMetric(const std::string& _l) {
140  return m_distanceMetrics->GetMethod(_l);
141  }
142  void AddDistanceMetric(DistanceMetricPointer _dm, const std::string& _l) {
143  m_distanceMetrics->AddMethod(_dm, _l);
144  }
145 
149 
151  return m_validityCheckers->GetMethod(_l);
152  }
153  void AddValidityChecker(ValidityCheckerPointer _vc, const std::string& _l) {
154  m_validityCheckers->AddMethod(_vc, _l);
155  }
156 
157  // Toggle (negate) the validity output for ALL validity checkers.
158  void ToggleValidity() {
159  for(auto& vc : *m_validityCheckers)
160  vc.second->ToggleValidity();
161  }
162 
166 
168  return m_neighborhoodFinders->GetMethod(_l);
169  }
170  void AddNeighborhoodFinder(NeighborhoodFinderPointer _nf, const std::string& _l) {
172  }
173 
177 
178  const SamplerSet* const GetSamplers() const {return m_samplers;}
179  SamplerPointer GetSampler(const std::string& _l) {
180  return m_samplers->GetMethod(_l);
181  }
182  void AddSampler(SamplerPointer _s, const std::string& _l) {
183  m_samplers->AddMethod(_s, _l);
184  }
185 
189 
190  LocalPlannerPointer GetLocalPlanner(const std::string& _l) {
191  return m_localPlanners->GetMethod(_l);
192  }
193  void AddLocalPlanner(LocalPlannerPointer _lp, const std::string& _l) {
194  m_localPlanners->AddMethod(_lp, _l);
195  }
196 
200 
201  ExtenderPointer GetExtender(const std::string& _l) {
202  return m_extenders->GetMethod(_l);
203  }
204  void AddExtender(ExtenderPointer _mps, const std::string& _l) {
205  m_extenders->AddMethod(_mps, _l);
206  }
207 
211 
212  PathModifierPointer GetPathModifier(const std::string& _l) {
213  return m_pathModifiers->GetMethod(_l);
214  }
215  void AddPathModifier(PathModifierPointer _ps, const std::string& _l) {
216  m_pathModifiers->AddMethod(_ps, _l);
217  }
218 
222 
224  return m_edgeValidityCheckers->GetMethod(_l);
225  }
226  void AddEdgeValidityChecker(EdgeValidityCheckerPointer _ps, const std::string& _l) {
228  }
229 
234 
235  ConnectorPointer GetConnector(const std::string& _l) {
236  return m_connectors->GetMethod(_l);
237  }
238  void AddConnector(ConnectorPointer _c, const std::string& _l) {
239  m_connectors->AddMethod(_c, _l);
240  }
241 
245 
246  MetricPointer GetMetric(const std::string& _l) {return m_metrics->GetMethod(_l);}
247  void AddMetric(MetricPointer _m, const std::string& _l) {
248  m_metrics->AddMethod(_m, _l);
249  }
250 
254 
255  MapEvaluatorPointer GetMapEvaluator(const std::string& _l) {
256  return m_mapEvaluators->GetMethod(_l);
257  }
258  void AddMapEvaluator(MapEvaluatorPointer _me, const std::string& _l) {
259  m_mapEvaluators->AddMethod(_me, _l);
260  }
261 
263 /* void ResetTimeEvaluators() {
264  for(auto& labelPtr : *m_mapEvaluators) {
265  auto t = dynamic_cast<TimeEvaluator*>(labelPtr.second.get());
266  if(t)
267  t->Initialize();
268  }
269  }
270 */
274 
275  const MPStrategySet* const GetMPStrategies() const {return m_mpStrategies;}
276  MPStrategyPointer GetMPStrategy(const std::string& _l) {
277  return m_mpStrategies->GetMethod(_l);
278  }
279  void AddMPStrategy(MPStrategyPointer _mps, const std::string& _l) {
280  m_mpStrategies->AddMethod(_mps, _l);
281  }
282 
286 
287  MPTools* GetMPTools() {return m_mpTools;}
288 
292 
293  MPProblem* GetMPProblem() const noexcept;
294  void SetMPProblem(MPProblem* const _problem) noexcept;
295 
296  MPTask* GetTask() const noexcept;
297  void SetTask(MPTask* const _task) noexcept;
298 
299  GroupTask* GetGroupTask() const noexcept;
300  void SetGroupTask(GroupTask* const _task) noexcept;
301 
302  const std::string& GetBaseFilename() const noexcept;
303  void SetBaseFilename(const std::string& _s) noexcept;
304 
308 
309  MPSolution* GetMPSolution() const noexcept;
310  void SetMPSolution(MPSolution* _sol) noexcept;
311 
312  RoadmapType* GetRoadmap(Robot* const _r = nullptr) const noexcept;
313  GroupRoadmapType* GetGroupRoadmap(RobotGroup* const _g = nullptr) const noexcept;
314  RoadmapType* GetBlockRoadmap(Robot* const _r = nullptr) const noexcept;
315  Path* GetPath(Robot* const _r = nullptr) const noexcept;
316  GroupPath* GetGroupPath(RobotGroup* const _g = nullptr) const noexcept;
317  LocalObstacleMap* GetLocalObstacleMap(Robot* const _r = nullptr) const noexcept;
318 
319  GoalTracker* GetGoalTracker() const noexcept;
320  StatClass* GetStatClass() const noexcept;
321 
325 
334  std::vector<typename RoadmapType::VP> ReconstructEdge(
335  RoadmapType* const _roadmap,
336  const VID _source, const VID _target,
337  const double _posRes, const double _oriRes);
338 
340  std::vector<typename GroupRoadmapType::VP> ReconstructEdge(
341  GroupRoadmapType* const _roadmap,
342  const VID _source, const VID _target,
343  const double _posRes, const double _oriRes);
344 
346  template <typename AbstractRoadmapType>
347  std::vector<typename AbstractRoadmapType::VP> ReconstructEdge(
348  AbstractRoadmapType* const _roadmap,
349  const VID _source, const VID _target);
350 
354 
357  void Halt();
358 
360  bool IsRunning() const noexcept;
361 
363  void SetSeed() const noexcept;
364 
367  void SetSeed(const long _seed) const noexcept;
368 
374  void AddSolver(const std::string& _label, long _seed,
375  const std::string& _baseFileName, bool _vizmoDebug = false) {
376  m_solvers.push_back(Solver{_label, _seed, _baseFileName, _vizmoDebug});
377  }
378 
379  std::vector<std::string> GetSolverLabels() {
380  std::vector<std::string> labels;
381  for (auto& solver : m_solvers)
382  labels.push_back(solver.label);
383  return labels;
384  }
385 
392  void Solve(MPProblem* _problem, MPTask* _task, MPSolution* _solution);
395 
399  void Solve(MPProblem* _problem, MPTask* _task);
400 
402  void Solve(MPProblem* _problem, GroupTask* _task);
403 
404  void Solve(MPProblem* _problem, GroupTask* _task, MPSolution* _solution);
405 
417  void Solve(MPProblem* _problem, MPTask* _task, MPSolution* _solution,
418  const std::string& _label, const long _seed,
419  const std::string& _baseFilename);
420 
424 
425  void Print(std::ostream& _os) const;
426 
428 
429  private:
430 
433 
436  void RunSolver(const Solver& _s);
437 
441 
443  void Initialize();
444 
446  void Uninitialize();
447 
450  bool ParseChild(XMLNode& _node);
451 
455 
456  MPProblem* m_problem{nullptr};
457  MPTask* m_task{nullptr};
458  GroupTask* m_groupTask{nullptr};
459  MPSolution* m_solution{nullptr};
460  std::vector<Solver> m_solvers;
461 
467 
468  std::unique_ptr<GoalTracker> m_goalTracker;
469  MPTools* m_mpTools{nullptr};
470 
474 
475  std::atomic<bool> m_running{true};
476 
478 
479  protected:
480 
485 
495  MetricSet* m_metrics{nullptr};
498 
500 };
501 
502 
503 template <typename AbstractRoadmapType>
504 std::vector<typename AbstractRoadmapType::VP>
506 ReconstructEdge(AbstractRoadmapType* const _roadmap, const VID _source,
507  const VID _target) {
508  auto env = this->GetMPProblem()->GetEnvironment();
509  return this->ReconstructEdge(_roadmap, _source, _target,
510  env->GetPositionRes(), env->GetOrientationRes());
511 }
512 
513 #endif
Definition: GenericStateGraph.h:67
Maintains a set of GoalMap for multiple roadmap/task pairs.
Definition: GoalTracker.h:298
Definition: GroupLocalPlan.h:24
Definition: GroupPath.h:23
Definition: GroupRoadmap.h:25
Definition: GroupTask.h:44
Definition: LocalObstacleMap.h:27
Definition: MPLibrary.h:47
MethodSet< MapEvaluatorMethod > MapEvaluatorSet
Definition: MPLibrary.h:91
void AddValidityChecker(ValidityCheckerPointer _vc, const std::string &_l)
Definition: MPLibrary.h:153
void AddConnector(ConnectorPointer _c, const std::string &_l)
Definition: MPLibrary.h:238
EdgeValidityCheckerPointer GetEdgeValidityChecker(const std::string &_l)
Definition: MPLibrary.h:223
EdgeValidityCheckerSet::MethodPointer EdgeValidityCheckerPointer
Definition: MPLibrary.h:107
RoadmapType * GetBlockRoadmap(Robot *const _r=nullptr) const noexcept
Definition: MPLibrary.cpp:359
void AddSampler(SamplerPointer _s, const std::string &_l)
Definition: MPLibrary.h:182
void AddNeighborhoodFinder(NeighborhoodFinderPointer _nf, const std::string &_l)
Definition: MPLibrary.h:170
MapEvaluatorPointer GetMapEvaluator(const std::string &_l)
Definition: MPLibrary.h:255
MPLibrary()
Definition: MPLibrary.cpp:10
ExtenderPointer GetExtender(const std::string &_l)
Definition: MPLibrary.h:201
PathModifierSet * m_pathModifiers
Definition: MPLibrary.h:492
MetricSet::MethodPointer MetricPointer
Definition: MPLibrary.h:109
SamplerSet::MethodPointer SamplerPointer
Definition: MPLibrary.h:102
MethodSet< ConnectorMethod > ConnectorSet
Definition: MPLibrary.h:89
SamplerPointer GetSampler(const std::string &_l)
Definition: MPLibrary.h:179
GoalTracker * GetGoalTracker() const noexcept
Definition: MPLibrary.cpp:395
LocalObstacleMap * GetLocalObstacleMap(Robot *const _r=nullptr) const noexcept
Definition: MPLibrary.cpp:386
void ToggleValidity()
Definition: MPLibrary.h:158
void SetGroupTask(GroupTask *const _task) noexcept
Definition: MPLibrary.cpp:305
void AddPathModifier(PathModifierPointer _ps, const std::string &_l)
Definition: MPLibrary.h:215
void AddMPStrategy(MPStrategyPointer _mps, const std::string &_l)
Definition: MPLibrary.h:279
void AddDistanceMetric(DistanceMetricPointer _dm, const std::string &_l)
Definition: MPLibrary.h:142
DistanceMetricSet::MethodPointer DistanceMetricPointer
Definition: MPLibrary.h:99
void ReadXMLFile(const std::string &_filename)
Definition: MPLibrary.cpp:121
GenericStateGraph< Cfg, DefaultWeight< Cfg > > RoadmapType
Definition: MPLibrary.h:55
GroupPath * GetGroupPath(RobotGroup *const _g=nullptr) const noexcept
Definition: MPLibrary.cpp:377
void ProcessXML(XMLNode &node)
Definition: MPLibrary.cpp:141
GroupTask * GetGroupTask() const noexcept
Definition: MPLibrary.cpp:298
NeighborhoodFinderPointer GetNeighborhoodFinder(const std::string &_l)
Definition: MPLibrary.h:167
PathModifierSet::MethodPointer PathModifierPointer
Definition: MPLibrary.h:105
size_t VID
Definition: MPLibrary.h:57
ExtenderSet * m_extenders
Definition: MPLibrary.h:491
MethodSet< MetricMethod > MetricSet
Definition: MPLibrary.h:90
GroupRoadmap< GroupCfg< RoadmapType >, GroupLocalPlan< RoadmapType > > GroupRoadmapType
Definition: MPLibrary.h:56
bool IsRunning() const noexcept
Check to see if the strategy should continue.
Definition: MPLibrary.cpp:476
GroupRoadmapType * GetGroupRoadmap(RobotGroup *const _g=nullptr) const noexcept
Definition: MPLibrary.cpp:350
MPTask * GetTask() const noexcept
Definition: MPLibrary.cpp:284
const std::string & GetBaseFilename() const noexcept
Definition: MPLibrary.cpp:312
std::vector< typename RoadmapType::VP > ReconstructEdge(RoadmapType *const _roadmap, const VID _source, const VID _target, const double _posRes, const double _oriRes)
Definition: MPLibrary.cpp:410
MethodSet< EdgeValidityCheckerMethod > EdgeValidityCheckerSet
Definition: MPLibrary.h:88
Path * GetPath(Robot *const _r=nullptr) const noexcept
Definition: MPLibrary.cpp:368
MapEvaluatorSet::MethodPointer MapEvaluatorPointer
Definition: MPLibrary.h:110
std::vector< std::string > GetSolverLabels()
Definition: MPLibrary.h:379
MPSolutionType MPSolution
Definition: MPLibrary.h:54
DistanceMetricPointer GetDistanceMetric(const std::string &_l)
Definition: MPLibrary.h:139
const SamplerSet *const GetSamplers() const
Definition: MPLibrary.h:178
MetricSet * m_metrics
Definition: MPLibrary.h:495
void AddMapEvaluator(MapEvaluatorPointer _me, const std::string &_l)
Definition: MPLibrary.h:258
StatClass * GetStatClass() const noexcept
Definition: MPLibrary.cpp:402
void AddSolver(const std::string &_label, long _seed, const std::string &_baseFileName, bool _vizmoDebug=false)
Definition: MPLibrary.h:374
ValidityCheckerSet * m_validityCheckers
Definition: MPLibrary.h:487
ValidityCheckerPointer GetValidityChecker(const std::string &_l)
Definition: MPLibrary.h:150
void Solve(MPProblem *_problem, MPTask *_task, MPSolution *_solution)
Definition: MPLibrary.cpp:503
void Print(std::ostream &_os) const
Print each method set.
Definition: MPLibrary.cpp:249
PathModifierPointer GetPathModifier(const std::string &_l)
Definition: MPLibrary.h:212
MethodSet< LocalPlannerMethod > LocalPlannerSet
Definition: MPLibrary.h:84
const MPStrategySet *const GetMPStrategies() const
Definition: MPLibrary.h:275
MPProblem * GetMPProblem() const noexcept
Definition: MPLibrary.cpp:269
MethodSet< MPStrategyMethod > MPStrategySet
Definition: MPLibrary.h:92
ExtenderSet::MethodPointer ExtenderPointer
Definition: MPLibrary.h:104
EdgeValidityCheckerSet * m_edgeValidityCheckers
Definition: MPLibrary.h:493
NeighborhoodFinderSet::MethodPointer NeighborhoodFinderPointer
Definition: MPLibrary.h:101
void AddLocalPlanner(LocalPlannerPointer _lp, const std::string &_l)
Definition: MPLibrary.h:193
void AddExtender(ExtenderPointer _mps, const std::string &_l)
Definition: MPLibrary.h:204
MetricPointer GetMetric(const std::string &_l)
Definition: MPLibrary.h:246
MethodSet< DistanceMetricMethod > DistanceMetricSet
Definition: MPLibrary.h:78
DistanceMetricSet * m_distanceMetrics
Definition: MPLibrary.h:486
MethodSet< NeighborhoodFinderMethod > NeighborhoodFinderSet
Definition: MPLibrary.h:82
MethodSet< PathModifierMethod > PathModifierSet
Definition: MPLibrary.h:86
MethodSet< ValidityCheckerMethod > ValidityCheckerSet
Definition: MPLibrary.h:80
void SetBaseFilename(const std::string &_s) noexcept
Definition: MPLibrary.cpp:319
LocalPlannerPointer GetLocalPlanner(const std::string &_l)
Definition: MPLibrary.h:190
void SetTask(MPTask *const _task) noexcept
Definition: MPLibrary.cpp:291
MPTools * GetMPTools()
Definition: MPLibrary.h:287
SamplerSet * m_samplers
Definition: MPLibrary.h:489
void AddMetric(MetricPointer _m, const std::string &_l)
Definition: MPLibrary.h:247
void AddEdgeValidityChecker(EdgeValidityCheckerPointer _ps, const std::string &_l)
Definition: MPLibrary.h:226
MPStrategySet * m_mpStrategies
Definition: MPLibrary.h:497
MapEvaluatorSet * m_mapEvaluators
Definition: MPLibrary.h:496
RoadmapType * GetRoadmap(Robot *const _r=nullptr) const noexcept
Definition: MPLibrary.cpp:341
MPStrategySet::MethodPointer MPStrategyPointer
Definition: MPLibrary.h:111
MPSolution * GetMPSolution() const noexcept
Definition: MPLibrary.cpp:327
NeighborhoodFinderSet * m_neighborhoodFinders
Definition: MPLibrary.h:488
MPStrategyPointer GetMPStrategy(const std::string &_l)
Definition: MPLibrary.h:276
MethodSet< ExtenderMethod > ExtenderSet
Definition: MPLibrary.h:85
void SetMPProblem(MPProblem *const _problem) noexcept
Definition: MPLibrary.cpp:276
ConnectorPointer GetConnector(const std::string &_l)
Definition: MPLibrary.h:235
ConnectorSet * m_connectors
Definition: MPLibrary.h:494
void SetSeed() const noexcept
Set the current seed to match the first solver node.
Definition: MPLibrary.cpp:483
void Halt()
Definition: MPLibrary.cpp:469
virtual ~MPLibrary()
Definition: MPLibrary.cpp:53
LocalPlannerSet::MethodPointer LocalPlannerPointer
Definition: MPLibrary.h:103
void SetMPSolution(MPSolution *_sol) noexcept
Definition: MPLibrary.cpp:334
MPToolsType MPTools
Definition: MPLibrary.h:58
MethodSet< SamplerMethod > SamplerSet
Definition: MPLibrary.h:83
GoalTrackerType GoalTracker
Definition: MPLibrary.h:59
ConnectorSet::MethodPointer ConnectorPointer
Definition: MPLibrary.h:108
LocalPlannerSet * m_localPlanners
Definition: MPLibrary.h:490
ValidityCheckerSet::MethodPointer ValidityCheckerPointer
Definition: MPLibrary.h:98
Definition: MPProblem.h:34
Environment * GetEnvironment()
Get the environment object.
Definition: MPProblem.cpp:198
Definition: MPSolution.h:34
Definition: MPTask.h:46
Definition: MPTools.h:87
Definition: MethodSet.h:58
MethodPointer GetMethod(const std::string &_label)
Definition: MethodSet.h:224
void AddMethod(XMLNode &_node)
Definition: MethodSet.h:177
Method * MethodPointer
Definition: MethodSet.h:65
Definition: Path.h:23
A group of one or more robots.
Definition: RobotGroup.h:17
Definition: Robot.h:31
Definition: MetricUtils.h:29
Definition: XMLNode.h:27
Definition: MPLibrary.h:67
bool vizmoDebug
Save vizmo debug info?
Definition: MPLibrary.h:71
std::string label
The XML label for the strategy to use.
Definition: MPLibrary.h:68
long seed
The seed.
Definition: MPLibrary.h:69
std::string baseFilename
The base name for output files.
Definition: MPLibrary.h:70