Klamp't  0.9.0
RampCSpace.h
1 #ifndef RAMP_CSPACE_H
2 #define RAMP_CSPACE_H
3 
5 #include <Klampt/Modeling/DynamicPath.h>
6 #include <KrisLibrary/planning/CSpace.h>
7 #include <KrisLibrary/planning/EdgePlanner.h>
8 #include <KrisLibrary/planning/KinodynamicSpace.h>
9 
10 namespace Klampt {
11 
18 class RampCSpaceAdaptor : public CSpace
19 {
20 public:
21  RampCSpaceAdaptor(CSpace* cspace,const Vector& velMax,const Vector& accMax);
22  virtual int NumDimensions() override;
23  virtual bool IsFeasible(const State& s) override;
24  virtual void Sample(State& s) override;
25  virtual EdgePlannerPtr LocalPlanner(const State& a,const State& b) override;
26  virtual Real Distance(const State& x, const State& y) override;
27  virtual void Interpolate(const State& x,const State& y,Real u,State& out) override;
28  virtual void Properties(PropertyMap& props) override;
29  bool IsFeasible(const Config& q,const Config& dq);
30 
31  CSpace* cspace;
32  std::vector<Real> qMin,qMax;
33  std::vector<Real> velMax,accMax;
34  Real visibilityTolerance;
35 };
36 
37 class RampInterpolator: public Interpolator
38 {
39 public:
41  virtual const Config& Start() const override;
42  virtual const Config& End() const override;
43  virtual void Eval(Real u,Config& x) const override;
44  virtual Real Length() const override;
45 
47 };
48 
49 class RampPathInterpolator: public Interpolator
50 {
51 public:
53  virtual const Config& Start() const override;
54  virtual const Config& End() const override;
55  virtual void Eval(Real u,Config& x) const override;
56  virtual Real Length() const override;
57 
59 };
60 
62 class RampEdgeChecker : public EdgePlanner
63 {
64 public:
65  RampEdgeChecker(RampCSpaceAdaptor* _space,const State& a,const State& b);
68  virtual ~RampEdgeChecker() {}
69  virtual bool IsVisible() override;
70  virtual void Eval(Real u,Config& x) const override;
71  virtual Real Length() const override;
72  virtual const Config& Start() const override { return start; }
73  virtual const Config& End() const override { return goal; }
74  virtual CSpace* Space() const override { return space; }
75  virtual EdgePlannerPtr Copy() const override;
76  virtual EdgePlannerPtr ReverseCopy() const override;
77  Real Duration() const;
78  bool IsValid() const;
79 
80  RampCSpaceAdaptor* space;
82  State start,goal;
83  int checked;
84 };
85 
88 {
89 public:
90  CSpaceFeasibilityChecker(CSpace* _space) : space(_space) {}
91  virtual bool ConfigFeasible(const ParabolicRamp::Vector& x) { return space->IsFeasible(Vector(x)); }
92  virtual bool SegmentFeasible(const ParabolicRamp::Vector& a,const ParabolicRamp::Vector& b) override {
93  EdgePlannerPtr e=IsVisible(space,Vector(a),Vector(b));
94  if(e) return true;
95  else return false;
96  }
97  CSpace* space;
98 };
99 
100 } //namespace Klampt
101 
102 #endif //RAMP_CSPACE_H
Solves for optimal trajectores for a velocity-bounded ND system.
Definition: ParabolicRamp.h:110
adapter for the ParabolicRamp feasibility checking routines
Definition: RampCSpace.h:87
A bounded-velocity, bounded-acceleration trajectory consisting of parabolic ramps.
Definition: DynamicPath.h:114
A CSpace where configurations are given by (q,dq) config, velocity pairs. Local paths are time-optima...
Definition: RampCSpace.h:18
A base class for a feasibility checker.
Definition: DynamicPath.h:41
Definition: RampCSpace.h:37
Functions for optimal acceleration-bounded trajectories.
Definition: RampCSpace.h:49
Definition: ContactDistance.h:6
Edge planner class for the RampCSpaceAdaptor.
Definition: RampCSpace.h:62