Go to the documentation of this file.00001
00008 #ifndef TRAP_VEL_TRAJECTORY_H
00009 #define TRAP_VEL_TRAJECTORY_H
00010
00011 #include <robodyn_controllers/Trajectory.h>
00012 #include <robodyn_controllers/MotionLimiter.h>
00013 #include <tf/LinearMath/Quaternion.h>
00014
00015 class TrapezoidalVelocityUtility
00016 {
00017 public:
00018 TrapezoidalVelocityUtility();
00019 ~TrapezoidalVelocityUtility();
00020
00021 void setConstraints(double posInit_in, double posFinal_in, double velInit_in = 0., double velFinal_in = 0., double accelInit_in = 0., double accelFinal_in = 0.);
00022
00026 double duration(double vmax_in, double amax_in, bool spline = true);
00027
00030 void setDuration(double duration_in);
00031
00033 void setDurationHelper(double duration_in);
00034
00040 void getTimes(double& t1_out, double& t2_out, double& t3_out) const;
00041
00043 bool timesValid();
00044
00046 void calculateTimeHelper();
00047
00052 bool calculateMaxVel();
00053
00056 double p(double t) const;
00057 double v(double t) const;
00058 double a(double t) const;
00059
00065 void setTimes(double t1_in, double t2_in, double t3_in);
00066
00067 private:
00068 double posInit, posFinal, velInit, velFinal, accelInit, accelFinal;
00069 double t1, t2, t3;
00070 double v1, a1, a2;
00071 double velMax, accelMax, timeMin;
00072 };
00073
00074 class TrapezoidalVelocityJointTrajectory : public JointTrajectory, protected JointMotionLimiter
00075 {
00076 public:
00077 TrapezoidalVelocityJointTrajectory(const JointMotionLimiter& jml, const KDL::JntArrayAcc& startPose,
00078 const KDL::JntArrayAcc& goalPose, double duration_in);
00079 virtual ~TrapezoidalVelocityJointTrajectory();
00080
00081 virtual void getPose(double time, KDL::JntArrayAcc& pose);
00082
00083 virtual void setDuration(double duration_in);
00084
00085 private:
00086 std::vector<TrapezoidalVelocityUtility> utils;
00087
00088 void setTimes(double t1_in, double t2_in, double t3_in);
00089 };
00090
00091 class TrapezoidalVelocityCartesianTrajectory : public CartesianTrajectory, protected CartesianMotionLimiter
00092 {
00093 public:
00094 TrapezoidalVelocityCartesianTrajectory(const CartesianMotionLimiter& cml, const KDL::FrameAcc& startPose,
00095 const KDL::FrameAcc& goalPose, double duration_in);
00096 virtual ~TrapezoidalVelocityCartesianTrajectory();
00097
00098 virtual void getPose(double time, KDL::FrameAcc& pose);
00099
00100 virtual void setDuration(double duration_in);
00101
00102 private:
00103 std::vector<TrapezoidalVelocityUtility> utils;
00104 tf::Quaternion startQ;
00105 tf::Quaternion goalQ;
00106
00107 void setTimes(double t1_in, double t2_in, double t3_in);
00108 };
00109
00110 #endif