1 #include "header/conversions.h" 3 std::vector<double> CONV::tfMat3x3_to_vector(tf::Matrix3x3 matrix3x3){
5 std::vector<double> vector(9);
6 vector[0] = matrix3x3.getColumn(0).getX();
7 vector[1] = matrix3x3.getColumn(0).getY();
8 vector[2] = matrix3x3.getColumn(0).getZ();
9 vector[3] = matrix3x3.getColumn(1).getX();
10 vector[4] = matrix3x3.getColumn(1).getY();
11 vector[5] = matrix3x3.getColumn(1).getZ();
12 vector[6] = matrix3x3.getColumn(2).getX();
13 vector[7] = matrix3x3.getColumn(2).getY();
14 vector[8] = matrix3x3.getColumn(2).getZ();
20 Eigen::VectorXd CONV::vector_std2Eigen(std::vector<double> vect){
22 Eigen::VectorXd vec_eig(vect.size());
24 for (
int i=0; i<vect.size(); i++){
25 vec_eig(i) = vect.at(i);
31 std::vector<double> CONV::vector_cmat2std(CMAT::Matrix mat){
33 std::vector<double> vect;
34 if (mat.GetNumColumns() != 1){
35 std::cout <<
"[CONV] vector_cmat2std ERROR: argument must be a nx1 matrix (ie, a vector)";
38 vect.resize(mat.GetNumRows());
41 for(std::vector<double>::iterator it = vect.begin(); it != vect.end(); ++it) {
49 std::vector<double> CONV::vector_eigen2std(Eigen::VectorXd vect){
51 std::vector<double> vect_std(vect.size());
52 for (
int i=0; i< vect.size(); i++){
53 vect_std.at(i) = vect(i);
59 Eigen::Matrix3d CONV::rotMatrix_cmat2eigen(CMAT::RotMatrix mat_cmat){
61 Eigen::Matrix3d mat_eigen;
62 mat_eigen << mat_cmat(1,1), mat_cmat(1,2), mat_cmat(1,3),
63 mat_cmat(2,1), mat_cmat(2,2), mat_cmat(2,3),
64 mat_cmat(3,1), mat_cmat(3,2), mat_cmat(3,3);
70 Eigen::Matrix4d CONV::transfMatrix_cmat2eigen(CMAT::TransfMatrix mat_cmat){
72 Eigen::Matrix4d mat_eigen = Eigen::Matrix4d::Identity();
73 mat_eigen.topLeftCorner<3,3>() = CONV::rotMatrix_cmat2eigen(mat_cmat.GetRotMatrix());
74 CMAT::Vect3 trasl = mat_cmat.GetTrasl();
75 mat_eigen(0,3) = trasl(1);
76 mat_eigen(1,3) = trasl(2);
77 mat_eigen(2,3) = trasl(3);
83 Eigen::MatrixXd CONV::matrix_cmat2eigen(CMAT::Matrix mat_cmat){
85 Eigen::MatrixXd mat_eigen(mat_cmat.GetNumRows(), mat_cmat.GetNumColumns());
87 for (
int i = 0; i<mat_cmat.GetNumRows(); i++){
88 for (
int j = 0; j<mat_cmat.GetNumColumns(); j++){
89 mat_eigen(i,j) = mat_cmat(i+1, j+1);
109 CMAT::Matrix CONV::matrix_eigen2cmat(Eigen::MatrixXd mat_eigen){
110 CMAT::Matrix mat_cmat(mat_eigen.rows(), mat_eigen.cols(), mat_eigen.data());
115 Eigen::Matrix4d CONV::transfMatrix_tf2eigen(tf::Transform mat_tf){
116 Eigen::Matrix4d mat_eigen = Eigen::Matrix4d::Identity();
119 Eigen::Matrix3d rot_eigen;
120 tf::matrixTFToEigen(mat_tf.getBasis(), rot_eigen);
121 mat_eigen.topLeftCorner<3,3>() = rot_eigen;
124 mat_eigen(0,3) = mat_tf.getOrigin().getX();
125 mat_eigen(1,3) = mat_tf.getOrigin().getY();
126 mat_eigen(2,3) = mat_tf.getOrigin().getZ();
144 Eigen::Matrix4d CONV::transfMatrix_kdl2eigen(KDL::Frame mat_kdl){
146 Eigen::Matrix4d mat_eigen = Eigen::Matrix4d::Identity();
150 mat_eigen.topLeftCorner<3,3>() << mat_kdl.M.data[0], mat_kdl.M.data[1], mat_kdl.M.data[2],
151 mat_kdl.M.data[3], mat_kdl.M.data[4], mat_kdl.M.data[5],
152 mat_kdl.M.data[6], mat_kdl.M.data[7], mat_kdl.M.data[8];
154 mat_eigen(0,3) = mat_kdl.p.x();
155 mat_eigen(1,3) = mat_kdl.p.y();
156 mat_eigen(2,3) = mat_kdl.p.z();
169 Eigen::MatrixXd CONV::jacobian_kdl2eigen(KDL::Jacobian mat_kdl){
170 Eigen::MatrixXd mat_eigen = mat_kdl.data;
180 KDL::Frame CONV::transfMatrix_eigen2kdl(Eigen::Matrix4d mat_eigen){
186 Eigen::Matrix3d rot_eigen = mat_eigen.topLeftCorner<3,3>();
188 mat_kdl.M.data[0] = rot_eigen(0,0);
189 mat_kdl.M.data[1] = rot_eigen(0,1);
190 mat_kdl.M.data[2] = rot_eigen(0,2);
192 mat_kdl.M.data[3] = rot_eigen(1,0);
193 mat_kdl.M.data[4] = rot_eigen(1,1);
194 mat_kdl.M.data[5] = rot_eigen(1,2);
196 mat_kdl.M.data[6] = rot_eigen(2,0);
197 mat_kdl.M.data[7] = rot_eigen(2,1);
198 mat_kdl.M.data[8] = rot_eigen(2,2);
201 mat_kdl.p.x(mat_eigen(0,3));
202 mat_kdl.p.y(mat_eigen(1,3));
203 mat_kdl.p.z(mat_eigen(2,3));
212 CMAT::Matrix CONV::matrix_visp2cmat(vpMatrix mat_visp){
213 CMAT::Matrix mat_cmat(mat_visp.getRows(), mat_visp.getCols());
214 for (
int i=0; i<mat_visp.getRows(); i++){
215 for (
int j=0; j<mat_visp.getCols(); j++){
216 mat_cmat(i+1, j+1) = mat_visp[i][j];
225 Eigen::MatrixXd CONV::matrix_visp2eigen(vpMatrix mat_visp){
227 Eigen::MatrixXd mat_eigen(mat_visp.getRows(), mat_visp.getCols());
228 for (
int i=0; i<mat_visp.getRows(); i++){
229 for (
int j=0; j<mat_visp.getCols(); j++){
230 mat_eigen(i,j) = mat_visp[i][j];
237 vpHomogeneousMatrix CONV::transfMatrix_eigen2visp(Eigen::MatrixXd mat_eigen){
238 vpHomogeneousMatrix mat_visp;
239 for (
int i=0; i<mat_eigen.rows(); i++){
240 for (
int j=0; j<mat_eigen.cols(); j++){
241 mat_visp[i][j] = mat_eigen(i,j);
262 geometry_msgs::Transform CONV::transfMatrix_eigen2geomMsgs(Eigen::Matrix4d mat_eigen){
264 geometry_msgs::Transform transf_ros;
267 transf_ros.translation.x = mat_eigen(0,3);
268 transf_ros.translation.y = mat_eigen(1,3);
269 transf_ros.translation.z = mat_eigen(2,3);
271 Eigen::Quaterniond quat_eigen(mat_eigen.topLeftCorner<3,3>());
272 transf_ros.rotation.x = quat_eigen.x();
273 transf_ros.rotation.y = quat_eigen.y();
274 transf_ros.rotation.z = quat_eigen.z();
275 transf_ros.rotation.w = quat_eigen.w();
281 Eigen::Matrix4d CONV::transfMatrix_geomMsgs2Eigen(geometry_msgs::Transform mat_msgs){
283 Eigen::Matrix4d mat_eigen = Eigen::Matrix4d::Identity();
285 mat_eigen(0,3) = mat_msgs.translation.x;
286 mat_eigen(1,3) = mat_msgs.translation.y;
287 mat_eigen(2,3) = mat_msgs.translation.z;
289 Eigen::Quaterniond quat_eigen;
290 quat_eigen.x() = mat_msgs.rotation.x;
291 quat_eigen.y() = mat_msgs.rotation.y;
292 quat_eigen.z() = mat_msgs.rotation.z;
293 quat_eigen.w() = mat_msgs.rotation.w;
296 mat_eigen.topLeftCorner<3,3>() = quat_eigen.normalized().toRotationMatrix();