26 #include <VirtualRobot/IK/DifferentialIK.h>
27 #include <VirtualRobot/Nodes/RobotNode.h>
28 #include <VirtualRobot/Robot.h>
35 const VirtualRobot::RobotNodeSetPtr& rns,
36 const Eigen::VectorXf& currentJointVelocity,
38 float maxPositionAcceleration,
39 float maxOrientationAcceleration,
40 float maxNullspaceAcceleration,
41 const VirtualRobot::RobotNodePtr& tcp) :
45 maxPositionAcceleration, maxOrientationAcceleration, maxNullspaceAcceleration);
46 #pragma GCC diagnostic push
47 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
49 #pragma GCC diagnostic pop
54 const Eigen::Ref<const Eigen::VectorXf>& currentJointVelocity)
60 Eigen::FullPivLU<Eigen::MatrixXf> lu_decomp(jacobi);
61 Eigen::MatrixXf nullspace = lu_decomp.kernel();
62 Eigen::VectorXf nsv = Eigen::VectorXf::Zero(nullspace.rows());
64 for (
int i = 0; i < nullspace.cols(); i++)
66 nsv += nullspace.col(i) * nullspace.col(i).dot(currentJointVelocity) /
67 nullspace.col(i).squaredNorm();
69 cartesianVelocityRamp.
setState(jacobi * currentJointVelocity, mode);
78 cartesianVelocityRamp.
setState(jacobi * currentJointVelocity, mode);
90 float jointLimitAvoidanceScale,
93 Eigen::VectorXf nullspaceVel =
94 controller.calculateNullspaceVelocity(cartesianVel, jointLimitAvoidanceScale, mode);
100 const Eigen::VectorXf& nullspaceVel,
105 nullSpaceVelocityRamp.
update(nullspaceVel,
dt),
111 float maxOrientationAcceleration,
112 float maxNullspaceAcceleration)