SMURFTrajectoryTracker.hpp
Go to the documentation of this file.
00001 /*
00002  * SMURFTrajectoryTracker.hpp
00003  *
00004  *  Created on: Jun 8, 2012
00005  *      Author: rspica
00006  */
00007 
00008 #ifndef SMURFTRAJECTORYTRACKER_HPP_
00009 #define SMURFTRAJECTORYTRACKER_HPP_
00010 
00011 #include <telekyb_defines/telekyb_defines.hpp>
00012 
00013 
00014 // Interface Definition
00015 #include <tk_trajctrl/TrajectoryTracker.hpp>
00016 
00017 // Dynamic Mass Estimator
00018 // Class Loading
00019 #include <pluginlib/class_loader.h>
00020 
00021 // Dynamic parameter estimators
00022 #include <tk_param_estimator/MassEstimator.hpp>
00023 #include <tk_param_estimator/InertiaMatrixEstimator.hpp>
00024 
00025 // Ros
00026 #include <ros/ros.h>
00027 
00028 #include <telekyb_base/Options.hpp>
00029 #include <telekyb_base/Time.hpp>
00030 
00031 // Boost
00032 #include <boost/thread/mutex.hpp>
00033 
00034 
00035 TELEKYB_ENUM_VALUES(SaturationType, const char*,
00036         (none)("No command saturation applied")
00037         (uniform)("Uniform command saturation")
00038         (qp)("Quadratic programming command saturation")
00039 )
00040 
00041 
00042 namespace TELEKYB_NAMESPACE {
00043 
00044 class SMURFTrajectoryTrackerOptions : public OptionContainer {
00045 public:
00046         Option<std::string>* tCommandTopic;
00047 
00048         Option<SaturationTypeBaseEnum<const char*>::Type>* tSaturationType;
00049 
00050         Option<std::string>* tMassPluginLookupName;
00051         Option<std::string>* tInertiaPluginLookupName;
00052 
00053         Option<Eigen::Vector3d>* tPositionGain;
00054         Option<Eigen::Vector3d>* tVelocityGain;
00055         Option<Eigen::Vector3d>* tOrientationGain;
00056         Option<Eigen::Vector3d>* tAngVelGain;
00057         Option<Eigen::Vector3d>* tRotIntGain;
00058         Option<Eigen::Vector3d>* tSatRotInt;
00059         Option<Eigen::Vector3d>* tPosIntGain;
00060         Option<Eigen::Vector3d>* tSatPosInt;
00061 
00062         Option<double>* tMinThrust;
00063         Option<double>* tMinForce;
00064         Option<double>* tMaxForce;
00065 
00066         Option<double>* tArmLength;
00067         Option<double>* tCParam;
00068 
00069         SMURFTrajectoryTrackerOptions();
00070 };
00071 
00072 class SMURFTrajectoryTracker : public TrajectoryTracker {
00073 private:
00074         SMURFTrajectoryTrackerOptions options;
00075 
00077 
00078         inline
00079         Eigen::Matrix3d hat(const Eigen::Vector3d& w)
00080         {
00081                 Eigen::Matrix3d Sw;
00082                 Sw <<   0.0, -w(2),  w(1),
00083                            w(2),   0.0, -w(0),
00084                       -w(1),  w(0),   0.0;
00085                 return Sw;
00086         }
00087 
00089 
00090         inline
00091         Eigen::Vector3d vee(const Eigen::Matrix3d& S)
00092         {
00093                 return Eigen::Vector3d(S(2,1), S(0,2), S(1,0));
00094         }
00095         //double polyVal(Eigen::VectorXd coefficients, double x);
00096 
00097         Eigen::Matrix4d invA;
00098 
00099         void saturateUniform(Eigen::Vector4d& force, double mass);
00100         void saturateQP(Eigen::Vector4d& force, double mass){};
00101 
00102 protected:
00103 
00104         // Dynamic parameter Estimation Option
00105         Option<bool>* tDoMassEstimation;
00106         Option<bool>* tDoInertiaMatrixEstimation;
00107 
00108         // ClassLoader
00109         pluginlib::ClassLoader<MassEstimator> meLoader;
00110         pluginlib::ClassLoader<InertiaMatrixEstimator> imeLoader;
00111 
00112         // Loaded Dynamic parameter Estimator
00113         MassEstimator* massEstimator;
00114         InertiaMatrixEstimator* inertiaEstimator;
00115 
00116         double currentMass;
00117         Eigen::Matrix3d currentInertiaMatrix;
00118 
00119         boost::mutex refTrajectoryMutex;
00120         TKTrajectory refTrajectory;
00121 
00122         ros::NodeHandle nodeHandle;
00123         ros::NodeHandle commandNodeHandle;
00124         ros::Publisher tTcCommandsPub;
00125 
00126         Eigen::Vector3d rotIntState;
00127         Eigen::Vector3d posIntState;
00128         ros::Publisher tIntPub;
00129         Timer integralTimer;
00130         bool firstExecution;
00131 
00132 public:
00133         // gravity is provided by
00134         SMURFTrajectoryTracker();
00135         virtual ~SMURFTrajectoryTracker();
00136 
00137         // Standard Interface functions
00138         void initialize();
00139         void destroy();
00140         std::string getName() const;
00141 
00142         // Callback Functions
00143         void trajectoryCB(const TKTrajectory& trajectory);
00144         void stateCB(const TKState& state);
00145 
00146         void run(const TKTrajectory& input, const TKState& currentState, const double mass, const Eigen::Matrix3d& inertia , Eigen::Vector4d& inputs);
00147         //void setMass(double mass_);
00148 };
00149 
00150 }
00151 
00152 #endif /* SMURFTRAJECTORYTRACKER_HPP_ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends


tk_trajctrl
Author(s): Dr. Antonio Franchi and Martin Riedel
autogenerated on Mon Nov 11 2013 11:13:14