14 #ifndef ODOMETRY_KINEMATIC_KDL_HPP 15 #define ODOMETRY_KINEMATIC_KDL_HPP 23 #include <base/Time.hpp> 24 #include <base/Eigen.hpp> 25 #include <base-logging/Logging.hpp> 30 #include <kdl_parser/kdl_parser.hpp> 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> 48 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
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);
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);
78 static void printLink(
const KDL::SegmentMap::const_iterator& link,
const std::string& prefix)
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 +
" ");
86 static std::string getContactPoint (
const KDL::SegmentMap::const_iterator& link,
const int childrenIdx)
88 if (link->second.children.size() == 0)
89 return link->second.segment.getName();
91 std::cout<<link->second.segment.getName() <<
" has "<<link->second.children.size()<<
" children\n";
92 return getContactPoint(link->second.children[childrenIdx], 0);
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
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