Frame TreeFkSolverPos_recursive::recursiveFk(const JntArray& q_in, SegmentMap::value_type const* it, SegmentMap::value_type const* baseit) { //gets the frame for the current element (segment) const TreeElement& currentElement = it->second; if(it == baseit){ return KDL::Frame::Identity(); } else{ Frame currentFrame = currentElement.segment.pose(((JntArray&)q_in)(currentElement.q_nr)); return recursiveFk(q_in, currentElement.parent, baseit) * currentFrame; } }
int TreeFkSolverPos_recursive::JntToCart(const JntArray& q_in, Frame& p_out, std::string segmentName) { SegmentMap::const_iterator it = tree.getSegment(segmentName); if(q_in.rows() != tree.getNrOfJoints()) return -1; else if(it == tree.getSegments().end()) //if the segment name is not found return -2; else{ p_out = recursiveFk(q_in, it); return 0; } }
Frame TreeFkSolverPos_recursive::recursiveFk(const JntArray& q_in, const SegmentMap::const_iterator& it) { //gets the frame for the current element (segment) const TreeElementType& currentElement = it->second; Frame currentFrame = GetTreeElementSegment(currentElement).pose(q_in(GetTreeElementQNr(currentElement))); SegmentMap::const_iterator rootIterator = tree.getRootSegment(); if(it == rootIterator){ return currentFrame; } else{ SegmentMap::const_iterator parentIt = GetTreeElementParent(currentElement); return recursiveFk(q_in, parentIt) * currentFrame; } }
int TreeFkSolverPos_recursive::JntToCart(const JntArray& q_in, Frame& p_out, const std::string& segmentName, const std::string& baseName) { SegmentMap::value_type const* it = tree.getSegmentPtr(segmentName); SegmentMap::value_type const* baseit = tree.getSegmentPtr(baseName); if(q_in.rows() != tree.getNrOfJoints()) return -1; else if(!it) //if the segment name is not found return -2; else if(!baseit) //if the base segment name is not found return -3; else{ p_out = recursiveFk(q_in, it, baseit); return 0; } }