27 #include <VirtualRobot/Grasping/Grasp.h>
28 #include <VirtualRobot/Grasping/GraspSet.h>
47 usingProxy(
"WorkingMemory");
48 usingProxy(
"PriorKnowledge");
49 usingProxy(
"RobotStateComponent");
51 offeringTopic(
"DebugDrawerUpdates");
57 getProxy(rsc,
"RobotStateComponent");
58 getProxy(wm,
"WorkingMemory");
59 getProxy(prior,
"PriorKnowledge");
60 objectInstances = wm->getObjectInstancesSegment();
61 objectClasses = prior->getObjectClassesSegment();
66 debugDrawerPrx = getTopic<armarx::DebugDrawerInterfacePrx>(
"DebugDrawerUpdates");
80 StringStringDictionary
81 SimpleGraspGenerator::getTcpGcpMapping()
83 StringStringDictionary mapping;
84 auto entries =
Split(getProperty<std::string>(
"TCPtoGCPMapping"),
";",
true,
true);
85 for (
auto& e : entries)
96 const Ice::Current&
c)
98 GeneratedGraspList result;
102 ObjectInstancePtr::dynamicCast(objectInstances->getEntityById(objectInstanceEntityId));
106 objectClasses->getEntityByName(instance->getMostProbableClass()));
108 <<
"no object class with name '" << instance->getMostProbableClass() <<
"' found ";
112 VirtualRobot::ManipulationObjectPtr mo = simoxWrapper->getManipulationObject();
116 auto objectFramedPose = instance->getPose();
117 ARMARX_INFO <<
"object Pose: " << objectFramedPose->output();
118 if (instance->hasLocalizationTimestamp())
122 robot, rsc, instance->getLocalizationTimestamp().toMicroSeconds());
123 ARMARX_INFO <<
"object has timestamp " << instance->getLocalizationTimestamp().toDateTime()
124 <<
" and frame " << objectFramedPose->frame <<
" with robot at "
125 << robot->getGlobalPose();
126 objectFramedPose->changeToGlobal(robot);
131 objectFramedPose->changeToGlobal(rsc->getSynchronizedRobot());
133 ARMARX_INFO <<
"global object Pose: " << objectFramedPose->output();
137 if (getProperty<bool>(
"EnableVisualization"))
139 debugDrawerPrx->setPoseVisu(
"GeneratedGrasps",
"ObjectPose", objectFramedPose);
148 auto tcpGcpMapping = getTcpGcpMapping();
149 std::string graspNameInfix = getProperty<std::string>(
"GraspNameInfix");
151 auto robotType = getProperty<std::string>(
"RobotType").getValue();
152 for (
const VirtualRobot::GraspSetPtr& gs : mo->getAllGraspSets())
154 if (gs->getRobotType() != robotType)
158 for (
const VirtualRobot::GraspPtr& g : gs->getGrasps())
160 ARMARX_INFO <<
"Found Grasp: " << g->getName() <<
" for eef: " << g->getEefName();
161 if (!
Contains(g->getName(), graspNameInfix,
true))
163 ARMARX_INFO <<
"grasp name does not contain infix " << graspNameInfix
167 if (!robot->hasEndEffector(g->getEefName()))
170 <<
" does not exist in this robot - skipping grasps";
173 auto globalTcpPose = g->getTcpPoseGlobal(globalObjectPose);
178 tcpGcpMapping.at(robot->getEndEffector(g->getEefName())->getTcp()->getName());
179 auto gcpNode = robot->getRobotNode(gcpName);
181 Eigen::Vector3f preposeOffsetGCPFrame = Eigen::Vector3f::Zero();
182 preposeOffsetGCPFrame(2) = -getProperty<float>(
"PreposeOffset").getValue();
183 Eigen::Vector3f preposeOffsetTCPFrame =
184 robot->getEndEffector(g->getEefName())
186 ->transformTo(gcpNode, preposeOffsetGCPFrame);
188 preposeOffsetGlobal.block<3, 1>(0, 3) +=
189 globalTcpPose.block<3, 3>(0, 0) * preposeOffsetTCPFrame;
190 ARMARX_INFO <<
" before up offset: " << preposeOffsetGlobal;
191 preposeOffsetGlobal(2, 3) += getProperty<float>(
"UpwardsOffset").getValue();
193 <<
VAROUT(preposeOffsetTCPFrame) <<
"\n"
194 <<
VAROUT(preposeOffsetGlobal) <<
VAROUT(globalTcpPose);
198 result.push_back({1.f, g->getEefName(), g->getName(), framedTcpPose, framedTcpPrepose});
206 ARMARX_WARNING <<
"No grasps defined for object class '" << instance->getMostProbableClass()
209 ARMARX_INFO <<
"Found " << result.size() <<
" grasps";
215 const Ice::Current&
c)
217 memoryx::ObjectInstanceBasePtr objectInstance =
218 wm->getObjectInstancesSegment()->getObjectInstanceByName(objectName);
219 std::string
id = objectInstance->getId();
221 return generateGrasps(
id);