39 usingProxy(
"WorkingMemory");
45 workingMemoryProxy = getProxy<WorkingMemoryInterfacePrx>(
"WorkingMemory");
46 objectInstancesProxy = workingMemoryProxy->getObjectInstancesSegment();
52 return "OnTopPredicateProvider";
58 return PredicateInfo{
"ontop", 2};
64 PredicateInstanceList returnPIList;
66 const float maxDistanceXY = 50;
67 const float minDistanceZ = 40;
68 const float maxDistanceZ = 200;
71 std::map<std::string, armarx::FramedPositionPtr> objectPositions;
72 EntityIdList objectIds = objectInstancesProxy->getAllEntityIds();
74 for (EntityIdList::const_iterator it = objectIds.begin(); it != objectIds.end(); it++)
76 const EntityBasePtr entityBase = objectInstancesProxy->getEntityById(*it);
82 objectPositions[
object->getName()] =
object->getPosition();
86 ARMARX_WARNING <<
"Something went wrong when getting the object with id " << *it
87 <<
" from working memory";
92 for (std::map<std::string, armarx::FramedPositionPtr>::iterator i = objectPositions.begin();
93 i != objectPositions.end();
96 Eigen::Vector3f pos1 = i->second->toEigen();
97 ARMARX_IMPORTANT <<
"Object " << i->first <<
" at position " << i->second->toEigen();
98 std::map<std::string, armarx::FramedPositionPtr>::iterator j = i;
101 for (; j != objectPositions.end(); j++)
103 Eigen::Vector3f pos2 = j->second->toEigen();
106 if (sqrtf((pos1(0) - pos2(0)) * (pos1(0) - pos2(0)) +
107 (pos1(1) - pos2(1)) * (pos1(1) - pos2(1))) < maxDistanceXY)
110 if (fabs(pos1(2) - pos2(2)) > minDistanceZ &&
111 fabs(pos1(2) - pos2(2)) < maxDistanceZ)
113 if (pos1(2) > pos2(2))