29 #include <RobotAPI/interface/core/PoseBase.h>
32 #include <AffordanceKit/affordances/BimanualAlignedGraspAffordance.h>
33 #include <AffordanceKit/affordances/BimanualAlignedPlatformGraspAffordance.h>
34 #include <AffordanceKit/affordances/BimanualAlignedPrismaticGraspAffordance.h>
35 #include <AffordanceKit/affordances/BimanualGraspAffordance.h>
36 #include <AffordanceKit/affordances/BimanualLiftAffordance.h>
37 #include <AffordanceKit/affordances/BimanualOpposedGraspAffordance.h>
38 #include <AffordanceKit/affordances/BimanualOpposedPlatformGraspAffordance.h>
39 #include <AffordanceKit/affordances/BimanualOpposedPrismaticGraspAffordance.h>
40 #include <AffordanceKit/affordances/BimanualPlatformGraspAffordance.h>
41 #include <AffordanceKit/affordances/BimanualPrismaticGraspAffordance.h>
42 #include <AffordanceKit/affordances/BimanualTurnAffordance.h>
43 #include <AffordanceKit/affordances/GraspAffordance.h>
44 #include <AffordanceKit/affordances/HoldAffordance.h>
45 #include <AffordanceKit/affordances/LeanAffordance.h>
46 #include <AffordanceKit/affordances/LiftAffordance.h>
47 #include <AffordanceKit/affordances/PlatformGraspAffordance.h>
48 #include <AffordanceKit/affordances/PrismaticGraspAffordance.h>
49 #include <AffordanceKit/affordances/PullAffordance.h>
50 #include <AffordanceKit/affordances/PushAffordance.h>
51 #include <AffordanceKit/affordances/SupportAffordance.h>
52 #include <AffordanceKit/affordances/TurnAffordance.h>
64 const AffordanceKit::PrimitiveSetPtr& primitives,
65 const std::vector<AffordanceKit::UnimanualAffordancePtr>& unimanualAffordances,
66 const std::vector<AffordanceKit::BimanualAffordancePtr>& bimanualAffordances) :
67 AffordanceKit::Scene(primitives, unimanualAffordances, bimanualAffordances)
73 memoryx::AffordanceSegmentBasePrx& affordanceSegment)
75 auto t = IceUtil::Time::now();
78 memoryx::AffordanceBaseList affordances = affordanceSegment->getAffordances();
80 if (affordances.size() == 0)
87 long timestamp = (*affordances.begin())->getTime()->timestamp;
92 std::cout <<
"Creating a primitive set from memory took: "
93 << (IceUtil::Time::now() - t).toMilliSeconds() <<
" ms" << std::endl;
95 t = IceUtil::Time::now();
97 #pragma omp parallel for
98 for (
unsigned int i = 0; i < affordances.size(); i++)
100 AffordanceKit::UnimanualAffordancePtr uni;
101 AffordanceKit::BimanualAffordancePtr bi;
103 switch (affordances[i]->getType())
105 case memoryx::eAffordanceTypeGraspPlatform:
106 uni.reset(
new AffordanceKit::PlatformGraspAffordance());
109 case memoryx::eAffordanceTypeGraspPrismatic:
110 uni.reset(
new AffordanceKit::PrismaticGraspAffordance());
113 case memoryx::eAffordanceTypeGrasp:
114 uni.reset(
new AffordanceKit::GraspAffordance());
117 case memoryx::eAffordanceTypeSupport:
118 uni.reset(
new AffordanceKit::SupportAffordance());
121 case memoryx::eAffordanceTypeLean:
122 uni.reset(
new AffordanceKit::LeanAffordance());
125 case memoryx::eAffordanceTypeHold:
126 uni.reset(
new AffordanceKit::HoldAffordance());
129 case memoryx::eAffordanceTypeLift:
130 uni.reset(
new AffordanceKit::LiftAffordance());
133 case memoryx::eAffordanceTypeTurn:
134 uni.reset(
new AffordanceKit::TurnAffordance());
137 case memoryx::eAffordanceTypePush:
138 uni.reset(
new AffordanceKit::PushAffordance());
141 case memoryx::eAffordanceTypePull:
142 uni.reset(
new AffordanceKit::PullAffordance());
145 case memoryx::eAffordanceTypeBimanualGraspPlatform:
146 bi.reset(
new AffordanceKit::BimanualPlatformGraspAffordance());
149 case memoryx::eAffordanceTypeBimanualGraspPrismatic:
150 bi.reset(
new AffordanceKit::BimanualPrismaticGraspAffordance());
153 case memoryx::eAffordanceTypeBimanualGrasp:
154 bi.reset(
new AffordanceKit::BimanualGraspAffordance());
157 case memoryx::eAffordanceTypeBimanualGraspOpposed:
158 bi.reset(
new AffordanceKit::BimanualOpposedGraspAffordance());
161 case memoryx::eAffordanceTypeBimanualGraspAligned:
162 bi.reset(
new AffordanceKit::BimanualAlignedGraspAffordance());
165 case memoryx::eAffordanceTypeBimanualOpposedGraspPlatform:
166 bi.reset(
new AffordanceKit::BimanualOpposedPlatformGraspAffordance());
169 case memoryx::eAffordanceTypeBimanualOpposedGraspPrismatic:
170 bi.reset(
new AffordanceKit::BimanualOpposedPrismaticGraspAffordance());
173 case memoryx::eAffordanceTypeBimanualAlignedGraspPlatform:
174 bi.reset(
new AffordanceKit::BimanualAlignedPlatformGraspAffordance());
177 case memoryx::eAffordanceTypeBimanualAlignedGraspPrismatic:
178 bi.reset(
new AffordanceKit::BimanualAlignedPrismaticGraspAffordance());
181 case memoryx::eAffordanceTypeBimanualTurn:
182 bi.reset(
new AffordanceKit::BimanualTurnAffordance());
185 case memoryx::eAffordanceTypeBimanualLift:
186 bi.reset(
new AffordanceKit::BimanualLiftAffordance());
189 case memoryx::eAffordanceTypeBimanualSupport:
190 case memoryx::eAffordanceTypeBimanualLean:
191 case memoryx::eAffordanceTypeBimanualHold:
192 case memoryx::eAffordanceTypeBimanualPush:
193 case memoryx::eAffordanceTypeBimanualPull:
195 <<
" not yet included in AffordanceKitArmarX";
199 AffordanceKit::PrimitivePtr p =
200 primitives->getPrimitiveById(affordances[i]->getPrimitiveId());
203 std::cout <<
"Warning: Affordance relates to unknown primitive Id" << std::endl;
207 AffordanceKit::ThetaFunctionPtr theta(
new AffordanceKit::ThetaFunction());
208 (*theta)[AffordanceKit::PrimitivePair(p)] =
209 armarx::MatrixFloatPtr::dynamicCast(affordances[i]->getCertaintyFunction())
212 for (
auto& observation : affordances[i]->getObservations())
214 AffordanceKit::ThetaFunctionPtr theta(
new AffordanceKit::ThetaFunction());
215 (*theta)[AffordanceKit::PrimitivePair(p)] =
216 armarx::MatrixFloatPtr::dynamicCast(observation)->toEigen();
221 AffordanceKit::ObservationPtr(
new AffordanceKit::Observation(theta)));
226 AffordanceKit::ObservationPtr(
new AffordanceKit::Observation(theta)));
232 uni->setTheta(theta);
233 uni->setTimestamp(affordances[i]->getTime()->timestamp);
237 unimanualAffordances.push_back(uni);
238 AffordanceKit::Scene::affordances.push_back(uni);
244 bi->setTimestamp(affordances[i]->getTime()->timestamp);
248 bimanualAffordances.push_back(bi);
249 AffordanceKit::Scene::affordances.push_back(bi);
254 std::cout <<
"Creating a scene from memory took: "
255 << (IceUtil::Time::now() - t).toMilliSeconds() <<
" ms ("
256 << unimanualAffordances.size() <<
" unimanual affordances and "
257 << bimanualAffordances.size() <<
" bimanual affordances)" << std::endl;
262 const memoryx::EnvironmentalPrimitiveSegmentBasePrx& primitiveSegment,
263 const memoryx::AffordanceSegmentBasePrx& affordanceSegment)
const
270 std::vector<memoryx::EntityBasePtr> unimanualAffordanceList;
271 unimanualAffordanceList.reserve(unimanualAffordances.size());
273 for (
auto& primitive : *primitives)
276 for (std::vector<AffordanceKit::UnimanualAffordancePtr>::const_iterator
a =
277 unimanualAffordances.begin();
278 a < unimanualAffordances.end();
281 AffordanceKit::UnimanualAffordancePtr affordance = *
a;
282 if (!affordance->existsForPrimitive(primitive))
287 AffordanceKit::Belief
value;
294 a_mx->setPosition(
new armarx::Vector3(Eigen::Vector3f(pose.block<3, 1>(0, 3))));
295 a_mx->setPrimitiveId(primitive->getId());
296 a_mx->setValidationStatus(memoryx::eAffordanceNotValidated);
299 affordance->getTheta(AffordanceKit::PrimitivePair(primitive))));
301 memoryx::AffordanceObservationList observations;
302 for (
auto& observation : affordance->getObservations())
304 if (observation->existsForPrimitive(primitive))
306 observations.push_back(
310 a_mx->setObservations(observations);
312 unimanualAffordanceList.push_back(a_mx);
317 std::vector<memoryx::EntityBasePtr> bimanualAffordanceList;
318 bimanualAffordanceList.reserve(bimanualAffordances.size());
320 for (
auto& primitive : *primitives)
323 for (std::vector<AffordanceKit::BimanualAffordancePtr>::const_iterator
a =
324 bimanualAffordances.begin();
325 a < bimanualAffordances.end();
328 AffordanceKit::BimanualAffordancePtr affordance = *
a;
329 if (!affordance->existsForPrimitive(primitive))
334 AffordanceKit::Belief
value;
335 std::pair<Eigen::Matrix4f, Eigen::Matrix4f> poses =
336 affordance->getMostCertainPosesForPrimitive(primitive,
value);
337 if (poses.first.isZero())
345 std::cout << affordance->getName() << std::endl;
349 a_mx->setPrimitiveId(primitive->getId());
350 a_mx->setValidationStatus(memoryx::eAffordanceNotValidated);
353 affordance->getTheta(AffordanceKit::PrimitivePair(primitive, primitive))));
355 memoryx::AffordanceObservationList observations;
356 for (
auto& observation : affordance->getObservations())
358 if (observation->existsForPrimitive(primitive))
360 observations.push_back(
364 a_mx->setObservations(observations);
366 bimanualAffordanceList.push_back(a_mx);
371 affordanceSegment->clear();
372 affordanceSegment->upsertEntityList(unimanualAffordanceList);
373 affordanceSegment->upsertEntityList(bimanualAffordanceList);
389 affordanceTypes[
"Bi-G-Pl"] = memoryx::eAffordanceTypeBimanualGraspPlatform;
390 affordanceTypes[
"Bi-G-Pr"] = memoryx::eAffordanceTypeBimanualGraspPrismatic;
391 affordanceTypes[
"Bi-Op-G-Pl"] = memoryx::eAffordanceTypeBimanualOpposedGraspPlatform;
392 affordanceTypes[
"Bi-Op-G-Pr"] = memoryx::eAffordanceTypeBimanualOpposedGraspPrismatic;