Blender V2.61 - r43446
|
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_ */