7 SimpleGridReachability::Result
8 SimpleGridReachability::calculateDiffIK(
const Eigen::Matrix4f targetPose,
11 VirtualRobot::RobotNodePtr rns = params.nodeSet;
12 VirtualRobot::RobotNodeSetPtr tcp = params.tcp ? params.tcp : rns->getTCP();
13 CartesianVelocityController velocityController(rns);
14 CartesianPositionController positionController(tcp);
16 Eigen::VectorXf initialJV = rns->getJointValuesEigen();
17 for (
size_t i = 0; i <= params.stepsInitial + params.stepsFineTune; i++)
19 Eigen::Vector3f posDiff = positionController.getPositionDiff(targetPose);
20 Eigen::Vector3f oriDiff = positionController.getOrientationDiff(targetPose);
24 Eigen::VectorXf cartesialVel(6);
25 cartesialVel << posDiff(0), posDiff(1), posDiff(2), oriDiff(0), oriDiff(1), oriDiff(2);
27 params.jointLimitAvoidanceKp * velocityController.calculateJointLimitAvoidance();
29 velocityController.calculate(cartesialVel, jnv, VirtualRobot::IKSolver::All);
33 i < params.stepsInitial ? params.ikStepLengthInitial : params.ikStepLengthFineTune;
36 for (
size_t n = 0;
n < rns->getSize();
n++)
38 rns->getNode(
n)->setJointValue(rns->getNode(
n)->getJointValue() + jv(
n));
43 result.jointValues = rns->getJointValuesEigen();
44 result.posError = positionController.getPositionDiff(targetPose);
45 result.oriError = positionController.getOrientationError(targetPose);
47 result.posError < params.maxPosError && result.oriError < params.maxOriError;