27 #include <VirtualRobot/LinkedCoordinate.h>
32 using namespace FindAndGraspObjectGroup;
46 using namespace Eigen;
51 VirtualRobot::LinkedCoordinate actualPose(robot);
53 robot->getRobotNodeSet(getInput<std::string>(
"kinematicChainName"))->getTCP()->getName(),
55 actualPose.changeFrame(robot->getRootNode());
56 Vector3f actualPosition = actualPose.getPosition();
57 Quaternionf actualOrientation(actualPose.getPose().block<3, 3>(0, 0));
60 VirtualRobot::LinkedCoordinate targetPose =
62 getInput<FramedPosition>(
"targetTCPPosition"),
63 getInput<FramedOrientation>(
"targetTCPOrientation"));
64 targetPose.changeFrame(robot->getRootNode());
65 Vector3f targetPosition = targetPose.getPosition();
66 Quaternionf targetOrientation(targetPose.getPose().block<3, 3>(0, 0));
68 float cartesianDistance =
69 sqrtf(((targetPosition - actualPosition).
dot(targetPosition - actualPosition)));
70 float orientationDistance = actualOrientation.angularDistance(targetOrientation);
72 setOutput(
"TCPDistanceToTarget", cartesianDistance);
73 setOutput(
"TCPOrientationDistanceToTarget", orientationDistance);
74 bool withOri = getInput<bool>(
"ikWithOrientation");
76 if (cartesianDistance <= getInput<float>(
"targetPositionDistanceTolerance") &&
77 (!withOri || orientationDistance <= getInput<float>(
"targetOrientationDistanceTolerance")))
84 <<
"Target pose has not been reached with the desired accuracy. Cartesian distance: "
85 << cartesianDistance <<
", orientation distance: " << orientationDistance <<
" ";
86 ARMARX_INFO <<
"Actual pose: " << actualPose.getPose();
87 ARMARX_INFO <<
"Target pose: " << targetPose.getPose();
98 return "ValidateTcpPose";