49 getContext<CoupledInteractionGroupStatechartContext>();
57 Vector3Ptr curVelPlatform = in.getCurrentPlatformVelocity();
61 Eigen::Vector3f targetLeftTcp;
62 Eigen::Vector3f targetRightTcp;
63 Eigen::Vector3f platformPose;
64 Eigen::Matrix4f relativeTargetPose;
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();
72 Eigen::Matrix4f tableTargetPose = Eigen::Matrix4f::Identity();
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 =
97 (platformPose(0) - tableTarget->x) * (platformPose(0) - tableTarget->x);
98 remainingDistance += (platformPose(1) - tableTarget->y) * (platformPose(1) - tableTarget->y);
99 remainingDistance = sqrt(remainingDistance);
105 Eigen::Vector3f relativeTarget;
106 float angle = tableTarget->z - platformPose(2);
123 std::max(std::min((relativeTargetPose(0, 3)), maxVelocityTrans), -maxVelocityTrans);
125 std::max(std::min((relativeTargetPose(1, 3)), maxVelocityTrans), -maxVelocityTrans);
126 relativeTarget(2) = std::max(std::min((
angle), maxVelocityRot), -maxVelocityRot);
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);
158 ARMARX_INFO <<
"Current platform Pose " << platformPose(0) <<
" " << platformPose(1);
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);
ChannelRefPtr getChannelRef(const std::string &observerName, const std::string &channelName) override