Klamp't  0.8.1
TimeScaling.h
1 #ifndef TIME_SCALING_H
2 #define TIME_SCALING_H
3 
4 #include <KrisLibrary/planning/GeneralizedBezierCurve.h>
5 #include <KrisLibrary/spline/TimeSegmentation.h>
6 #include <KrisLibrary/spline/PiecewisePolynomial.h>
7 #include <KrisLibrary/math/vector.h>
8 #include <vector>
9 #include <utility>
10 using namespace Math;
11 using namespace std;
12 
30 {
31 public:
33  int TimeToSegment(Real t) const;
34  Real TimeToParam(Real t) const;
35  Real TimeToParam(int segment,Real t) const;
36  Real TimeToParamDeriv(int segment,Real t) const;
37  Real TimeToParamAccel(int segment,Real t) const;
38  int ParamToSegment(Real s) const;
39  Real ParamToTime(Real s) const;
40  Real ParamToTime(int segment,Real s) const;
41 
62  bool SolveMinTime(const Vector& vmin,const Vector& vmax,
63  const Vector& amin,const Vector& amax,
64  const vector<Real>& paramdivs,
65  const vector<Vector>& dxMins,const vector<Vector>& dxMaxs,
66  const vector<Vector>& ddxMins,const vector<Vector>& ddxMaxs,
67  Real ds0=-1,Real dsEnd=-1,
68  vector<pair<int,int> >* velocityLimitedVariables=NULL,
69  vector<pair<int,int> >* accelerationLimitedSegments=NULL);
70 
73  bool SolveMinTime(const Vector& vmin,const Vector& vmax,
74  const Vector& amin,const Vector& amax,
75  const GeneralizedCubicBezierSpline& path,
76  Real ds0=-1,Real dsEnd=-1);
77 
79  bool SolveMinTime(const Vector& vmin,const Vector& vmax,
80  const Vector& amin,const Vector& amax,
81  const vector<Real>& paramdivs,
82  const vector<Vector>& dxs,
83  Real ds0=-1,Real dsEnd=-1);
84 
87  void ConditionMinTime(vector<Real>& paramdivs,vector<Vector>& dxs,
88  vector<Vector>& dxMins,vector<Vector>& dxMaxs,
89  vector<Vector>& ddxMins,vector<Vector>& ddxMaxs);
90 
93  bool SolveMinTimeArcLength(const Vector& vmin,const Vector& vmax,
94  const Vector& amin,const Vector& amax,
95  const vector<Real>& paramdivs,
96  const vector<Vector>& dxMins,const vector<Vector>& dxMaxs,
97  const vector<Vector>& ddxMins,const vector<Vector>& ddxMaxs,
98  Real ds0=-1,Real dsEnd=-1);
99 
101  bool SolveMinTimeArcLength(const Vector& vmin,const Vector& vmax,
102  const Vector& amin,const Vector& amax,
103  const vector<Real>& paramdivs,
104  const vector<Vector>& dxs,
105  Real ds0=-1,Real dsEnd=-1);
106 
108  void GetTimeToParam(Spline::PiecewisePolynomial& poly) const;
109 
110  Spline::TimeSegmentation params,times;
111  vector<Real> ds;
112 };
113 
114 
115 
129 {
130 public:
131  bool OptimizeTimeScaling(const Vector& vmin,const Vector& vmax,const Vector& amin,const Vector& amax);
132  void GetPiecewiseLinear(std::vector<Real>& times,std::vector<Config>& milestones) const;
133  void GetDiscretizedPath(Real dt,std::vector<Config>& milestones) const;
134  Real EndTime() const;
135  void Eval(Real t,Vector& x) const;
136  void Deriv(Real t,Vector& dx) const;
137  void Accel(Real t,Vector& ddx) const;
138 
140  void Plot(const char* fn,const Vector& vmin,const Vector& vmax,const Vector& amin,const Vector& amax,Real res=1e-3);
141 
142  GeneralizedCubicBezierSpline path;
143  Spline::TimeSegmentation pathSegments; //optionally set to the partial sums of path.durations
144  TimeScaling timeScaling;
145 };
146 
154 bool OptimizeTimeScaling(const GeneralizedCubicBezierSpline& path,
155  const Vector& vmin,const Vector& vmax,
156  const Vector& amin,const Vector& amax,
157  TimeScaling& scaling);
158 
159 #endif
Maps time into a given path parameter range (e.g., [0,1]) with joint space velocity and acceleration ...
Definition: TimeScaling.h:29
bool OptimizeTimeScaling(const GeneralizedCubicBezierSpline &path, const Vector &vmin, const Vector &vmax, const Vector &amin, const Vector &amax, TimeScaling &scaling)
Optimizes the given path according to velocity and acceleration bounds. The resulting time scaling is...
A convenience class that stores a Bezier curve and its time scaling. Useful for evaluating the scaled...
Definition: TimeScaling.h:128