Blender  V2.59
Distance.hpp
Go to the documentation of this file.
00001 /* $Id: Distance.hpp 19905 2009-04-23 13:29:54Z ben2610 $
00002  * Distance.hpp
00003  *
00004  *  Created on: Jan 30, 2009
00005  *      Author: rsmits
00006  */
00007 
00008 #ifndef DISTANCE_HPP_
00009 #define DISTANCE_HPP_
00010 
00011 #include "ConstraintSet.hpp"
00012 #include "kdl/chain.hpp"
00013 #include "kdl/chainfksolverpos_recursive.hpp"
00014 #include "kdl/chainjnttojacsolver.hpp"
00015 
00016 namespace iTaSC
00017 {
00018 
00019 class Distance: public iTaSC::ConstraintSet
00020 {
00021 protected:
00022     virtual void updateKinematics(const Timestamp& timestamp);
00023     virtual void pushCache(const Timestamp& timestamp);
00024     virtual void updateJacobian();
00025     virtual bool initialise(Frame& init_pose);
00026         virtual void initCache(Cache *_cache);
00027     virtual void updateControlOutput(const Timestamp& timestamp);
00028         virtual bool closeLoop();
00029 
00030 public:
00031         enum ID {
00032                 ID_DISTANCE=1,
00033         };
00034     Distance(double armlength=1.0, double accuracy=1e-6, unsigned int maximum_iterations=100);
00035     virtual ~Distance();
00036 
00037         virtual bool setControlParameters(struct ConstraintValues* _values, unsigned int _nvalues, double timestep);
00038         virtual const ConstraintValues* getControlParameters(unsigned int* _nvalues);
00039 
00040 private:
00041         bool computeChi(Frame& pose);
00042     KDL::Chain m_chain;
00043     KDL::ChainFkSolverPos_recursive* m_fksolver;
00044     KDL::ChainJntToJacSolver* m_jacsolver;
00045     KDL::JntArray m_chiKdl;
00046     KDL::Jacobian m_jac;
00047         struct ConstraintSingleValue m_data;
00048         struct ConstraintValues m_values;
00049         Cache* m_cache;
00050         int m_distCCh;
00051         CacheTS m_distCTs;
00052         double m_maxerror;
00053 
00054         void pushDist(CacheTS timestamp);
00055         bool popDist(CacheTS timestamp);
00056 
00057     double m_alpha,m_yddot,m_yd,m_nextyd,m_nextyddot,m_K,m_tolerance;
00058 };
00059 
00060 }
00061 
00062 #endif /* DISTANCE_HPP_ */