Go to the documentation of this file.00001
00008 #ifndef MIN_JERK_TRAJECTORY_H
00009 #define MIN_JERK_TRAJECTORY_H
00010
00011 #include <robodyn_controllers/Trajectory.h>
00012 #include <robodyn_controllers/MotionLimiter.h>
00013 #include <tf/LinearMath/Quaternion.h>
00014
00015 class MinJerkUtility
00016 {
00017 public:
00018 class TimeUtility
00019 {
00020 public:
00021 friend class MinJerkUtility;
00022 void setTime(double t_in);
00023
00024 private:
00025 double t, t2, t3, t4, t5;
00026 };
00027
00028 void setConstraints(double pinit, double pfinal, double vinit = 0., double vfinal = 0., double ainit = 0., double afinal = 0.);
00029
00030 double duration(double vmax) const;
00031
00033 double p(const TimeUtility& t) const;
00034 double v(const TimeUtility& t) const;
00035 double a(const TimeUtility& t) const;
00036
00037 private:
00038 double dist;
00039 double a0, a1, a2, a3, a4, a5;
00040 };
00041
00042 class MinJerkJointTrajectory : public JointTrajectory, protected JointVelocityLimiter
00043 {
00044 public:
00045 MinJerkJointTrajectory(const JointVelocityLimiter& jvl, const KDL::JntArrayAcc& startPose,
00046 const KDL::JntArrayAcc& goalPose, double duration_in);
00047 virtual ~MinJerkJointTrajectory();
00048
00049 virtual void getPose(double time, KDL::JntArrayAcc& pose);
00050
00051 private:
00052 std::vector<MinJerkUtility> utils;
00053 };
00054
00055 class MinJerkCartesianTrajectory : public CartesianTrajectory, protected CartesianVelocityLimiter
00056 {
00057 public:
00058 MinJerkCartesianTrajectory(const CartesianVelocityLimiter& cvl, const KDL::FrameAcc& startPose,
00059 const KDL::FrameAcc& goalPose, double duration_in);
00060 virtual ~MinJerkCartesianTrajectory();
00061
00062 virtual void getPose(double time, KDL::FrameAcc& pose);
00063
00064 private:
00065 std::vector<MinJerkUtility> utils;
00066 KDL::Vector moveVec;
00067 KDL::Vector startVec;
00068 tf::Quaternion startQ;
00069 tf::Quaternion goalQ;
00070 };
00071
00072 #endif