KrisLibrary  1.0.0
ControlSpace.h
1 #ifndef PLANNING_CONTROL_SPACE_H
2 #define PLANNING_CONTROL_SPACE_H
3 
4 #include "CSpace.h"
5 #include "Interpolator.h"
6 #include "CSpaceHelpers.h"
7 namespace Math {
9 } //namespace Math
10 typedef Vector State;
11 typedef Vector ControlInput;
13 
14 //forward declarations
15 class ControlSpace;
17 class SteeringFunction;
21 
22 
28 {
29 public:
30  ControlSpace() {}
31  virtual ~ControlSpace() {}
32 
34  virtual std::string VariableName(int i);
35 
38  virtual std::shared_ptr<CSet> GetControlSet(const State& x) { return myControlSet; }
39 
41  virtual std::shared_ptr<SteeringFunction> GetSteeringFunction() { return mySteeringFunction; }
42 
45  virtual InterpolatorPtr Simulate(const State& x0, const ControlInput& u)=0;
46 
49  virtual void Successor(const State& x0, const ControlInput& u,State& x1) {
50  InterpolatorPtr p = Simulate(x0,u);
51  x1 = p->End();
52  }
53 
56  virtual Math::VectorFieldFunction* SuccessorNumeric() { return NULL; }
57 
64  virtual void SampleControl(const State& x,ControlInput& u) { GetControlSet(x)->Sample(u); }
65 
70  virtual bool IsValidControl(const State& x,const ControlInput& u) { return GetControlSet(x)->Contains(u); }
71 
73  std::shared_ptr<CSet> myControlSet;
75  std::shared_ptr<SteeringFunction> mySteeringFunction;
76 };
77 
85 {
86 public:
89  virtual bool ReverseControl(const State& x0,const State& x1,ControlInput& u) { return false; }
90 
91  std::shared_ptr<ControlSpace> reverseControlSpace;
92 };
93 
99 {
100 public:
101  SteeringFunction() {}
102  virtual ~SteeringFunction() {}
103  virtual bool IsExact() const { return true; };
104  virtual bool IsOptimal() const { return true; };
105  virtual bool Connect(const State& x,const State& y,KinodynamicMilestonePath& path)=0;
106 };
107 
108 
113  /*
114 class MultiControlSpace : public ControlSpace
115 {
116 public:
117  MultiControlSpace();
118  MultiControlSpace(const std::vector<int>& istateStarts,const std::vector<std::shared_ptr<ControlSpace> >& spaces);
119  MultiControlSpace(const MultiCSpace* space,const std::vector<std::shared_ptr<ControlSpace> >& spaces);
120  void Add(int istatemin,int istatemax,const std::shared_ptr<ControlSpace>& item);
121  void Add(CSpace* space,const std::shared_ptr<ControlSpace>& item);
122  virtual InterpolatorPtr Simulate(const State& x0, const ControlInput& u);
123  virtual void Successor(const State& x0, const ControlInput& u,State& x1);
124  virtual Math::VectorFieldFunction* SuccessorNumeric();
125 
126  std::vector<pair<int,int> istateRanges;
127  std::vector<std::shared_ptr<ControlSpace> > components;
128 };
129 */
130 
134 {
135 public:
136  enum TimeSelection { Uniform, Maximum, Biased };
137 
138  IntegratedControlSet(const std::shared_ptr<CSet>& base,Real dtmax);
139  virtual int NumDimensions() const;
140  virtual bool Project(Config& x);
141  virtual bool IsSampleable() const;
142  virtual void Sample(ControlInput& u);
143  virtual bool Contains(const ControlInput& u);
144 
145  TimeSelection timeSelection;
146  std::shared_ptr<CSet> base;
147  Real dtmax;
148 };
149 
167 {
168  public:
169  typedef void (*DynamicsFn)(const State& x, const ControlInput& u,State& dx);
170 
171  enum Integrator { Euler, RK4 };
172 
173  IntegratedControlSpace(const std::shared_ptr<CSet>& fControlSet,Real dt=0.01,Real dtmax=0.1);
174  IntegratedControlSpace(DynamicsFn f,const std::shared_ptr<CSet>& fControlSet,Real dt=0.01,Real dtmax=0.1);
175  void SetGeodesicSpace(GeodesicSpace* space);
176  void SetBaseControlSet(std::shared_ptr<CSet> baseControlSet);
177  std::shared_ptr<CSet> GetBaseControlSet();
178  virtual std::string VariableName(int i);
179  virtual InterpolatorPtr Simulate(const State& x0, const ControlInput& u);
180  virtual std::shared_ptr<CSet> GetControlSet(const Config& x);
181 
182  //subclasses may override the following:
183 
185  virtual void Derivative(const State& x, const ControlInput& u,State& dx);
186 
188  virtual void UpdateIntegrationParameters(const State& x) {}
189 
190  DynamicsFn myDynamics;
191  Integrator type;
192  GeodesicSpace* space;
193  std::shared_ptr<CSet> controlSet;
194  Real dt;
195  Real dtmax;
196 };
197 
198 
199 
208 {
209  public:
210  KinematicControlSpace(const std::shared_ptr<CSpace>& base,Real maxNeighborhoodRadius=0.1);
211  virtual ~KinematicControlSpace() {}
212 
213  virtual std::string VariableName(int i);
214  virtual std::shared_ptr<CSet> GetControlSet(const Config& x);
215 
216  virtual InterpolatorPtr Simulate(const State& x0, const ControlInput& u);
217  virtual void Successor(const State& x0, const ControlInput& u,State& x1);
218  virtual Math::VectorFieldFunction* SuccessorNumeric();
219 
220  virtual bool ReverseControl(const State& x0,const State& x1,ControlInput& u);
221 
222  std::shared_ptr<CSpace> base;
223  Real maxNeighborhoodRadius;
224 };
225 
226 
227 
228 #endif
A space with geodesics and (optionally) geodesic derivatives.
Definition: GeodesicSpace.h:31
Real Sample(const Interval &s)
Uniformly samples the given intervals.
Definition: sample.cpp:116
virtual void UpdateIntegrationParameters(const State &x)
Update controlSpace, dt, or dtmax if state-dependent.
Definition: ControlSpace.h:188
virtual bool ReverseControl(const State &x0, const State &x1, ControlInput &u)
Definition: ControlSpace.h:89
Definition: ControlSpace.h:84
Vector Config
an alias for Vector
Definition: RobotKinematics3D.h:14
A function from R^n to R^m.
Definition: function.h:134
std::shared_ptr< SteeringFunction > mySteeringFunction
Dynamically overridable default steering function.
Definition: ControlSpace.h:75
Stores a kinodynamic path with piecewise constant controls.
Definition: KinodynamicPath.h:23
A cartesian-product control space in which groups of states are controlled by individual control spac...
Definition: ControlSpace.h:133
virtual void SampleControl(const State &x, ControlInput &u)
Definition: ControlSpace.h:64
Real dt
integration time step
Definition: ControlSpace.h:194
virtual void Successor(const State &x0, const ControlInput &u, State &x1)
Definition: ControlSpace.h:49
Encodes the dynamics of a system, including the dynamics function f(x,u), control bounds...
Definition: ControlSpace.h:27
virtual std::shared_ptr< SteeringFunction > GetSteeringFunction()
Returns this space&#39;s steering function, if available.
Definition: ControlSpace.h:41
Adapts a kinematic cspace (given to the constructor) to a control space.
Definition: ControlSpace.h:207
std::shared_ptr< CSet > myControlSet
Dynamically overridable default control set (Note: state independent)
Definition: ControlSpace.h:73
void Euler(DiffEqFunction *f, Real a, Real b, const Vector &alpha, int n, Vector &wn)
Solve an ODE system using Euler&#39;s method.
Definition: diffeq.cpp:247
Contains all definitions in the Math package.
Definition: WorkspaceBound.h:12
A subset of a CSpace, which establishes a constraint for a configuration to be feasible.
Definition: CSet.h:20
virtual std::shared_ptr< CSet > GetControlSet(const State &x)
Definition: ControlSpace.h:38
A function in a ControlSpace that attempts to connect two states with a sequence of one or more contr...
Definition: ControlSpace.h:98
virtual bool IsValidControl(const State &x, const ControlInput &u)
Definition: ControlSpace.h:70
virtual Math::VectorFieldFunction * SuccessorNumeric()
Definition: ControlSpace.h:56
Real dtmax
maximum dt chosen in controls
Definition: ControlSpace.h:195
Base class for adapting a simulation function by integrating forward dynamics into a ControlSpace...
Definition: ControlSpace.h:166