31 using namespace CoupledInteractionGroup;
34 CalculateTargetRobotPose::SubClassRegistry
49 getContext<CoupledInteractionGroupStatechartContext>();
57 Vector3Ptr curVelPlatform = in.getCurrentPlatformVelocity();
61 Eigen::Vector3f targetLeftTcp;
62 Eigen::Vector3f targetRightTcp;
65 Eigen::Vector3f initPlatformPose = in.getInitialPlatformPose()->toEigen();
69 platformPose(0) = poseRef->getDataField(
"positionX")->getFloat();
70 platformPose(1) = poseRef->getDataField(
"positionY")->getFloat();
71 platformPose(2) = poseRef->getDataField(
"rotation")->getFloat();
73 tableTargetPose(0, 3) = tableTarget->x;
74 tableTargetPose(1, 3) = tableTarget->y;
75 tableTargetPose(0, 0) = cos(tableTarget->z);
76 tableTargetPose(0, 1) = -sin(tableTarget->z);
77 tableTargetPose(1, 1) = cos(tableTarget->z);
78 tableTargetPose(1, 0) = -sin(tableTarget->z);
80 ARMARX_INFO <<
"Table Global Pose " << tableTargetPose(0, 3) <<
" " << tableTargetPose(1, 3);
81 tableGlobalPose->changeFrame(context->
getRobot(),
82 context->
getRobot()->getRootNode()->getName());
84 relativeTargetPose = tableGlobalPose->toEigen();
85 ARMARX_INFO <<
"Table Base Pose " << relativeTargetPose(0, 3) <<
" "
86 << relativeTargetPose(1, 3);
87 float maxVelocityTrans = 100.0;
88 float maxVelocityRot = 0.2;
89 float minVelocityTrans = 0.0;
90 float minVelocityRot = 0.0;
92 (initPlatformPose(0) - tableTarget->x) * (initPlatformPose(0) - tableTarget->x);
94 (initPlatformPose(1) - tableTarget->y) * (initPlatformPose(1) - tableTarget->y);
95 finalDistance =
sqrt(finalDistance);
96 float remainingDistance =
99 remainingDistance =
sqrt(remainingDistance);
105 Eigen::Vector3f relativeTarget;
123 std::max(
std::min((relativeTargetPose(0, 3)), maxVelocityTrans), -maxVelocityTrans);
125 std::max(
std::min((relativeTargetPose(1, 3)), maxVelocityTrans), -maxVelocityTrans);
128 if (relativeTarget(0) < minVelocityTrans && relativeTarget(0) > 0)
130 relativeTarget(0) = minVelocityTrans;
132 else if (relativeTarget(0) > -minVelocityTrans && relativeTarget(0) < 0)
134 relativeTarget(0) = -minVelocityTrans;
137 if (relativeTarget(1) < minVelocityTrans && relativeTarget(1) > 0)
139 relativeTarget(1) = minVelocityTrans;
141 else if (relativeTarget(1) > -minVelocityTrans && relativeTarget(1) < 0)
143 relativeTarget(1) = -minVelocityTrans;
146 if (relativeTarget(2) < minVelocityRot && relativeTarget(2) > 0)
148 relativeTarget(2) = minVelocityRot;
150 else if (relativeTarget(2) > -minVelocityRot && relativeTarget(2) < 0)
152 relativeTarget(2) = -minVelocityRot;
156 ARMARX_INFO <<
"Rotating around " << relativeTarget(2) <<
" " << remainingDistance <<
" "
157 << finalDistance <<
" " << tableTarget->z <<
" " <<
platformPose(2);
159 ARMARX_INFO <<
"Current platform Pose " << relativeTargetPose(0, 3) <<
" "
160 << relativeTargetPose(1, 3);
161 Eigen::Vector3f zeroVec;
162 zeroVec << 0.0, 0.0, 0.0;
165 platformPrx->move(0, 30, 0);
206 return "CalculateTargetRobotPose";