Blender V2.61 - r43446

eigen_types.hpp

Go to the documentation of this file.
00001 /*
00002  * eigen_types.hpp
00003  *
00004  *  Created on: March 6, 2009
00005  *      Author: benoit bolsee
00006  */
00007 
00008 #ifndef EIGEN_TYPES_HPP_
00009 #define EIGEN_TYPES_HPP_
00010 
00011 #include <Eigen/Core>
00012 #include "kdl/frames.hpp"
00013 #include "kdl/tree.hpp"
00014 #include "kdl/chain.hpp"
00015 #include "kdl/jacobian.hpp"
00016 #include "kdl/jntarray.hpp"
00017 
00018 
00019 namespace iTaSC{
00020 
00021 using KDL::Twist;
00022 using KDL::Frame;
00023 using KDL::Joint;
00024 using KDL::Inertia;
00025 using KDL::SegmentMap;
00026 using KDL::Tree;
00027 using KDL::JntArray;
00028 using KDL::Jacobian;
00029 using KDL::Segment;
00030 using KDL::Rotation;
00031 using KDL::Vector;
00032 using KDL::Vector2;
00033 using KDL::Chain;
00034 
00035 extern const Frame F_identity;
00036 
00037 #define e_scalar double
00038 #define e_vector Eigen::Matrix<e_scalar, Eigen::Dynamic, 1>
00039 #define e_zero_vector Eigen::Matrix<e_scalar, Eigen::Dynamic, 1>::Zero
00040 #define e_matrix Eigen::Matrix<e_scalar, Eigen::Dynamic, Eigen::Dynamic>
00041 #define e_matrix6 Eigen::Matrix<e_scalar,6,6>
00042 #define e_identity_matrix Eigen::Matrix<e_scalar, Eigen::Dynamic, Eigen::Dynamic>::Identity
00043 #define e_scalar_vector Eigen::Matrix<e_scalar, Eigen::Dynamic, 1>::Constant
00044 #define e_zero_matrix Eigen::Matrix<e_scalar, Eigen::Dynamic, Eigen::Dynamic>::Zero
00045 #define e_random_matrix Eigen::Matrix<e_scalar, Eigen::Dynamic, Eigen::Dynamic>::Random
00046 #define e_vector6 Eigen::Matrix<e_scalar,6,1>
00047 #define e_vector3 Eigen::Matrix<e_scalar,3,1>
00048 
00049 class Range {
00050 public:
00051     int start;
00052     int count;
00053     Range(int _start, int _count) { start = _start; count=_count; }
00054     Range(const Range& other) { start=other.start; count=other.count; }
00055 };
00056 
00057 template<typename MatrixType> inline Eigen::Block<MatrixType> project(MatrixType& m, Range r)
00058 {
00059     return Eigen::Block<MatrixType>(m,r.start,0,r.count,1);
00060 }
00061 
00062 template<typename MatrixType> inline Eigen::Block<MatrixType> project(MatrixType& m, Range r, Range c)
00063 {
00064     return Eigen::Block<MatrixType>(m,r.start,c.start,r.count,c.count);
00065 }
00066 
00067 template<typename Derived> inline static int changeBase(Eigen::MatrixBase<Derived>& J, const Frame& T) {
00068 
00069     if (J.rows() != 6)
00070         return -1;
00071     for (int j = 0; j < J.cols(); ++j) {
00072         typename Derived::ColXpr Jj = J.col(j);
00073         Twist arg;
00074         for(unsigned int i=0;i<6;++i)
00075             arg(i)=Jj[i];
00076         Twist tmp(T*arg);
00077         for(unsigned int i=0;i<6;++i)
00078             Jj[i]=e_scalar(tmp(i));
00079     }
00080     return 0;
00081 }
00082 
00083 }
00084 #endif /* UBLAS_TYPES_HPP_ */