threed_odometry
KinematicKDL.hpp
Go to the documentation of this file.
1 
14 #ifndef ODOMETRY_KINEMATIC_KDL_HPP
15 #define ODOMETRY_KINEMATIC_KDL_HPP
16 
17 /* Base includes */
18 #include <assert.h>
19 #include <sstream>
20 #include <string>
23 #include <base/Time.hpp>
24 #include <base/Eigen.hpp>
25 #include <base-logging/Logging.hpp>
26 
27 #include <Eigen/Core>
28 
29 /* KDL Parser */
30 #include <kdl_parser/kdl_parser.hpp>
31 
33 #include <kdl/frames_io.hpp>
34 #include <kdl/treefksolver.hpp>
35 #include <kdl/treefksolverpos_recursive.hpp>
36 #include <kdl/chainjnttojacsolver.hpp>
37 #include <kdl/treejnttojacsolver.hpp>
41 namespace threed_odometry
42 {
43 
45  {
46 
47  public:
48  EIGEN_MAKE_ALIGNED_OPERATOR_NEW //Structures having Eigen members
49 
50  protected:
51  KDL::Tree tree;
52  std::string model_name;
53  std::vector<KDL::Chain> ichains;
54  std::vector< std::vector<std::string> > ichains_joint_names;
55  std::vector<std::string> contact_point_segments;
56  std::vector<std::string> contact_angle_segments;
59  public:
60  unsigned int model_dof;
63  public:
64  KinematicKDL (const std::string &urdf_file, const std::vector<std::string> &_contact_points,
65  const std::vector<std::string> &contact_angles, const int _number_robot_joints, const int _number_slip_joints, const int _number_contact_joints);
66  ~KinematicKDL();
67 
68  std::string getName();
69  void fkSolver(const std::vector<double> &positions, const std::vector<std::string> &tip_names, std::vector<Eigen::Affine3d> &fkTrans, std::vector<base::Matrix6d> &fkCov);
70  Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> jacobianSolver(const std::vector<std::string> &names, const std::vector<double> &positions);
71  void unpackJoints(const std::vector<std::string>& joint_names, const std::vector<double>& joint_positions,
72  const std::vector<std::string>& involved_joints, KDL::JntArray& joint_array);
73  void organizeJacobian(const int chainidx, const std::vector<std::string> &joint_names, const std::vector<std::string> &involved_joints,
74  const Eigen::Matrix <double, Eigen::Dynamic, Eigen::Dynamic> &jacobian, Eigen::Matrix <double, Eigen::Dynamic, Eigen::Dynamic> &J);
75 
76  };
77 
78  static void printLink(const KDL::SegmentMap::const_iterator& link, const std::string& prefix)
79  {
80  std::cout << prefix << "- Segment " << link->second.segment.getName() << " [Joint "<< link->second.segment.getJoint().getName()<<
81  "] origin axis: "<<link->second.segment.getJoint().JointOrigin()<<" rotating axis: "<<link->second.segment.getJoint().JointAxis()<<" has " << link->second.children.size() << " children" << std::endl;
82  for (unsigned int i=0; i<link->second.children.size(); ++i)
83  printLink(link->second.children[i], prefix + " ");
84  };
85 
86  static std::string getContactPoint (const KDL::SegmentMap::const_iterator& link, const int childrenIdx)
87  {
88  if (link->second.children.size() == 0)
89  return link->second.segment.getName();
90 
91  std::cout<<link->second.segment.getName() << " has "<<link->second.children.size()<<" children\n";
92  return getContactPoint(link->second.children[childrenIdx], 0);
93  };
94 
95 };
96 
97 #endif
void organizeJacobian(const int chainidx, const std::vector< std::string > &joint_names, const std::vector< std::string > &involved_joints, const Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > &jacobian, Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > &J)
Definition: KinematicKDL.cpp:288
int number_slip_joints
Definition: KinematicKDL.hpp:57
unsigned int model_dof
Definition: KinematicKDL.hpp:60
int number_contact_joints
Definition: KinematicKDL.hpp:57
~KinematicKDL()
Definition: KinematicKDL.cpp:130
Definition: KinematicKDL.hpp:44
std::string getName()
Definition: KinematicKDL.cpp:134
void unpackJoints(const std::vector< std::string > &joint_names, const std::vector< double > &joint_positions, const std::vector< std::string > &involved_joints, KDL::JntArray &joint_array)
Definition: KinematicKDL.cpp:266
int number_robot_joints
Definition: KinematicKDL.hpp:57
KinematicKDL(const std::string &urdf_file, const std::vector< std::string > &_contact_points, const std::vector< std::string > &contact_angles, const int _number_robot_joints, const int _number_slip_joints, const int _number_contact_joints)
Definition: KinematicKDL.cpp:20
std::vector< std::string > contact_angle_segments
Definition: KinematicKDL.hpp:56
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > jacobianSolver(const std::vector< std::string > &names, const std::vector< double > &positions)
Definition: KinematicKDL.cpp:198
KDL::Tree tree
Definition: KinematicKDL.hpp:51
std::vector< KDL::Chain > ichains
Definition: KinematicKDL.hpp:53
Definition: IIR.hpp:11
std::string model_name
Definition: KinematicKDL.hpp:52
std::vector< std::string > contact_point_segments
Definition: KinematicKDL.hpp:55
std::vector< std::vector< std::string > > ichains_joint_names
Definition: KinematicKDL.hpp:54
void fkSolver(const std::vector< double > &positions, const std::vector< std::string > &tip_names, std::vector< Eigen::Affine3d > &fkTrans, std::vector< base::Matrix6d > &fkCov)
Definition: KinematicKDL.cpp:139