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())
129 result.
jointLimitMargins(i) = std::min(rn->getJointValue() - rn->getJointLimitLo(),
130 rn->getJointLimitHi() - rn->getJointValue());
141 const Eigen::VectorXf& initialJV,
142 VirtualRobot::RobotNodeSetPtr rns,
143 VirtualRobot::RobotNodePtr tcp,
147 rns->setJointValues(initialJV);
148 for (
const Eigen::Matrix4f& target :
targets)
static Reachability CalculateReachability(const std::vector< Eigen::Matrix4f > targets, const Eigen::VectorXf &initialJV, VirtualRobot::RobotNodeSetPtr rns, VirtualRobot::RobotNodePtr tcp=VirtualRobot::RobotNodePtr(), Parameters params=Parameters())
Use this to check a trajectory of waypoints.