pinocchio  2.1.3
urdf/utils.hpp
1 //
2 // Copyright (c) 2015-2016 CNRS
3 //
4 
5 #ifndef __pinocchio_parsers_urdf_utils_hpp__
6 #define __pinocchio_parsers_urdf_utils_hpp__
7 
8 #include <urdf_model/model.h>
9 
10 #include "pinocchio/spatial/se3.hpp"
11 #include "pinocchio/spatial/inertia.hpp"
12 
13 namespace pinocchio
14 {
15  namespace urdf
16  {
17 
25  inline Inertia convertFromUrdf (const ::urdf::Inertial & Y)
26  {
27  const ::urdf::Vector3 & p = Y.origin.position;
28  const ::urdf::Rotation & q = Y.origin.rotation;
29 
30  const Eigen::Vector3d com(p.x,p.y,p.z);
31  const Eigen::Matrix3d & R = Eigen::Quaterniond(q.w,q.x,q.y,q.z).matrix();
32 
33  Eigen::Matrix3d I; I <<
34  Y.ixx,Y.ixy,Y.ixz,
35  Y.ixy,Y.iyy,Y.iyz,
36  Y.ixz,Y.iyz,Y.izz;
37  return Inertia(Y.mass,com,R*I*R.transpose());
38  }
39 
47  inline SE3 convertFromUrdf (const ::urdf::Pose & M)
48  {
49  const ::urdf::Vector3 & p = M.position;
50  const ::urdf::Rotation & q = M.rotation;
51  return SE3( Eigen::Quaterniond(q.w,q.x,q.y,q.z).matrix(), Eigen::Vector3d(p.x,p.y,p.z));
52  }
53 
57  enum CartesianAxis { AXIS_X=0, AXIS_Y=1, AXIS_Z=2, AXIS_UNALIGNED };
58 
66  inline CartesianAxis extractCartesianAxis (const ::urdf::Vector3 & axis)
67  {
68  if( (axis.x==1.0)&&(axis.y==0.0)&&(axis.z==0.0) )
69  return AXIS_X;
70  else if( (axis.x==0.0)&&(axis.y==1.0)&&(axis.z==0.0) )
71  return AXIS_Y;
72  else if( (axis.x==0.0)&&(axis.y==0.0)&&(axis.z==1.0) )
73  return AXIS_Z;
74  else
75  return AXIS_UNALIGNED;
76  }
77 
78  } //urdf
79 } // se3
80 #endif // __pinocchio_parsers_urdf_utils_hpp__
CartesianAxis
The four possible cartesian types of an 3D axis.
Definition: urdf/utils.hpp:57
CartesianAxis extractCartesianAxis(const ::urdf::Vector3 &axis)
Extract the cartesian property of a particular 3D axis.
Definition: urdf/utils.hpp:66
Inertia convertFromUrdf(const ::urdf::Inertial &Y)
Convert URDF Inertial quantity to Spatial Inertia.
Definition: urdf/utils.hpp:25
Definition: types.hpp:29
Main pinocchio namespace.
Definition: treeview.dox:24