68 getContext<MotionControlGroupStatechartContext>();
72 while (!isRunningTaskStopped())
83 VirtualRobot::RobotNodeSetPtr kinematicChain =
84 robot->getRobotNodeSet(in.getKinematicChainName());
88 ARMARX_WARNING <<
"No kinematicChain with name " << in.getKinematicChainName();
94 if (in.isVirtualPrismaticJointNameSet())
96 tcpName = in.getVirtualPrismaticJointName();
100 tcpName = kinematicChain->getTCP()->getName();
103 VirtualRobot::RobotNodePrismaticPtr virtualJoint =
104 std::dynamic_pointer_cast<VirtualRobot::RobotNodePrismatic>(
105 robot->getRobotNode(tcpName));
109 ARMARX_WARNING <<
"No virtualJoint with name '" << tcpName <<
"'";
113 VirtualRobot::GazeIK ikSolver(kinematicChain, virtualJoint);
114 ikSolver.setup(30, 50, 30);
115 ikSolver.enableJointLimitAvoidance(
true);
117 Eigen::Matrix3f m = Eigen::Matrix3f::Identity();
122 targetPosition, targetOrientation, targetPosition->frame, targetPosition->agent);
124 Eigen::Matrix4f goalInRoot = target->toRootEigen(robot);
125 Eigen::Vector3f targetPosRootFrame = goalInRoot.block<3, 1>(0, 3);
126 Eigen::Matrix4f globalPose = target->toGlobalEigen(robot);
132 ARMARX_INFO <<
"Calculating IK for target position in root frame " << targetPosRootFrame;
134 if (!ikSolver.solve(globalPose.block<3, 1>(0, 3)))
142 std::map<std::string, float> targetJointValues;
144 for (
int i = 0; i < (
signed int)kinematicChain->getSize(); i++)
146 if (kinematicChain->getNode(i)->getName().compare(tcpName) != 0)
148 targetJointValues[kinematicChain->getNode(i)->getName()] =
149 kinematicChain->getNode(i)->getJointValue();
150 ARMARX_INFO <<
" joint: " << kinematicChain->getNode(i)->getName()
151 <<
" value: " << kinematicChain->getNode(i)->getJointValue();
155 ARMARX_INFO <<
"number of joints to be set: " << targetJointValues.size();
156 ARMARX_INFO <<
"setting output: targetJointValues";
157 out.setTargetJointValues(targetJointValues);
158 emitCalculationDone();
custom implementation of the StatechartContext for a statechart
DebugDrawerInterfacePrx getDebugDrawerTopicProxy()
RobotStateComponentInterfacePrx getRobotStateComponent()
const RobotPoolPtr & getRobotPool() const
Robot Pool containing collision robots.