26 #include <VirtualRobot/MathTools.h>
27 #include <VirtualRobot/Nodes/RobotNode.h>
28 #include <VirtualRobot/Robot.h>
29 #include <VirtualRobot/RobotNodeSet.h>
30 #include <VirtualRobot/math/Helpers.h>
39 const VirtualRobot::RobotNodePtr& tcp,
43 velocityControllerHelper(velocityControllerHelper),
44 currentWaypointIndex(0)
50 const VirtualRobot::RobotNodePtr& tcp,
52 const std::vector<Eigen::Matrix4f>& waypoints) :
54 velocityControllerHelper(velocityControllerHelper),
56 currentWaypointIndex(0)
61 const VirtualRobot::RobotNodePtr& tcp,
63 const std::vector<PosePtr>& waypoints) :
65 velocityControllerHelper(velocityControllerHelper),
66 currentWaypointIndex(0)
70 this->waypoints.push_back(pose->toEigen());
131 this->waypoints.clear();
134 this->waypoints.push_back(pose->toEigen());
161 const Eigen::Vector3f& feedForwardVelocityOri)
233 const Eigen::Vector3f
242 float dist = FLT_MAX;
244 for (
size_t i = 0; i <
waypoints.size(); i++)
248 float d = posErr + oriErr * rad2mmFactor;
268 std::stringstream ss;
278 const VirtualRobot::RobotNodeSetPtr& rns,
285 cartesianVelocityController.reset(
292 float eps = args.
eps;
294 std::vector<float> initialJointAngles = rns->getJointValues();
296 for (
int i = 0; i < args.
loops; i++)
299 Eigen::VectorXf nullspaceVel =
300 cartesianVelocityController
301 ->calculateJointLimitAvoidance();
302 float nullspaceLen = nullspaceVel.norm();
303 if (nullspaceLen > stepLength)
305 nullspaceVel = nullspaceVel / nullspaceLen * stepLength;
307 Eigen::VectorXf
jointVelocities = cartesianVelocityController->calculate(
312 if (len > stepLength)
317 for (
size_t n = 0; n < rns->getSize(); n++)
319 rns->getNode(n)->setJointValue(rns->getNode(n)->getJointValue() +
330 if (errorOriAfter < errorOriInitial + 1.f / 180 *
M_PI &&
331 errorPosAfter < errorPosInitial + 1.f)
337 rns->setJointValues(initialJointAngles);