00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <eigen_conversions/eigen_kdl.h>
00031
00032 namespace tf {
00033
00034 void quaternionKDLToEigen(const KDL::Rotation &k, Eigen::Quaterniond &e)
00035 {
00036
00037 k.GetQuaternion(e.x(), e.y(), e.z(), e.w());
00038
00039
00040
00041
00042
00043 }
00044
00045 void quaternionEigenToKDL(const Eigen::Quaterniond &e, KDL::Rotation &k)
00046 {
00047 k = KDL::Rotation::Quaternion(e.x(), e.y(), e.z(), e.w());
00048 }
00049
00050 namespace {
00051 template<typename T>
00052 void transformKDLToEigenImpl(const KDL::Frame &k, T &e)
00053 {
00054
00055 for (unsigned int i = 0; i < 3; ++i)
00056 e(i, 3) = k.p[i];
00057
00058
00059 for (unsigned int i = 0; i < 9; ++i)
00060 e(i/3, i%3) = k.M.data[i];
00061
00062
00063 e(3,0) = 0.0;
00064 e(3,1) = 0.0;
00065 e(3,2) = 0.0;
00066 e(3,3) = 1.0;
00067 }
00068
00069 template<typename T>
00070 void transformEigenToKDLImpl(const T &e, KDL::Frame &k)
00071 {
00072 for (unsigned int i = 0; i < 3; ++i)
00073 k.p[i] = e(i, 3);
00074 for (unsigned int i = 0; i < 9; ++i)
00075 k.M.data[i] = e(i/3, i%3);
00076 }
00077
00078 }
00079
00080 void transformKDLToEigen(const KDL::Frame &k, Eigen::Affine3d &e)
00081 {
00082 transformKDLToEigenImpl(k, e);
00083 }
00084
00085 void transformKDLToEigen(const KDL::Frame &k, Eigen::Isometry3d &e)
00086 {
00087 transformKDLToEigenImpl(k, e);
00088 }
00089
00090 void transformEigenToKDL(const Eigen::Affine3d &e, KDL::Frame &k)
00091 {
00092 transformEigenToKDLImpl(e, k);
00093 }
00094
00095 void transformEigenToKDL(const Eigen::Isometry3d &e, KDL::Frame &k)
00096 {
00097 transformEigenToKDLImpl(e, k);
00098 }
00099
00100 void twistEigenToKDL(const Eigen::Matrix<double, 6, 1> &e, KDL::Twist &k)
00101 {
00102 for(int i = 0; i < 6; ++i)
00103 k[i] = e[i];
00104 }
00105
00106 void twistKDLToEigen(const KDL::Twist &k, Eigen::Matrix<double, 6, 1> &e)
00107 {
00108 for(int i = 0; i < 6; ++i)
00109 e[i] = k[i];
00110 }
00111
00112 void vectorEigenToKDL(const Eigen::Matrix<double, 3, 1> &e, KDL::Vector &k)
00113 {
00114 for(int i = 0; i < 3; ++i)
00115 k[i] = e[i];
00116 }
00117 void vectorKDLToEigen(const KDL::Vector &k, Eigen::Matrix<double, 3, 1> &e)
00118 {
00119 for(int i = 0; i < 3; ++i)
00120 e[i] = k[i];
00121 }
00122
00123 void wrenchKDLToEigen(const KDL::Wrench &k, Eigen::Matrix<double, 6, 1> &e)
00124 {
00125 for(int i = 0; i < 6; ++i)
00126 e[i] = k[i];
00127 }
00128
00129 void wrenchEigenToKDL(const Eigen::Matrix<double, 6, 1> &e, KDL::Wrench &k)
00130 {
00131 for(int i = 0; i < 6; ++i)
00132 k[i] = e[i];
00133 }
00134
00135
00136 }