73 ARMARX_INFO <<
"Using embodiment '" << embodimentName <<
"'";
74 if (embodimentName ==
"Armar3")
76 embodiment.reset(
new AffordanceKit::Armar3Embodiment());
78 else if (embodimentName ==
"Armar4")
80 embodiment.reset(
new AffordanceKit::Armar4Embodiment());
82 else if (embodimentName ==
"WalkMan")
84 embodiment.reset(
new AffordanceKit::WalkManEmbodiment());
89 <<
"' specified. Affordance extraction will not work properly.";
90 embodiment.reset(
new AffordanceKit::Embodiment());
123 new AffordanceKit::BimanualOpposedPlatformGraspAffordance(
126 new AffordanceKit::BimanualOpposedPrismaticGraspAffordance(
129 new AffordanceKit::BimanualAlignedPlatformGraspAffordance(
132 new AffordanceKit::BimanualAlignedPrismaticGraspAffordance(
137 new AffordanceKit::BimanualLiftAffordance(
embodiment,
154 memoryx::eAffordanceTypeBimanualGraspPlatform;
156 memoryx::eAffordanceTypeBimanualGraspPrismatic;
159 memoryx::eAffordanceTypeBimanualGraspOpposed;
161 memoryx::eAffordanceTypeBimanualGraspAligned;
163 memoryx::eAffordanceTypeBimanualOpposedGraspPlatform;
165 memoryx::eAffordanceTypeBimanualOpposedGraspPrismatic;
167 memoryx::eAffordanceTypeBimanualAlignedGraspPlatform;
169 memoryx::eAffordanceTypeBimanualAlignedGraspPrismatic;
200 std::string affordanceRestrictionString =
202 if (affordanceRestrictionString !=
"")
204 auto affordanceRestrictionList =
Split(affordanceRestrictionString,
",");
206 affordanceRestrictionList.end());
209 std::vector<std::string> affordances;
215 affordances.push_back(a->getName());
224 affordances.push_back(a->getName());
228 ARMARX_INFO <<
"Configured affordances: " << affordances;
291 const std::string& affordance,
292 const std::string& primitiveId,
297 const Ice::Current&
c)
302 Eigen::Matrix4f pose = PosePtr::dynamicCast(endEffectorPose)->toEigen();
311 ARMARX_INFO <<
"Adding Experiment(primitive=" << primitiveId <<
", affordance=" << affordance
312 <<
", result=" << result <<
", certainty=" << certainty
313 <<
", sigma_pos=" << sigma_pos <<
", sigma_rot=" << sigma_rot <<
")";
320 if (a->getName() == affordance && a->existsForPrimitive(primitive))
322 a->addObservation(AffordanceKit::ObservationPtr(
new AffordanceKit::Observation(
323 primitive, pose, result, certainty, sigma_pos, sigma_rot)));
330 if (a->getName() == affordance && a->existsForPrimitive(primitive))
332 a->addObservation(AffordanceKit::ObservationPtr(
new AffordanceKit::Observation(
333 primitive, pose, result, certainty, sigma_pos, sigma_rot)));
340 ARMARX_WARNING <<
"Discarding experiment, because affordance or primitive were not found.";
348 <<
" affordances updated and reported";
377 AffordanceKit::PrimitiveSetPtr primitives;
400 long originalTimestamp = 0;
401 if (primitives->size() > 0)
403 originalTimestamp = (*primitives->begin())->getTimestamp();
405 IceUtil::Time ts = IceUtil::Time::microSeconds(originalTimestamp);
406 std::string timestampString = ts.toDateTime().substr(ts.toDateTime().find(
' ') + 1);
408 ARMARX_INFO <<
"Processing new set of primitives (timestamp: " << timestampString <<
")";
413 ARMARX_INFO <<
"Primitives older than " << timestampString <<
" removed";
417 int numOrientationalSteps =
getProperty<int>(
"NumOrientationalSamplings").getValue();
439 bool samplingNeeded =
true;
440 for (
auto& primitive : *primitives)
442 if (primitive->getSamplingSize() > 0)
444 samplingNeeded =
false;
451 ARMARX_INFO <<
"Ignoring primitive " << primitive->getId() <<
", sampling size "
452 << primitive->getSamplingSize() <<
" is too large";
453 primitive->resetSampling();
457 IceUtil::Time t = IceUtil::Time::now();
462 << (IceUtil::Time::now() - t).toMilliSeconds() <<
" ms";
474 IceUtil::Time t = IceUtil::Time::now();
475 a->evaluatePrimitiveSet(primitives);
476 ARMARX_INFO <<
"Evaluation of affordance '" << a->getName() <<
"' took "
477 << (IceUtil::Time::now() - t).toMilliSeconds() <<
" ms";
486 IceUtil::Time t = IceUtil::Time::now();
487 a->evaluatePrimitiveSet(primitives);
488 ARMARX_INFO <<
"Evaluation of affordance '" << a->getName() <<
"' took "
489 << (IceUtil::Time::now() - t).toMilliSeconds() <<
" ms";
493 ARMARX_INFO <<
"Total time for affordance extraction: "
494 << (IceUtil::Time::now() - t).toMilliSeconds() <<
" ms";
501 ARMARX_INFO <<
"Affordance extraction interrupted (pipeline step disabled)";
506 t = IceUtil::Time::now();
510 std::string affordanceName =
"";
511 float uncertainty = s.getTotalUncertainty(affordanceName);
512 float positiveDecisionRate = s.getPositiveDecisionRate(affordanceName);
513 float negativeDecisionRate = s.getNegativeDecisionRate(affordanceName);
514 float conflict = s.getTotalConflict(affordanceName);
517 valueMap[
"uncertainty"] =
new Variant(uncertainty);
518 valueMap[
"positiveDecisionRate"] =
new Variant(positiveDecisionRate);
519 valueMap[
"negativeDecisionRate"] =
new Variant(negativeDecisionRate);
520 valueMap[
"conflict"] =
new Variant(conflict);
525 <<
" new affordances written to memory: "
526 << (IceUtil::Time::now() - t).toMilliSeconds() <<
" ms";
535 <<
" affordances extracted and reported";