28 #include <VirtualRobot/Nodes/RobotNode.h>
29 #include <VirtualRobot/RobotNodeSet.h>
38 VirtualRobot::RobotNodeSetPtr rns,
39 VirtualRobot::RobotNodePtr tcp,
43 tcp = tcp ? tcp : rns->getTCP();
49 for (VirtualRobot::RobotNodePtr rn : rns->getAllRobotNodes())
51 if (rn->isLimitless())
57 rn->setJointValue((rn->getJointLimitHi() + rn->getJointLimitLo()) / 2);
62 std::vector<IKStep> ikSteps;
63 Eigen::VectorXf currentJointValues = rns->getJointValuesEigen();
66 Eigen::Vector3f posDiff = positionController.
getPositionDiff(targetPose);
71 Eigen::VectorXf cartesianVel(6);
72 cartesianVel << posDiff(0), posDiff(1), posDiff(2), oriDiff(0), oriDiff(1), oriDiff(2);
73 const Eigen::VectorXf jnv =
75 const Eigen::VectorXf jv =
76 velocityController.
calculate(cartesianVel, jnv, VirtualRobot::IKSolver::All);
81 Eigen::VectorXf jvClamped = jv * stepLength;
83 float infNorm = jvClamped.lpNorm<Eigen::Infinity>();
94 s.cartesianVel = cartesianVel;
98 s.jvClamped = jvClamped;
99 ikSteps.emplace_back(
s);
103 Eigen::VectorXf newJointValues = currentJointValues + jvClamped;
104 rns->setJointValues(newJointValues);
105 currentJointValues = newJointValues;
120 for (
size_t i = 0; i < rns->getSize(); i++)
122 VirtualRobot::RobotNodePtr rn = rns->getNode(i);
123 if (rn->isLimitless())
130 rn->getJointLimitHi() - rn->getJointValue());
141 const Eigen::VectorXf& initialJV,
142 VirtualRobot::RobotNodeSetPtr rns,
143 VirtualRobot::RobotNodePtr tcp,
147 rns->setJointValues(initialJV);
161 VirtualRobot::RobotNodePtr tcp,
163 rns(rns), tcp(tcp), params(params)
182 const Eigen::VectorXf& startJointValues)
185 rns->setJointValues(startJointValues);