27 #include <VirtualRobot/LinkedCoordinate.h>
28 #include <VirtualRobot/RobotNodeSet.h>
34 #include "../MotionControlGroupStatechartContext.h"
37 using namespace MotionControlGroup;
40 CartesianPositionControlVerification::SubClassRegistry
42 CartesianPositionControlVerification::GetName(),
62 getContext<MotionControlGroupStatechartContext>();
64 std::string kinChainName = in.getKinematicChainName();
65 float positionTolerance = in.getTcpPositionTolerance();
66 float orientationTolerance = in.getTcpOrientationTolerance();
76 if (!robot->hasRobotNodeSet(kinChainName))
85 float tcpPositionDistanceToTarget = 0;
86 float tcpOrientationDistanceToTarget = 0;
89 if (isInputParameterSet(
"TcpTargetPosition"))
91 framedPosition = in.getTcpTargetPosition();
92 tcpPositionDistanceToTarget =
93 (framedPosition->toGlobal(robot)->toEigen() -
94 robot->getRobotNodeSet(kinChainName)->getTCP()->getGlobalPose().block<3, 1>(0, 3))
99 if (isInputParameterSet(
"TcpTargetOrientation"))
101 framedOrientation = in.getTcpTargetOrientation();
102 auto globalOri = framedOrientation->toGlobal(robot);
106 robot->getRobotNodeSet(kinChainName)->getTCP()->getGlobalPose().block<3, 3>(0, 0));
108 tcpOrientationDistanceToTarget = currentOrientation.angularDistance(targetOrientation);
111 out.setTcpFinalPositionDistanceToTarget(tcpPositionDistanceToTarget);
112 out.setTcpFinalOrientationDistanceToTarget(tcpOrientationDistanceToTarget);
115 if (in.getDontMoveIfAlreadyClose() && tcpPositionDistanceToTarget < positionTolerance &&
116 tcpOrientationDistanceToTarget < orientationTolerance)
122 ARMARX_INFO <<
"Target not yet reached: position distance = " << tcpPositionDistanceToTarget
123 <<
" (Tolerance: " << positionTolerance
124 <<
"), orientation distance = " << tcpOrientationDistanceToTarget
125 <<
" (Tolerance: " << orientationTolerance <<
")";
126 emitTargetNotReached();