ocra-recipes
Doxygen documentation for the ocra-recipes repository
Trajectory.h
Go to the documentation of this file.
1 #ifndef TRAJECTORY_H
2 #define TRAJECTORY_H
3 
4 #include <iostream>
5 #include <stdexcept>
6 
7 #include <Eigen/Dense>
8 #include <Eigen/Lgsm>
9 
10 #include <string>
11 #include <fstream>
12 #include <list>
13 
14 #include <ocra/util/Macros.h>
15 #include <ocra/util/ErrorsHelper.h>
16 
17 
18 #define TRANSLATION_DIM 3
19 #define QUATERNION_DIM 4
20 #define POS_INDEX 0
21 #define VEL_INDEX 1
22 #define ACC_INDEX 2
23 
24 #define TRAJ_DIM 3
25 
26 #define TAU_MAX 1.0l
27 
28 namespace ocra
29 {
30 
31 class Trajectory {
33 
34  public:
35  // Constructor function
36  Trajectory();
37 
38  void setMaxVelocity(double newMaxVel);
39  void setMaxVelocity(const Eigen::VectorXd& newMaxVel);
40  double getMaxVelocity();
41  Eigen::VectorXd getMaxVelocityVector();
42 
43  void setMaxAcceleration(double newMaxAcc);
44  void setMaxAcceleration(const Eigen::VectorXd& newMaxAcc);
45  double getMaxAcceleration();
46  Eigen::VectorXd getMaxAccelerationVector();
47 
48 
49  void setWaypoints(const std::vector<double>& startingDoubleVec, const std::vector<double>& endingDoubleVec, const int waypointSelector=0, bool endsWithQuaternion=false);
50  void setWaypoints(const Eigen::VectorXd& startingVector, const Eigen::VectorXd& endingVector, bool endsWithQuaternion=false);
51  void setWaypoints(Eigen::Displacementd& startingDisplacement, Eigen::Displacementd& endingDisplacement, bool endsWithQuaternion=true);
52  void setWaypoints(Eigen::Rotation3d& startingOrientation, Eigen::Rotation3d& endingOrientation, bool endsWithQuaternion=true);
53 
54  void setWaypoints(const std::list<Eigen::VectorXd>& _waypoints, bool _endsWithQuaternion=false);
55 
56  // set waypoints
57  void setWaypoints(Eigen::MatrixXd& waypoints, bool endsWithQuaternion=false);
58 
59  //Destructor
60  virtual ~Trajectory();
61 
62  // Primary user interface functions
63  void setDuration();
64  void setDuration(const Eigen::VectorXd& _pointToPointDurationVector);
65  void setDuration(double time);
66 
68 
69  // virtual void getDesiredValues(){};
70  //virtual Eigen::VectorXd getDesiredValues(double time){return Eigen::VectorXd::Zero(nDim)};
71  virtual Eigen::MatrixXd getDesiredValues(double time){return Eigen::MatrixXd::Zero(nDoF, TRAJ_DIM);};
72 
73  // Note: only valid for "stochastic" trajectories, which for the moment means just GaussianProcess Trajectories.
74  virtual void getDesiredValues(double time, Eigen::MatrixXd& desiredValues, Eigen::VectorXd& variance)
75  {
76  desiredValues = Eigen::MatrixXd::Zero(nDoF, TRAJ_DIM);
77  variance = Eigen::VectorXd::Zero(nDoF);
78  };
79 
80 
81  Eigen::MatrixXd getFullTrajectory(double dt=0.01);
82 
83 
84  void getDesiredValues(double time, std::vector<double>& doubleVec);
85  void getDesiredValues(double time, Eigen::Displacementd& disp);
86  void getDesiredValues(double time, Eigen::Rotation3d& orient);
87  void getDesiredValues(double time, Eigen::Displacementd& pos, Eigen::Twistd& vel, Eigen::Twistd& acc);
88 
89  virtual double getDuration(){return pointToPointDuration;}
90 
91  Eigen::Rotation3d quaternionSlerp(double tau, Eigen::Rotation3d& qStart, Eigen::Rotation3d& qEnd);
92 
93  // Useful auxiliary functions
94  Eigen::VectorXd displacementToEigenVector(Eigen::Displacementd& disp);
95  Eigen::VectorXd quaternionToEigenVector(Eigen::Rotation3d& quat);
96 
97  bool eigenVectorToStdVector(const Eigen::VectorXd& dispVec, std::vector<double>& doubleVec);
98  bool eigenMatrixToStdVector(const Eigen::MatrixXd& dispMat, std::vector<double>& doubleVec);
99  bool eigenVectorToDisplacement(const Eigen::VectorXd& dispVec, Eigen::Displacementd& disp);
100  bool eigenVectorToQuaternion(const Eigen::VectorXd& quatVec, Eigen::Rotation3d& quat);
101  bool eigenVectorToTwist(const Eigen::VectorXd& twistVec, Eigen::Twistd& twist);
102 
103  // bool dumpToFile(const Eigen::MatrixXd& desiredVals);
104  virtual void recalculateTrajectory(){/*do nothing unless overloaded in derived classes.*/};
105 
106  protected:
107 
108  virtual void initializeTrajectory(){/*do nothing unless overloaded in derived classes.*/};
109 
110  double maximumVelocity;
111  Eigen::VectorXd maximumVelocityVector;
113  Eigen::VectorXd maximumAccelerationVector;
114 
115  //variables
116  std::list<Eigen::VectorXd> waypointList;
117  Eigen::MatrixXd waypoints;
118  int nDoF;
126  Eigen::VectorXd pointToPointDurationVector;
131  // double t0;
132 
133 };
134 
135 
136 
137 
138 
139 } // end of namespace ocra
140 #endif // TRAJECTORY_H
bool trajectoryFinished
Definition: Trajectory.h:130
int currentWaypointIndex
Definition: Trajectory.h:122
bool eigenVectorToStdVector(const Eigen::VectorXd &dispVec, std::vector< double > &doubleVec)
Definition: Trajectory.cpp:372
#define TRAJ_DIM
Definition: Trajectory.h:24
void setMaxAcceleration(double newMaxAcc)
Definition: Trajectory.cpp:177
bool usingDurationVector
Definition: Trajectory.h:129
Eigen::MatrixXd waypoints
Definition: Trajectory.h:117
Eigen::VectorXd getMaxAccelerationVector()
Definition: Trajectory.cpp:199
Eigen::VectorXd displacementToEigenVector(Eigen::Displacementd &disp)
Definition: Trajectory.cpp:334
double getMaxVelocity()
Definition: Trajectory.cpp:167
double maximumAcceleration
Definition: Trajectory.h:112
void setMaxVelocity(double newMaxVel)
Definition: Trajectory.cpp:150
#define DEFINE_CLASS_POINTER_TYPEDEFS(Class)
Definition: Macros.h:8
Eigen::VectorXd pointToPointDurationVector
Definition: Trajectory.h:126
Optimization-based Robot Controller namespace. a library of classes to write and solve optimization p...
bool eigenVectorToTwist(const Eigen::VectorXd &twistVec, Eigen::Twistd &twist)
Definition: Trajectory.cpp:451
std::list< Eigen::VectorXd > waypointList
Definition: Trajectory.h:116
Eigen::Rotation3d quaternionSlerp(double tau, Eigen::Rotation3d &qStart, Eigen::Rotation3d &qEnd)
Definition: Trajectory.cpp:241
double pointToPointDuration
Definition: Trajectory.h:127
virtual void initializeTrajectory()
Definition: Trajectory.h:108
void setWaypoints(const std::vector< double > &startingDoubleVec, const std::vector< double > &endingDoubleVec, const int waypointSelector=0, bool endsWithQuaternion=false)
Definition: Trajectory.cpp:30
double totalTrajectoryDuration
Definition: Trajectory.h:128
Eigen::VectorXd maximumAccelerationVector
Definition: Trajectory.h:113
virtual void getDesiredValues(double time, Eigen::MatrixXd &desiredValues, Eigen::VectorXd &variance)
Definition: Trajectory.h:74
virtual ~Trajectory()
Definition: Trajectory.cpp:25
bool eigenMatrixToStdVector(const Eigen::MatrixXd &dispMat, std::vector< double > &doubleVec)
Definition: Trajectory.cpp:384
double maximumVelocity
Definition: Trajectory.h:108
bool endsWithQuaternion
Definition: Trajectory.h:120
double getMaxAcceleration()
Definition: Trajectory.cpp:194
Eigen::MatrixXd getFullTrajectory(double dt=0.01)
Definition: Trajectory.cpp:484
bool isFinished()
Definition: Trajectory.h:67
virtual void recalculateTrajectory()
Definition: Trajectory.h:104
Eigen::VectorXd quaternionToEigenVector(Eigen::Rotation3d &quat)
Definition: Trajectory.cpp:355
bool eigenVectorToDisplacement(const Eigen::VectorXd &dispVec, Eigen::Displacementd &disp)
Definition: Trajectory.cpp:402
Eigen::VectorXd maximumVelocityVector
Definition: Trajectory.h:111
virtual Eigen::MatrixXd getDesiredValues(double time)
Definition: Trajectory.h:71
virtual double getDuration()
Definition: Trajectory.h:89
Eigen::VectorXd getMaxVelocityVector()
Definition: Trajectory.cpp:172
bool eigenVectorToQuaternion(const Eigen::VectorXd &quatVec, Eigen::Rotation3d &quat)
Definition: Trajectory.cpp:435