26 #include <VirtualRobot/IK/DifferentialIK.h>
27 #include <VirtualRobot/Nodes/RobotNode.h>
28 #include <VirtualRobot/Robot.h>
29 #include <VirtualRobot/RobotNodeSet.h>
30 #include <VirtualRobot/math/AbstractFunctionR1R6.h>
37 const VirtualRobot::RobotNodePtr& tcp) :
44 const ::math::AbstractFunctionR1R6Ptr& trajectory,
50 Eigen::VectorXf cartesianVel(posLen + oriLen);
54 Eigen::Vector3f targetPos = trajectory->GetPosition(t);
55 Eigen::Vector3f errPos = targetPos - tcp->getPositionInRootFrame();
56 Eigen::Vector3f posVel = errPos *
KpPos;
59 posVel += trajectory->GetPositionDerivative(t);
66 cartesianVel.block<3, 1>(0, 0) = posVel;
71 Eigen::Matrix3f targetOri = trajectory->GetOrientation(t).toRotationMatrix();
74 Eigen::AngleAxisf aa(oriDir);
75 Eigen::Vector3f errOri = aa.axis() * aa.angle();
76 Eigen::Vector3f oriVel = errOri *
KpOri;
79 oriVel += trajectory->GetOrientationDerivative(t);
86 cartesianVel.block<3, 1>(posLen, 0) = oriVel;
93 const ::math::AbstractFunctionR1R6Ptr& trajectory,
96 Eigen::Vector3f targetPos = trajectory->GetPosition(t);
97 Eigen::Vector3f errPos = targetPos - tcp->getPositionInRootFrame();
103 const ::math::AbstractFunctionR1R6Ptr& trajectory,
106 Eigen::Matrix3f targetOri = trajectory->GetOrientation(t).toRotationMatrix();
109 Eigen::AngleAxisf aa(oriDir);
115 const ::math::AbstractFunctionR1R6Ptr& trajectory,
118 Eigen::Vector3f targetPos = trajectory->GetPosition(t);
119 return targetPos - tcp->getPositionInRootFrame();
124 const ::math::AbstractFunctionR1R6Ptr& trajectory,
127 Eigen::Matrix3f targetOri = trajectory->GetOrientation(t).toRotationMatrix();
130 Eigen::AngleAxisf aa(oriDir);
131 return aa.axis() * aa.angle();