KrisLibrary  1.0.0
EdgePlannerHelpers.h
1 #ifndef PLANNING_EDGE_PLANNER_UTILS_H
2 #define PLANNING_EDGE_PLANNER_UTILS_H
3 
4 #include "EdgePlanner.h"
5 
8 {
9 public:
10  TrueEdgeChecker(CSpace* space,const InterpolatorPtr& path);
11  TrueEdgeChecker(CSpace* space,const Config& a,const Config& b);
12  virtual bool IsVisible() { return true; }
13  virtual EdgePlannerPtr Copy() const { return std::make_shared<TrueEdgeChecker>(space,path); }
14  virtual EdgePlannerPtr ReverseCopy() const { return std::make_shared<TrueEdgeChecker>(space,std::make_shared<ReverseInterpolator>(path)); }
15 
16  virtual bool IsIncremental() const { return true; }
17  virtual Real Priority() const { return 0; }
18  virtual bool Plan() { return false; }
19  virtual bool Done() const { return true; }
20  virtual bool Failed() const { return false; }
21 };
22 
25 {
26 public:
27  FalseEdgeChecker(CSpace* space,const InterpolatorPtr& path);
28  FalseEdgeChecker(CSpace* space,const Config& a,const Config& b);
29  virtual bool IsVisible() { return false; }
30  virtual EdgePlannerPtr Copy() const { return std::make_shared<FalseEdgeChecker>(space,path); }
31  virtual EdgePlannerPtr ReverseCopy() const { return std::make_shared<FalseEdgeChecker>(space,std::make_shared<ReverseInterpolator>(path)); }
32 
33  virtual bool IsIncremental() const { return true; }
34  virtual Real Priority() const { return 0; }
35  virtual bool Plan() { return false; }
36  virtual bool Done() const { return true; }
37  virtual bool Failed() const { return true; }
38 };
39 
42 {
43 public:
44  EndpointEdgeChecker(CSpace* space,const InterpolatorPtr& path);
45  EndpointEdgeChecker(CSpace* space,const Config& a,const Config& b);
46  virtual bool IsVisible();
47  virtual EdgePlannerPtr Copy() const { return std::make_shared<EndpointEdgeChecker>(space,path); }
48  virtual EdgePlannerPtr ReverseCopy() const { return std::make_shared<EndpointEdgeChecker>(space,std::make_shared<ReverseInterpolator>(path)); }
49 };
50 
51 
52 /* @ingroup MotionPlanning
53  * Edge planner/checker that copies its truth value from another planner. Note:
54  * this adds a reference to the input edge planner, or takes ownership if it is
55  * a raw pointer.
56  *
57  * Optionally, can override the space and the endpoints such that the
58  * interpolation is done with the input path, but the work in verification
59  * is done by the edge planner e.
60  */
62 {
63 public:
65  PiggybackEdgePlanner(EdgePlannerPtr e);
67  PiggybackEdgePlanner(CSpace* space,const InterpolatorPtr& path,EdgePlannerPtr e);
69  PiggybackEdgePlanner(CSpace* space,const Config& a,const Config& b,EdgePlannerPtr e);
70  virtual ~PiggybackEdgePlanner() {}
71  virtual bool IsVisible() { return e->IsVisible(); }
72  virtual EdgePlannerPtr Copy() const;
73  virtual EdgePlannerPtr ReverseCopy() const;
74 
75  virtual bool IsIncremental() const { return e->IsIncremental(); }
76  virtual Real Priority() const { return e->Priority(); }
77  virtual bool Plan() { return e->Plan(); }
78  virtual bool Done() const { return e->Done(); }
79  virtual bool Failed() const { return e->Failed(); }
80 
81  virtual void Eval(Real u,Config& x) const;
82  virtual Real Length() const;
83  virtual const Config& Start() const;
84  virtual const Config& End() const;
85  virtual CSpace* Space() const;
86 
87  EdgePlannerPtr e;
88 };
89 
94 {
95 public:
96  PathEdgeChecker(CSpace* space,const std::vector<EdgePlannerPtr> & path);
97  virtual void Eval(Real u,Config& x) const;
98  virtual Real Length() const;
99  virtual const Config& Start() const;
100  virtual const Config& End() const;
101  virtual bool IsVisible();
102  virtual CSpace* Space() const { return space; }
103  virtual EdgePlannerPtr Copy() const;
104  virtual EdgePlannerPtr ReverseCopy() const;
105  virtual bool IsIncremental() const { return true; }
106  virtual Real Priority() const;
107  virtual bool Plan();
108  virtual bool Done() const;
109  virtual bool Failed() const;
110 
111  //TODO: queue them
112  CSpace* space;
113  std::vector<EdgePlannerPtr > path;
114  size_t progress;
115  bool foundInfeasible;
116 };
117 
122 {
123 public:
124  MultiEdgePlanner(CSpace* space,const InterpolatorPtr& path,const std::vector<EdgePlannerPtr >& components);
125 };
126 
135 {
136 public:
137  IncrementalizedEdgePlanner(const EdgePlannerPtr& e);
138  virtual bool IsIncremental() const { return true; }
139  virtual Real Priority() const;
140  virtual bool Plan();
141  virtual bool Done() const;
142  virtual bool Failed() const;
143  virtual EdgePlannerPtr Copy() const;
144  virtual EdgePlannerPtr ReverseCopy() const;
145 
146  bool checked,visible;
147 };
148 
157 {
158 public:
159  EdgePlannerWithCSpaceContainer(const std::shared_ptr<CSpace>& space,const EdgePlannerPtr& e);
160  virtual ~EdgePlannerWithCSpaceContainer() { }
161  virtual EdgePlannerPtr Copy() const;
162  virtual EdgePlannerPtr ReverseCopy() const;
163 
164  std::shared_ptr<CSpace> spacePtr;
165 };
166 
167 
168 #endif
Edge planner that only checks the endpoint.
Definition: EdgePlannerHelpers.h:41
An incremental edge planner that calls a non-incremental edge planner. This adapts one-shot edge plan...
Definition: EdgePlannerHelpers.h:134
Convenience class for edge planner that holds a smart pointer to a CSpace so that the temporary CSpac...
Definition: EdgePlannerHelpers.h:156
Vector Config
an alias for Vector
Definition: RobotKinematics3D.h:14
Motion planning configuration space base class. The configuration space implements an interpolation s...
Definition: CSpace.h:39
Edge planner that always is visible.
Definition: EdgePlannerHelpers.h:7
Abstract base class for an edge planner / edge checker (i.e., local planner).
Definition: EdgePlanner.h:49
An EdgePlanner that just checks a given interpolator or straight line path between two configurations...
Definition: EdgePlanner.h:73
Definition: EdgePlannerHelpers.h:61
Edge planner that is never visible.
Definition: EdgePlannerHelpers.h:24
An edge planners that plans a stacked list of edges.
Definition: EdgePlannerHelpers.h:121
An edge checker that checks a sequence of edges.
Definition: EdgePlannerHelpers.h:93