KrisLibrary  1.0.0
OMPLInterface.h
1 #ifndef OMPL_INTERFACE_H
2 #define OMPL_INTERFACE_H
3 
4 #if HAVE_OMPL
5 
6 #include <KrisLibrary/planning/CSpace.h>
7 #include <KrisLibrary/planning/AnyMotionPlanner.h>
8 #include <ompl/base/spaces/RealVectorStateSpace.h>
9 #include <ompl/base/StateValidityChecker.h>
10 #include <ompl/base/MotionValidator.h>
11 #include <ompl/base/Planner.h>
12 namespace ob = ompl::base;
13 
14 class OMPLCSpace;
15 class CSpaceOMPLSpaceInformation;
16 class CSpaceOMPLStateSpace;
17 class CSpaceOMPLStateSampler;
18 class CSpaceOMPLValidityChecker;
19 class KrisLibraryOMPLPlanner;
20 
24 class OMPLCSpace : public CSpace
25 {
26 public:
27  OMPLCSpace(const ob::SpaceInformationPtr& si);
28  virtual ~OMPLCSpace();
29  void SetSpaceBounds(const Config& qmin, const Config& qmax);
31  void SetSpaceBounds(const double& qmin, const double& qmax);
33  ob::State * ToOMPL(const Config& q);
35  void ToOMPL(const Config& q,ob::State * s);
37  Config FromOMPL(const ob::State *);
39  void FromOMPL(const ob::State *,Config& q);
40  virtual void Sample(Config& x);
41  virtual void SampleNeighborhood(const Config& c,Real r,Config& x);
42  virtual bool IsFeasible(const Config& x);
43  virtual double Distance(const Config& a,const Config& b);
44  virtual void Interpolate(const Config& a,const Config& b,Real u,Config& x);
45  virtual void Midpoint(const Config& x,const Config& y,Config& out) { Interpolate(x,y,0.5,out); }
46  virtual EdgePlannerPtr PathChecker(const Config& x,const Config& y);
47  virtual void Properties(PropertyMap&) const;
48 
49  ob::SpaceInformationPtr si_;
50  ob::StateSamplerPtr sampler_;
51  ob::State *stemp1, *stemp2, *stemp3;
52  vector<Real> vtemp;
53  Config qMin, qMax;
54  int nD;
55  double resolution;
56 };
57 
58 /* @brief Creates an OMPL planner from a KrisLibrary planner.
59  *
60  * Constructor assumes the factory type is completely specified when setting
61  * the OMPL planner name.
62  */
63 class KrisLibraryOMPLPlanner : public ob::Planner
64 {
65  public:
66  KrisLibraryOMPLPlanner(const ob::SpaceInformationPtr &si,const MotionPlannerFactory& factory);
67  virtual void clear();
68  virtual void setup();
69  virtual ob::PlannerStatus solve (const ob::PlannerTerminationCondition &ptc);
70  virtual void getPlannerData (ob::PlannerData &data) const;
71 
72  MotionPlannerFactory factory;
73  std::shared_ptr<OMPLCSpace> cspace;
74  std::shared_ptr<MotionPlannerInterface> planner;
75 };
76 
82 class CSpaceOMPLSpaceInformation : public ob::SpaceInformation
83 {
84  public:
85  CSpaceOMPLSpaceInformation(CSpace* space);
86  ob::State * ToOMPL(const Config& q) const;
87  Config FromOMPL(const ob::State *) const;
88 
89  CSpace* cspace;
90 };
91 
92 
98 class CSpaceOMPLStateSpace : public ob::RealVectorStateSpace
99 {
100  public:
101  CSpaceOMPLStateSpace(CSpace* space,CSpaceOMPLSpaceInformation* si);
102  virtual unsigned int getDimension (void) const;
103  virtual double getMaximumExtent (void) const;
104  virtual void enforceBounds (ob::State *state) const;
105  virtual bool satisfiesBounds (const ob::State *state) const;
106  virtual double distance (const ob::State *state1, const ob::State *state2) const;
107  virtual void interpolate (const ob::State *from, const ob::State *to, const double t, ob::State *state) const;
108  virtual ob::StateSamplerPtr allocDefaultStateSampler (void) const;
109 
110  CSpace* space;
111  CSpaceOMPLSpaceInformation* si;
112  std::vector<double> minimum,maximum;
113 };
114 
118 class CSpaceOMPLStateSampler : public ob::StateSampler
119 {
120  public:
121  CSpaceOMPLStateSampler(const CSpaceOMPLStateSpace* space);
122  virtual void sampleUniform (ob::State *state);
123  virtual void sampleUniformNear (ob::State *state, const ob::State *near, const double distance);
124  virtual void sampleGaussian (ob::State *state, const ob::State *mean, const double stdDev);
125 
126  CSpace* space;
127 };
128 
134 class CSpaceOMPLValidityChecker : public ob::StateValidityChecker
135 {
136  public:
137  CSpaceOMPLValidityChecker(CSpaceOMPLSpaceInformation* space);
138  virtual bool isValid(const ob::State* state) const;
139 
140  CSpace* space;
141 };
142 
148 class CSpaceOMPLMotionValidator : public ob::MotionValidator
149 {
150  public:
151  CSpaceOMPLMotionValidator(CSpaceOMPLSpaceInformation* space);
152  virtual bool checkMotion (const ob::State *s1, const ob::State *s2) const;
153  virtual bool checkMotion (const ob::State *s1, const ob::State *s2, std::pair< ob::State *, double > &lastValid) const;
154 
155  CSpace* space;
156 };
157 
158 
159 #endif //HAVE_OMPL
160 
161 #endif
virtual void Properties(PropertyMap &)
Returns properties of the space that might be useful for planners.
Definition: CSpace.cpp:127
Real Sample(const Interval &s)
Uniformly samples the given intervals.
Definition: sample.cpp:116
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
A motion planner creator.
Definition: AnyMotionPlanner.h:257
virtual Real Distance(const Config &x, const Config &y)
optionally overrideable (default uses euclidean space)
Definition: CSpace.h:61
A simple map from keys to values.
Definition: PropertyMap.h:27