Klamp't  0.9.0
MultiPath.h
1 #ifndef MULTI_PATH_H
2 #define MULTI_PATH_H
3 
4 #include "DynamicPath.h"
5 #include <Klampt/Contact/Hold.h>
6 #include <Klampt/Contact/Stance.h>
7 #include <KrisLibrary/planning/GeneralizedBezierCurve.h>
8 #include <KrisLibrary/utils/PropertyMap.h>
9 #include <KrisLibrary/math/vector.h>
10 
11 class TiXmlElement;
12 
13 namespace Klampt {
14  using namespace std;
15 
31 class MultiPath
32 {
33  public:
34  bool Load(const string& fn);
35  bool Save(const string& fn) const;
36  bool Load(TiXmlElement* in);
37  bool Save(TiXmlElement* out) const;
38  size_t NumSections() const { return sections.size(); }
40  bool IsValid() const;
43  bool IsContinuous(Real tol=0.0) const;
45  bool HasTiming(int section=0) const;
47  bool HasVelocity(int section=0) const;
49  bool HasConstraints(int section=0) const;
51  bool HasContacts(int section=0) const;
53  void GetMilestones(vector<Vector>& milestones,int section=0) const;
56  void GetTimedMilestones(vector<Real>& times,vector<Vector>& milestones,int section=0) const;
59  bool GetDynamicPath(ParabolicRamp::DynamicPath& path,int section=0) const;
62  void SetMilestones(const vector<Vector>& milestones,int section=0);
65  void SetTimedMilestones(const vector<Real>& times,const vector<Vector>& milestones,int section=0);
68  void SetDynamicPath(const ParabolicRamp::DynamicPath& path,int section=0);
70  Real StartTime() const;
72  Real EndTime() const;
74  Real Duration() const;
79  void SetDuration(Real duration,bool uniformSectionTimes=true);
83  void SetSmoothTiming(Real duration,bool uniformSectionTimes=true);
88  void Concat(const MultiPath& suffix,bool relative=true);
90  void GetIKProblem(vector<IKGoal>& goals,int section=0) const;
93  void SetIKProblem(const vector<IKGoal>& goals,int section=0);
95  void GetStance(Stance& stance,int section=0) const;
98  void SetStance(const Stance& stance,int section=0);
100  void SetHold(const string& str,const Hold& h);
102  bool GetHold(const string& str,Hold& h) const;
105  int TimeToSection(Real time) const;
106 
107  enum InterpPolicy { InterpLinear, InterpCubic };
110  int Evaluate(Real time,GeneralizedCubicBezierCurve& curve,Real& duration,Real& u,InterpPolicy policy=InterpCubic) const;
111  int Evaluate(Real time,Vector& q,InterpPolicy policy=InterpCubic) const;
112  int Evaluate(Real time,Vector& q,Vector& v,InterpPolicy policy=InterpCubic) const;
113 
114  struct PathSection
115  {
116  PropertyMap settings;
117 
118  //section-specific constraints
119  vector<IKGoal> ikGoals;
120  vector<Hold> holds;
121  vector<int> holdIndices; //indexes into the holdSet array
122  vector<string> holdNames; //indexes into the holdSet array
123 
124  vector<Real> times;
125  vector<Vector> milestones;
126  vector<Vector> velocities;
127  };
128 
129  //typically store things like name, robot, scenario, etc
130  PropertyMap settings;
131  vector<PathSection> sections;
132  vector<Hold> holdSet;
133  vector<string> holdSetNames;
134 };
135 
136 ostream& operator << (ostream& out,const MultiPath& path);
137 
138 } //namespace Klampt
139 
140 #endif
Definition: MultiPath.h:114
A very general multi-section path container.
Definition: MultiPath.h:31
A collection of holds.
Definition: Stance.h:20
A bounded-velocity, bounded-acceleration trajectory consisting of parabolic ramps.
Definition: DynamicPath.h:114
A single contact between the robot and the environment.
Definition: Hold.h:28
Structures defining the finalized contacts used in stances.
Definition: ContactDistance.h:6