KrisLibrary  1.0.0
MultiModalPlanner.h
1 #ifndef MULTI_MODAL_PLANNER_H
2 #define MULTI_MODAL_PLANNER_H
3 
4 #include "MultiModalCSpace.h"
5 #include "AnyMotionPlanner.h"
6 #include "SBL.h"
7 #include <KrisLibrary/graph/ShortestPaths.h>
8 #include <KrisLibrary/structs/IndexedPriorityQueue.h>
9 #include <map>
10 
12 {
13  public:
15  void InitializeExplicit(ExplicitMMCSpace* cspace);
16  void SetStart(const Config& q,int mode);
17  void SetGoal(const Config& q,int mode);
18  void SetStartMode(int mode);
19  void SetGoalMode(int mode);
20  void ExpandAll();
21  void ExpandMode(int mode,int numSamples=-1);
22  void ExpandTrans(int m1,int m2,int numSamples=-1);
23  void AddTransition(int m1,int m2,const Config& q);
24  bool IsStartAndGoalConnected() const;
25 
26  struct ModeInfo
27  {
28  std::shared_ptr<MotionPlannerInterface> planner;
29  int sampleCount;
30  };
31 
33  {
34  int sampleCount;
35  std::vector<Config> transitions;
36  //index of transition, in roadmap with the lower index
37  std::vector<int> prevRoadmapIndices;
38  //index of transition, in roadmap with the higher index
39  std::vector<int> nextRoadmapIndices;
40  };
41 
43  {
44  inline bool operator < (const TransitionIndex& t) const {
45  if(m1 < t.m1) return true;
46  else if(m1 > t.m1) return false;
47  if(m2 < t.m2) return true;
48  else if(m2 > t.m2) return false;
49  return count < t.count;
50  }
51  int m1,m2;
52  int count;
53  };
54 
55  //helpers
56  TransitionIndex NodeToTransitionIndex(int mode,int roadmapIndex) const;
57  void ConnectTransitions(int mode,int t1,int t2);
58  void ConnectTransitions(const TransitionIndex& t1,const TransitionIndex& t2);
59  void GetTransitionNodes(int mode,std::vector<TransitionIndex>& transitions,std::vector<int>& roadmapIndices) const;
60 
62  MultiModalCSpace<int>* space;
63  PlanningGraph planningGraph;
64  int startMode,startRoadmapIndex;
65  int goalMode,goalRoadmapIndex;
66  int numExpandModeSamples,numExpandTransSamples;
67  MotionPlannerFactory plannerFactory; //for single mode planning
68 
69  //transition indices into the connected component graph
70  //start/goal config are virtual transitions indexed by (-1,startMode,0)
71  //and (goalMode,-1,0), respectively
72  std::map<TransitionIndex,int> ccIndex;
74  int modeSampleCount;
75  int transSampleCount;
76 };
77 
79 
80 struct UpdatePrioritySPP : public Graph::ShortestPathProblem<int,MultiModalPRM::TransitionInfo*>
81 {
83  virtual void OnDistanceUpdate(int n);
84 
86 };
87 
88 
90 {
91  public:
92  virtual double EdgeLength(int s,int t);
93  virtual double EdgeLength(MultiModalPRM::TransitionInfo* trans,int s,int t);
94  virtual double Heuristic(int mode);
95 
97  virtual ~IncrementalMMPRM_Search() {}
98  void Init();
99  bool ExpandMore();
100 
101  void SampleMore(int n);
102  void ExpandAdjacent(int n);
103  void AddEdge(int s,int t,MultiModalPRM::TransitionInfo* e);
104  void PushFringe(int i);
105  void UpdateFringe(int i);
106  int PopFringe();
107  void RefreshFringe();
108  double Priority(int n);
109  bool GoalConnected() const;
110  double PathDistance(int n) const;
112  void UpdateEdgeLength(int s, int t);
115  void UpdatePriority(int n);
116 
117  MultiModalPRM& mmprm;
121  Fringe fringe;
122  ShortestPathProblem spp;
123  SearchGraph searchGraph;
124  std::vector<bool> reachedModes;
125  std::vector<bool> outputModes;
126 
127  double transSampleWeight;
128 };
129 
131 {
132  public:
134  virtual ~IncrementalMMPRM_Explicit() {}
135  void Init();
136  void PlanMore();
137  bool Done() const;
138  bool ExpandMore();
139  void RefineMore();
140  virtual int PickRefineCount();
141 
142  ExplicitMMCSpace* space;
143  MultiModalPRM mmprm;
145  int numRefineSamplesPerMode;
146  int numRefineSamplesPerOldMode;
147  int numRefineSamplesConstant;
148  bool evenRefinement;
149 
150  //temporary / stats
151  std::vector<bool> lastRefineSet;
152  int remainingRefineSamples;
153  int expandPhaseCount,expandStepCount;
154  int refinePhaseCount,refineStepCount;
155 };
156 
157 #endif
Definition: MultiModalPlanner.h:130
Definition: ConnectedComponents.h:9
Vector Config
an alias for Vector
Definition: RobotKinematics3D.h:14
Definition: MultiModalPlanner.h:32
A motion planner creator.
Definition: AnyMotionPlanner.h:257
Definition: MultiModalPlanner.h:11
Definition: MultiModalPlanner.h:42
Single-source shortest paths (Dijkstra&#39;s algorithm)
Definition: ShortestPaths.h:39
Definition: MultiModalPlanner.h:26
Definition: MultiModalCSpace.h:37
Definition: MultiModalPlanner.h:80
Definition: MultiModalPlanner.h:89