KrisLibrary  1.0.0
KinodynamicPath.h
1 #ifndef KINODYNAMIC_PATH_H
2 #define KINODYNAMIC_PATH_H
3 
4 #include "EdgePlanner.h"
5 class KinodynamicSpace;
6 class ControlSpace;
7 class SteeringFunction;
8 typedef Vector State;
9 typedef Vector ControlInput;
10 
11 
24 {
25  public:
27  KinodynamicMilestonePath(const ControlInput& u,const InterpolatorPtr& path);
28  virtual const Config& Start() const { return milestones.front(); }
29  virtual const Config& End() const { return milestones.back(); }
30  virtual void Eval(Real u,Config& q) const { Eval2(u,q); }
31  virtual Real Length() const;
32 
33  bool Empty() const;
34  bool IsConstant() const;
35  CSpace* Space() const;
36  inline int NumMilestones() const { return milestones.size(); }
37  inline const Config& GetMilestone(int i) const { return milestones[i]; }
38 
39  void Clear();
43  void MakePaths(ControlSpace* space);
44  void MakePaths(KinodynamicSpace* space);
47  void MakeEdges(KinodynamicSpace* space);
48  void Append(const ControlInput& u,KinodynamicSpace* space);
49  void Append(const ControlInput& u,const InterpolatorPtr& path,KinodynamicSpace* space);
50  void Append(const ControlInput& u,const InterpolatorPtr& path,const EdgePlannerPtr& e);
51  void Concat(const KinodynamicMilestonePath& suffix);
52  bool IsValid() const;
53  bool IsFeasible();
54 
55  //evaluates the state, given path parameter [0,1]. Returns the edge index
56  int Eval2(Real u,Config& q) const;
57 
59  Real StartTime(int timeindex=0) const { return Start()[timeindex]; }
61  Real EndTime(int timeindex=0) const { return End()[timeindex]; }
63  Real Duration(int timeIndex=0) const { return milestones.back()[timeIndex] - milestones.front()[timeIndex]; }
64  //evaluates the state at time t. Returns the edge index
65  int EvalTime(Real t,Config& q,int timeIndex=0) const;
66  //splits the path at time t. Note: Assumes u(timeIndex) is equal to dt!
67  void SplitTime(Real t,KinodynamicMilestonePath& before,KinodynamicMilestonePath& after,int timeIndex=0) const;
68  //ensures that the time is monotonically increasing
69  bool IsValidTime(int timeIndex=0) const;
70 
77  int Reduce(KinodynamicSpace* space,SteeringFunction* fn,int numIters);
83  void Splice(Real u1,Real u2,const KinodynamicMilestonePath& path,KinodynamicSpace* space=NULL);
87  void Splice2(int start,int goal,const KinodynamicMilestonePath& path);
88 
89  std::vector<State> milestones;
90  std::vector<ControlInput> controls;
91  std::vector<InterpolatorPtr> paths;
92  std::vector<EdgePlannerPtr> edges;
93 };
94 
95 #endif
Vector Config
an alias for Vector
Definition: RobotKinematics3D.h:14
void Splice(Real u1, Real u2, const KinodynamicMilestonePath &path, KinodynamicSpace *space=NULL)
Definition: KinodynamicPath.cpp:262
Motion planning configuration space base class. The configuration space implements an interpolation s...
Definition: CSpace.h:34
void Splice2(int start, int goal, const KinodynamicMilestonePath &path)
Definition: KinodynamicPath.cpp:291
void MakePaths(ControlSpace *space)
Given existing milestones and controls, creates the paths.
Definition: KinodynamicPath.cpp:43
Stores a kinodynamic path with piecewise constant controls.
Definition: KinodynamicPath.h:23
int Reduce(KinodynamicSpace *space, SteeringFunction *fn, int numIters)
Definition: KinodynamicPath.cpp:219
void MakeEdges(KinodynamicSpace *space)
Definition: KinodynamicPath.cpp:58
A class used for kinodynamic planning. Combines a CSpace defining the state space, as well as a ControlSpace.
Definition: KinodynamicSpace.h:22
Encodes the dynamics of a system, including the dynamics function f(x,u), control bounds...
Definition: ControlSpace.h:27
A base class for all 1D interpolators.
Definition: Interpolator.h:10
Real Duration(int timeIndex=0) const
For timed path, returns the duration of the known path.
Definition: KinodynamicPath.h:63
Real StartTime(int timeindex=0) const
For timed path, returns the start time.
Definition: KinodynamicPath.h:59
void SimulateFromControls(KinodynamicSpace *space)
Given milestones and controls, creates the paths and path checkers.
Definition: KinodynamicPath.cpp:34
int Shortcut(KinodynamicSpace *space, SteeringFunction *fn)
Definition: KinodynamicPath.cpp:198
A function in a ControlSpace that attempts to connect two states with a sequence of one or more contr...
Definition: ControlSpace.h:98
Real EndTime(int timeindex=0) const
For timed path, returns the end time.
Definition: KinodynamicPath.h:61