1 #include "header/kdlHelper.h" 9 std::string endEffector_name, std::string vehicle_name,
10 std::string tool_name)
13 TiXmlDocument file_xml(filename);
19 if (!model.initXml(&file_xml)){
20 std::cerr <<
"[KDL_HELPER] Failed to parse urdf robot model\n" ;
23 if (!kdl_parser::treeFromUrdfModel(model, tree)){
24 std::cerr <<
"[KDL_HELPER] Failed to construct kdl tree\n";
29 this->link0_name = link0_name;
30 this->endEffector_name = endEffector_name;
31 this->vehicle_name = vehicle_name;
32 this->tool_name = tool_name;
36 KDLHelper::~KDLHelper(){
39 delete jacobEE_solver;
40 delete jacobTool_solver;
59 tree.getChain(link0_name, endEffector_name, kinChain);
61 nJoints = kinChain.getNrOfJoints();
62 if (nJoints != ARM_DOF){
63 std::cerr <<
"[KDL_HELPER] Something wrong with urdf:\n" <<
64 "I have found from urdf file " << nJoints <<
" joints " <<
65 "but from define list file I read " << ARM_DOF <<
". Please check\n";
69 std::cout <<
"[KDL_HELPER] found " << nJoints <<
" joints from " << link0_name
70 <<
" to " << endEffector_name <<
"\n";
72 eePose_solver =
new KDL::ChainFkSolverPos_recursive(kinChain);
73 jacobEE_solver =
new KDL::ChainJntToJacSolver(kinChain);
91 tree.getChain(vehicle_name, endEffector_name, kinChain);
94 nJoints = kinChain.getNrOfJoints();
95 if (nJoints != ARM_DOF){
96 std::cerr <<
"[KDL_HELPER] Something wrong with urdf:\n" <<
97 "I have found from urdf file " << nJoints <<
" joints " <<
98 "but from define list file I read " << ARM_DOF <<
". Please check\n";
105 KDL::Frame eeTtool_kdl = CONV::transfMatrix_eigen2kdl(eeTtool_eigen);
107 kinChain.addSegment(KDL::Segment(KDL::Joint(KDL::Joint::None), eeTtool_kdl));
113 jacobTool_solver =
new KDL::ChainJntToJacSolver(kinChain);
122 if (tool_name.size() == 0 ){
123 std::cerr <<
"[KDL_HELPER] tool_name not inserted in costructor, insert it or use the other setTool\n";
128 tree.getChain(vehicle_name, tool_name, kinChain);
130 nJoints = kinChain.getNrOfJoints();
131 if (nJoints != ARM_DOF){
132 std::cerr <<
"[KDL_HELPER] Something wrong with urdf:\n" <<
133 "I have found from urdf file " << nJoints <<
" joints " <<
134 "but from define list file I read " << ARM_DOF <<
". Please check\n";
138 jacobTool_solver =
new KDL::ChainJntToJacSolver(kinChain);
143 int KDLHelper::getEEpose(std::vector<double> jointPos, Eigen::Matrix4d *eePose_eigen){
145 KDL::JntArray jointPositions = KDL::JntArray(nJoints);
146 for(
unsigned int i=0; i<nJoints; i++){
147 jointPositions(i)=jointPos[i];
149 KDL::Frame eePose_kdl;
150 eePose_solver->JntToCart(jointPositions, eePose_kdl);
152 *eePose_eigen = CONV::transfMatrix_kdl2eigen(eePose_kdl);
167 KDL::JntArray jointPositions = KDL::JntArray(nJoints);
169 for(
unsigned int i=0; i<nJoints; i++){
170 jointPositions(i)=jointPos[i];
173 KDL::Jacobian jacobian_kdl;
174 jacobian_kdl.resize(nJoints);
175 jacobEE_solver->JntToJac(jointPositions, jacobian_kdl);
177 *jacobianEE_eigen = CONV::jacobian_kdl2eigen(jacobian_kdl);
190 KDL::JntArray jointPositions = KDL::JntArray(nJoints);
192 for(
unsigned int i=0; i<nJoints; i++){
193 jointPositions(i)=jointPos[i];
196 KDL::Jacobian jacobian_kdl;
197 jacobian_kdl.resize(nJoints);
198 jacobTool_solver->JntToJac(jointPositions, jacobian_kdl);
200 *jacobianTool_eigen = CONV::jacobian_kdl2eigen(jacobian_kdl);
224 tree.getChain(frameOrigin, frameTarget, kinChain);
226 int nJoints = kinChain.getNrOfJoints();
228 std::cerr <<
"[KDL_HELPER] Use this function only for FIXED things relative each other\n";
232 KDL::ChainFkSolverPos_recursive transfSolver(kinChain);
235 KDL::JntArray jointPositions = KDL::JntArray(nJoints);
236 for(
unsigned int i=0; i<nJoints; i++){
237 jointPositions(i)=0.0;
241 transfSolver.JntToCart(jointPositions, xTx_kdl);
243 *xTx_eigen = CONV::transfMatrix_kdl2eigen(xTx_kdl);
249 int KDLHelper::getNJoints(){
return nJoints;}
274 int KDLHelper::getToolpose(std::vector<double> jointPos, Eigen::Matrix4d eeTtool_eigen, Eigen::Matrix4d *toolPose_eigen){
276 KDL::JntArray jointPositions = KDL::JntArray(nJoints);
277 for(
unsigned int i=0; i<nJoints; i++){
278 jointPositions(i)=jointPos[i];
280 KDL::Frame toolPose_kdl;
282 tree.getChain(link0_name, endEffector_name, kinChain);
283 KDL::Frame eeTtool_kdl = CONV::transfMatrix_eigen2kdl(eeTtool_eigen);
285 kinChain.addSegment(KDL::Segment(KDL::Joint(KDL::Joint::None), eeTtool_kdl));
286 KDL::ChainFkSolverPos_recursive toolPose_solver(kinChain);
288 toolPose_solver.JntToCart(jointPositions, toolPose_kdl);
290 *toolPose_eigen = CONV::transfMatrix_kdl2eigen(toolPose_kdl);
316 tree.getChain(link0_name, endEffector_name, kinChain);
321 KDL::Frame eeTtool_kdl = CONV::transfMatrix_eigen2kdl(eeTtool_eigen);
323 kinChain.addSegment(KDL::Segment(KDL::Joint(KDL::Joint::None), eeTtool_kdl));
329 jacobTool_solver =
new KDL::ChainJntToJacSolver(kinChain);
int getJacobianEE(std::vector< double > jointPos, Eigen::Matrix< double, 6, ARM_DOF > *jacobianEE_eigen)
KDLHelper::getJacobianEE respect base frame of arm (link0)
int getFixedFrame(std::string frameOrigin, std::string frameTarget, Eigen::Matrix4d *xTx_eigen)
KDLHelper::getFixedFrame get relative position of things inside the urdf file of the robot that NOT c...
KDLHelper(std::string filename, std::string link0_name, std::string endEffector_name, std::string vehicle_name, std::string toolName="")
KDLHelper::KDLHelper.
int getJacobianTool(std::vector< double > jointPos, Eigen::Matrix< double, 6, ARM_DOF > *jacobianTool_eigen)
KDLHelper::getJacobianTool respect base frame of arm (link0)
int setToolSolvers()
KDLHelper::setToolSolvers version for when the peg is a link of the robot.
int setToolSolvers_old(Eigen::Matrix4d eeTtool_eigen)
old
int getToolpose(std::vector< double > jointPos, Eigen::Matrix4d eeTtool_eigen, Eigen::Matrix4d *toolPose_eigen)
debug
int setEESolvers()
KDLHelper::setEESolvers Initialize the kinematic solvers (jacob and pose) for the arm End Effector...