23 #include <VirtualRobot/LinkedCoordinate.h>
24 #include <VirtualRobot/math/Helpers.h>
38 #include <MemoryX/interface/components/WorkingMemoryInterface.h>
51 classSegmentName(
"objectClasses"),
52 instanceSegmentName(
"objectInstances"),
53 agentInstancesSegmentName(
"agentInstances"),
54 referenceFrameName(
"Platform")
60 std::string instanceSegmentName)
63 this->classSegmentName = classSegmentName;
64 this->instanceSegmentName = instanceSegmentName;
70 this->referenceFrameName = referenceFrameName;
80 objectClassSegment = getSegment<ObjectClassMemorySegmentBase>(classSegmentName);
81 objectInstanceSegment = getSegment<ObjectInstanceMemorySegment>(instanceSegmentName);
82 agentInstancesSegment = getSegment<AgentInstancesSegment>(agentInstancesSegmentName);
88 usingProxy(getProperty<std::string>(
"RobotStateComponentName").getValue());
89 usingProxy(getProperty<std::string>(
"LongtermMemoryName").getValue());
92 if (!getProperty<std::string>(
"RobotStateObserverName").getValue().
empty())
94 usingProxy(getProperty<std::string>(
"RobotStateObserverName").getValue());
97 if (!getProperty<std::string>(
"CommonPlacesLearnerName").getValue().
empty())
99 usingProxy(getProperty<std::string>(
"CommonPlacesLearnerName").getValue());
102 workingMemoryName = getProperty<std::string>(
"WorkingMemoryName").getValue();
103 checkFieldOfView = getProperty<bool>(
"CheckFieldOfView").getValue();
104 cameraOpeningAngle = getProperty<float>(
"CameraOpeningAngle").getValue();
105 robotNodeNameLeftCamera = getProperty<std::string>(
"RobotNodeNameLeftCamera").getValue();
106 robotNodeNameRightCamera = getProperty<std::string>(
"RobotNodeNameRightCamera").getValue();
107 handNodeNameLeft = getProperty<std::string>(
"HandNodeNameLeft").getValue();
108 handNodeNameRight = getProperty<std::string>(
"HandNodeNameRight").getValue();
109 headMotionVelocityLimit = getProperty<float>(
"HeadMotionVelocityLimit").getValue();
111 if (checkFieldOfView)
113 ARMARX_IMPORTANT <<
"Objects will only be localized when they are assumed to be in the "
119 <<
"Objects will always be localized, even when they are not in the field of view";
126 robotStateInterfacePrx = getProxy<armarx::RobotStateComponentInterfacePrx>(
127 getProperty<std::string>(
"RobotStateComponentName").getValue());
128 longtermMemoryPrx = getProxy<memoryx::LongtermMemoryInterfacePrx>(
129 getProperty<std::string>(
"LongtermMemoryName").getValue());
130 auto robot = robotStateInterfacePrx->getSynchronizedRobot();
131 referenceFrameName = robot->getRootNode()->getName();
132 agentName = robot->getName();
134 if (!getProperty<std::string>(
"RobotStateObserverName").getValue().
empty())
136 robotStateObserverProxy = getProxy<armarx::ObserverInterfacePrx>(
137 getProperty<std::string>(
"RobotStateObserverName").getValue());
139 getProperty<std::string>(
"RobotStateObserverName").getValue(),
141 getProperty<std::string>(
"GazeTCPName").getValue());
144 if (!getProperty<std::string>(
"CommonPlacesLearnerName").getValue().
empty())
146 commonPlacesLearnerProxy = getProxy<memoryx::CommonPlacesLearnerInterfacePrx>(
147 getProperty<std::string>(
"CommonPlacesLearnerName").getValue());
153 this, &ObjectLocalizationMemoryUpdater::runJobs, 10,
false,
"",
false);
154 localizationTask->start();
160 if (localizationTask)
162 localizationTask->stop();
171 const EntityBasePtr& entityOld,
172 const EntityBasePtr& entityNew,
176 <<
"ObjectLocalizationMemoryUpdater::reportEntityUpdated()";
179 if (segmentName != classSegmentName)
185 ObjectClassPtr objectClassOld = ObjectClassPtr::dynamicCast(entityOld);
186 ObjectClassPtr objectClassNew = ObjectClassPtr::dynamicCast(entityNew);
188 if (!objectClassOld || !objectClassNew)
198 LocalizationQueryList queriesOld = recognitionWrapperOld->getLocalizationQueries();
199 LocalizationQueryList queriesNew = recognitionWrappeNew->getLocalizationQueries();
201 std::unique_lock lock(jobsMutex);
204 LocalizationQueryList queriesCreated = getMissingQueries(queriesOld, queriesNew);
206 for (LocalizationQueryList::iterator iter = queriesCreated.begin();
207 iter != queriesCreated.end();
211 ARMARX_INFO <<
"Adding new query " << query->queryName;
214 std::vector<LocalizationJobPtr> createdjobs = query->createJobs(objectClassSegment);
219 << job->getRecognitionMethod();
222 std::move(createdjobs.begin(), createdjobs.end(), std::back_inserter(jobs));
226 LocalizationQueryList queriesRemoved = getMissingQueries(queriesNew, queriesOld);
228 for (LocalizationQueryList::iterator iter = queriesRemoved.begin();
229 iter != queriesRemoved.end();
235 std::vector<LocalizationJobPtr>::iterator iterJobs = jobs.begin();
237 while (iterJobs != jobs.end())
239 if ((*iterJobs)->getQueryName() == query->queryName)
241 iterJobs = jobs.erase(iterJobs);
249 ARMARX_INFO <<
"removed query " << query->queryName;
257 ObjectLocalizationMemoryUpdater::predictPoses()
259 std::unique_lock lock(predictionMutex);
261 EntityIdList allEntityIDs = objectInstanceSegment->getAllEntityIds();
263 for (EntityIdList::iterator it = allEntityIDs.begin(); it != allEntityIDs.end(); it++)
265 auto entity = objectInstanceSegment->getEntityById(*it);
281 << objectInstance->getName()
282 <<
" motion model: " << objectInstance->getMotionModel()->ice_id();
285 armarx::LinkedPosePtr::dynamicCast(motionModel->getPredictedPose());
286 MultivariateNormalDistributionBasePtr positionUncertainty =
287 motionModel->getUncertainty();
290 <<
"predicted pose: " << predictedPose->toEigen();
292 <<
deactivateSpam(1, objectInstance->getName()) <<
"last localization: "
293 << objectInstance->getMotionModel()->getPoseAtLastLocalisation()->output();
295 if (positionUncertainty)
298 <<
"positionUncertainty->getDimensions(): "
299 << positionUncertainty->getDimensions();
303 <<
"uncertaintyGaussian: " << uncertaintyGaussian.
getCovariance();
306 if (predictedPose->frame.empty())
308 ARMARX_VERBOSE <<
"predicting pose of " << objectInstance->getName()
309 <<
" position: " << predictedPose->position->x <<
" "
310 << predictedPose->position->y <<
" "
311 << predictedPose->position->z
312 <<
" frame: " << predictedPose->frame;
317 predictedPose->toEigen(), predictedPose->frame, predictedPose->agent));
319 predictedPose->toEigen(), predictedPose->frame, predictedPose->agent));
321 if (positionUncertainty)
323 objectInstance->setPositionUncertainty(positionUncertainty);
326 objectInstance->setClass(
327 objectInstance->getMostProbableClass(),
328 objectInstance->getClassProbability(objectInstance->getMostProbableClass()));
329 objectInstance->setExistenceCertainty(objectInstance->getExistenceCertainty());
331 if (objectInstanceSegment->getListenerProxy() &&
332 objectInstanceSegment->hasEntityById(objectInstance->getId(),
335 auto reportClone = objectInstance->clone();
336 objectInstanceSegment->getListenerProxy()->reportEntityUpdated(
337 objectInstanceSegment->getSegmentName(), reportClone, reportClone);
350 <<
"Predicting poses for object '" << entity->getName()
357 ObjectLocalizationMemoryUpdater::scheduleJobs()
362 std::unique_lock lock(jobsMutex);
365 std::multimap<std::string, LocalizationJobPtr> recognizerJobs;
366 std::set<std::string> recognizerNames;
368 bool aJobIsWaiting =
false;
374 recognizerJobs.insert(std::make_pair(job->getRecognitionMethod(), job));
375 recognizerNames.insert(job->getRecognitionMethod());
377 aJobIsWaiting =
true;
386 <<
"localizer jobs that should be started: " << recognizerNames
387 <<
" (number of jobs = " << jobs.size() <<
")";
395 Eigen::Vector3f tcpVelocity;
396 tcpVelocity.setZero();
398 if (robotStateObserverProxy)
400 if (robotStateObserverProxy->existsDataField(
401 headTCPVelocityDatafieldID->getChannelName(),
402 headTCPVelocityDatafieldID->getDataFieldName()))
405 armarx::VariantPtr::dynamicCast(
406 robotStateObserverProxy->getDataField(headTCPVelocityDatafieldID))
415 if (tcpVelocity.norm() > headMotionVelocityLimit)
418 <<
"Not localizing anything because head velocity is too high: "
419 << tcpVelocity.norm();
424 for (
const auto& recognitionMethod : recognizerNames)
428 if (isRecognitionMethodRunning(recognitionMethod))
431 << recognitionMethod <<
" is busy";
438 std::pair<std::map<std::string, LocalizationJobPtr>::iterator,
439 std::map<std::string, LocalizationJobPtr>::iterator>
440 elements = recognizerJobs.equal_range(recognitionMethod);
441 std::map<std::string, LocalizationJobPtr>::iterator iterElements = elements.first;
444 new LocalizationJobContainer(recognitionMethod);
446 std::unique_lock lockPrediction(predictionMutex, std::defer_lock);
448 if (lockPrediction.try_lock())
450 while (iterElements != elements.second)
455 std::vector<std::string> classNames = job->getAllClassNames();
456 std::vector<std::string> classNamesToBeLocalized;
458 for (
size_t i = 0; i < classNames.size(); i++)
460 ObjectInstanceList instances =
461 objectInstanceSegment->getObjectInstancesByClass(classNames.at(i));
463 if (instances.size() != 0)
465 bool atLeastOneInstanceIsVisibleOrLost =
false;
467 for (
size_t j = 0; j < instances.size(); j++)
470 ObjectInstancePtr::dynamicCast(instances.at(j));
471 float existenceCertainty = instance->getExistenceCertainty();
474 if (checkObjectVisibility(pos) || existenceCertainty < 0.5f)
476 atLeastOneInstanceIsVisibleOrLost =
true;
480 if (atLeastOneInstanceIsVisibleOrLost)
482 for (
const auto& instance : instances)
484 if (ObjectInstancePtr::dynamicCast(instance)
487 ObjectInstancePtr::dynamicCast(instance)
489 ->savePredictedPoseAtStartOfCurrentLocalization();
493 classNamesToBeLocalized.push_back(classNames.at(i));
499 <<
"Not trying to localize " << classNames.at(i)
500 <<
" because it is currently not in the field of view";
506 classNamesToBeLocalized.push_back(classNames.at(i));
511 if (classNamesToBeLocalized.size() > 0)
513 job->setClassNamesToBeLocalized(classNamesToBeLocalized);
514 container->addJob(job);
525 startLocalization(container);
536 ARMARX_ERROR <<
"predicting poses caused an exception!";
542 ObjectLocalizationMemoryUpdater::runJobs()
548 catch (std::exception&)
556 ObjectLocalizationMemoryUpdater::startLocalization(
559 ObjectClassNameList objectClassNames = jobContainer->getClassNamesUnique();
560 std::string recognitionMethod = jobContainer->getRecognitionMethod();
562 ObjectLocalizerInterfacePrx proxy = getProxyCached(recognitionMethod);
567 <<
"No running proxy found for recognition method: " << recognitionMethod;
569 finishJobContainer(jobContainer);
576 auto robotName = robotStateInterfacePrx->getSynchronizedRobot()->getName();
578 robotStateInterfacePrx->getRobotSnapshot(robotName);
579 jobContainer->setRobotState(sharedRobotProxy);
583 robotPose = armarx::PosePtr::dynamicCast(sharedRobotProxy->getGlobalPose());
586 jobContainer->setRobotPose(robotPose);
590 setRecognitionMethodRunningState(recognitionMethod,
true);
592 jobContainer->startJobs();
594 <<
"starting localization of " << objectClassNames <<
" with "
595 << jobContainer->getRecognitionMethod();
596 proxy->begin_localizeObjectClasses(
598 Ice::newCallback(
this, &ObjectLocalizationMemoryUpdater::localizationFinished),
603 ObjectLocalizationMemoryUpdater::isRecognitionMethodRunning(
604 const std::string& recognitionMethod)
606 std::unique_lock lock(recognitionMethodStateMutex);
607 std::map<std::string, bool>::iterator iter =
608 recognitionMethodRunning.find(recognitionMethod);
610 if (iter == recognitionMethodRunning.end())
615 bool result = recognitionMethodRunning[recognitionMethod];
620 ObjectLocalizationMemoryUpdater::setRecognitionMethodRunningState(
621 const std::string& recognitionMethod,
624 std::unique_lock lock(recognitionMethodStateMutex);
626 << recognitionMethod <<
" to " <<
running;
627 recognitionMethodRunning[recognitionMethod] =
running;
634 jobContainer->finishJobs();
635 setRecognitionMethodRunningState(jobContainer->getRecognitionMethod(),
false);
637 updateQueries(jobContainer);
641 ObjectLocalizationMemoryUpdater::localizationFinished(
const Ice::AsyncResultPtr& r)
644 ObjectLocalizerInterfacePrx objectLocalizer =
645 ObjectLocalizerInterfacePrx::uncheckedCast(r->getProxy());
647 LocalizationJobContainerPtr::dynamicCast(r->getCookie());
648 ObjectLocalizationResultList resultList;
652 resultList = objectLocalizer->end_localizeObjectClasses(r);
655 if (jobContainer->getClassNamesUnique().empty())
657 ARMARX_WARNING <<
"There is a bug: Returned from localization, but list of class "
659 finishJobContainer(jobContainer);
662 std::string allObjectNames;
664 for (
size_t i = 0; i < jobContainer->getClassNamesUnique().size(); i++)
666 allObjectNames.append(jobContainer->getClassNamesUnique().at(i));
667 allObjectNames.append(
" ");
671 <<
" returned - number of detected instances: " << resultList.size();
674 if (resultList.empty())
677 if (checkFieldOfView)
679 ObjectInstanceList instances = objectInstanceSegment->getObjectInstancesByClass(
680 jobContainer->getClassNamesUnique().at(0));
682 if (instances.size() == 1)
685 ObjectInstancePtr::dynamicCast(instances.at(0));
686 float oldExistenceCertainty = instance->getExistenceCertainty();
687 instance->setExistenceCertainty(
689 "ExistenceCertaintyReductionFactorWhenLocalizationFailed")
691 oldExistenceCertainty);
695 <<
" not found in view altough it should be there - decreasing "
696 "existence certainty to: "
697 << instance->getExistenceCertainty();
698 if (objectInstanceSegment->getListenerProxy() &&
699 objectInstanceSegment->hasEntityById(instance->getId(),
702 auto reportClone = instance->clone();
703 objectInstanceSegment->getListenerProxy()->reportEntityUpdated(
704 objectInstanceSegment->getSegmentName(), reportClone, reportClone);
707 else if (instances.size() > 1)
710 "for the case that multiple instances exist";
717 const std::string rootNodeName =
718 jobContainer->getRobotState()->getRootNode()->getName();
719 for (
const ObjectLocalizationResult& result : resultList)
722 if (result.objectClassName.empty())
724 ARMARX_ERROR <<
"Object name in localization result is empty";
729 if (result.timeStamp)
732 armarx::TimestampVariantPtr::dynamicCast(result.timeStamp);
735 << (now - timestamp->toTime()).toMilliSecondsDouble()
737 robotState = robotStateInterfacePrx->getRobotSnapshotAtTimestamp(
738 timestamp->getTimestamp());
742 <<
"getRobotSnapshotAtTimestamp returned NULL, using "
743 "current robot state "
744 <<
"(possibly a bug in the simulation, time server, or "
746 robotState = robotStateInterfacePrx->getRobotSnapshot(
"");
748 robotPose = armarx::PosePtr::dynamicCast(robotState->getGlobalPose());
749 jobContainer->setRobotState(robotState);
750 jobContainer->setRobotPose(robotPose);
755 <<
"Recognition method "
756 << jobContainer->getRecognitionMethod()
757 <<
" did not provide a timestamp - using robotstate from "
758 "before starting recognition";
761 <<
"Object: " << result.objectClassName;
765 result.instanceName.empty() ? result.objectClassName : result.instanceName);
766 update->setLocalizationTimestamp(result.timeStamp);
769 armarx::FramedPositionPtr::dynamicCast(result.position);
771 armarx::FramedOrientationPtr::dynamicCast(result.orientation);
773 Eigen::Vector3f positionBeforeFrameChange = measuredPosition->toEigen();
774 measuredPosition->changeFrame(robotState, rootNodeName);
775 measuredOrientation->changeFrame(robotState, rootNodeName);
776 Eigen::Vector3f positionTranslation =
777 measuredPosition->toEigen() - positionBeforeFrameChange;
779 measuredPosition->toEigen(), measuredOrientation->toEigen());
782 << result.objectClassName
783 <<
"New pose from localizer: " << measuredPose
784 <<
" (in reference frame " << measuredPosition->frame <<
")";
788 measuredPose, rootNodeName, measuredPosition->agent);
790 measuredPose, rootNodeName, measuredPosition->agent);
794 update->setPosition(posInRef);
795 update->setOrientation(orientationInRef);
800 if (
q->className == result.objectClassName)
802 priority =
q->priority;
805 update->setLocalizationPriority(priority);
812 MultivariateNormalDistributionBasePtr uncertaintyInRef = result.positionNoise;
813 auto mean = uncertaintyInRef->getMean();
814 if (
mean.size() == 3)
816 Eigen::Vector3f meanEigen(
mean.at(0),
mean.at(1),
mean.at(2));
817 meanEigen += positionTranslation;
818 uncertaintyInRef->setMean(
821 update->setPositionUncertainty(uncertaintyInRef);
824 update->addClass(result.objectClassName, result.recognitionCertainty);
828 << result.objectClassName
829 <<
": existence certainty: " << result.recognitionCertainty;
830 update->setExistenceCertainty(result.recognitionCertainty);
834 objectInstanceSegment->getCorrespondingObjectInstance(
update));
837 if (!correspondingEntity)
841 if (!
update->getMotionModel())
846 update->getMotionModel()->setPoseAtLastLocalisation(
847 linkedPose, robotPose, uncertaintyInRef);
848 objectInstanceSegment->addEntity(
update);
854 std::unique_lock lock(predictionMutex);
856 if (!correspondingEntity->getMotionModel())
859 <<
"Corresponding entity has no motion model, creating a new one";
860 setMotionModel(correspondingEntity);
861 correspondingEntity->getMotionModel()->setPoseAtLastLocalisation(
862 linkedPose, robotPose, uncertaintyInRef);
866 ObjectInstancePtr::dynamicCast(correspondingEntity)->getMotionModel();
872 objectInstanceSegment->updateEntityInternal(
873 correspondingEntity->getId(),
update);
876 << *
update->getOrientation();
880 objectInstanceSegment->getEntityById(correspondingEntity->getId()));
885 <<
" obj Pose from memory: " << objectInstance->getPose()->output()
886 <<
" robot global pose: "
887 << jobContainer->getRobotState()->getGlobalPose()->output();
888 objectInstance->setLocalizationTimestamp(result.timeStamp);
892 <<
"Ori after fusion: "
893 << *objectInstance->getOrientation();
895 motionModel->setPoseAtLastLocalisation(
898 objectInstance->getPositionUncertainty());
900 armarx::LinkedPosePtr::dynamicCast(motionModel->getPredictedPose());
902 predictedPose->output());
903 objectInstance->setPose(predictedPose);
908 <<
update->getName() <<
" set";
912 if (commonPlacesLearnerProxy)
915 <<
" to train common places learner";
918 commonPlacesLearnerProxy->learnFromObject(
update);
929 catch (std::exception& e)
932 <<
"Localization failed of type " << jobContainer->getRecognitionMethod()
933 <<
"\nReason: " << e.what();
938 finishJobContainer(jobContainer);
944 std::vector<LocalizationQueryPtr> queries = jobContainer->getQueries();
946 for (std::vector<LocalizationQueryPtr>::iterator iter = queries.begin();
947 iter != queries.end();
952 if (query->getFinished())
955 EntityBasePtr entity = objectClassSegment->getEntityByName(
956 query->className, Ice::emptyCurrent);
965 objectClass->addWrapper(
new EntityWrappers::ObjectRecognitionWrapper());
966 recognitionWrapper->updateLocalizationQuery(query->queryName, query);
970 <<
" with state " << query->getFinished();
973 objectClassSegment->updateClass(query->className, objectClass);
979 ObjectLocalizerInterfacePrx
980 ObjectLocalizationMemoryUpdater::getProxyCached(
const std::string& recognitionMethod)
983 std::map<std::string, ObjectLocalizerInterfacePrx>::iterator iter;
984 iter = knownObjectProxies.find(recognitionMethod);
986 if (iter != knownObjectProxies.end())
993 ObjectLocalizerInterfacePrx objectLocalizerProxy;
997 objectLocalizerProxy =
998 getWorkingMemory()->getProxy<ObjectLocalizerInterfacePrx>(recognitionMethod);
1006 if (objectLocalizerProxy)
1008 std::pair<std::string, ObjectLocalizerInterfacePrx> entry;
1009 entry.first = recognitionMethod;
1011 getWorkingMemory()->getProxy<ObjectLocalizerInterfacePrx>(recognitionMethod);
1013 knownObjectProxies.insert(entry);
1016 return objectLocalizerProxy;
1019 LocalizationQueryList
1020 ObjectLocalizationMemoryUpdater::getMissingQueries(
const LocalizationQueryList& queriesBase,
1021 const LocalizationQueryList& queriesCompare)
1023 LocalizationQueryList missing;
1025 for (LocalizationQueryList::const_iterator iter = queriesCompare.begin();
1026 iter != queriesCompare.end();
1031 for (LocalizationQueryList::const_iterator iterBase = queriesBase.begin();
1032 iterBase != queriesBase.end();
1035 if ((*iterBase)->queryName == (*iter)->queryName)
1043 missing.push_back(*iter);
1053 if (!checkFieldOfView)
1058 auto robot = robotStateInterfacePrx->getSynchronizedRobot();
1060 armarx::FramedPositionPtr::dynamicCast(pos->clone());
1061 posInLeftCamCS->changeFrame(robot, robotNodeNameLeftCamera);
1062 Eigen::Vector3f positionInLeftCamCS = posInLeftCamCS->toEigen();
1064 armarx::FramedPositionPtr::dynamicCast(pos->clone());
1065 posInRightCamCS->changeFrame(robot, robotNodeNameRightCamera);
1066 Eigen::Vector3f positionInRightCamCS = posInRightCamCS->toEigen();
1069 if (positionInLeftCamCS(2) > getProperty<float>(
"MaximalObjectDistance").
getValue())
1074 Eigen::Vector3f viewDirection = Eigen::Vector3f::UnitZ();
1075 positionInLeftCamCS.normalize();
1076 positionInRightCamCS.normalize();
1077 float angleLeft = acos(viewDirection.dot(positionInLeftCamCS));
1078 float angleRight = acos(viewDirection.dot(positionInRightCamCS));
1080 if (2 * angleLeft < cameraOpeningAngle && 2 * angleRight < cameraOpeningAngle)
1091 ObjectLocalizationMemoryUpdater::setMotionModel(
ObjectInstancePtr& objectInstance)
1093 std::string objectClassName = objectInstance->getMostProbableClass();
1096 ObjectClassPtr::dynamicCast(objectClassSegment->getEntityByName(objectClassName));
1098 objectClass->getWrapper<EntityWrappers::ObjectRecognitionWrapper>();
1100 if (!recognitionWrapper)
1102 recognitionWrapper =
1103 objectClass->addWrapper(
new EntityWrappers::ObjectRecognitionWrapper());
1106 std::string motionModelName = recognitionWrapper->getDefaultMotionModel();
1107 ARMARX_INFO <<
"Motion model is " << motionModelName;
1112 switch (motionModelType)
1116 motionModel =
new MotionModelStaticObject(robotStateInterfacePrx);
1122 std::string handNodeName;
1124 if (objectClassName.find(
"left") != std::string::npos ||
1125 objectClassName.find(
"Left") != std::string::npos)
1127 handNodeName = handNodeNameLeft;
1131 handNodeName = handNodeNameRight;
1134 ARMARX_INFO <<
"The hand node name in the kinematic model is assumed to be "
1136 motionModel =
new MotionModelRobotHand(robotStateInterfacePrx, handNodeName);
1144 motionModel =
new MotionModelKBM(
1145 getProperty<std::string>(
"KBMReferenceNodeName").
getValue(),
1146 getProperty<std::string>(
"KBMLeftArmNodeSetName").
getValue(),
1147 robotStateInterfacePrx,
1152 motionModel =
new MotionModelKBM(
1153 getProperty<std::string>(
"KBMReferenceNodeName").
getValue(),
1154 getProperty<std::string>(
"KBMRightArmNodeSetName").
getValue(),
1155 robotStateInterfacePrx,
1164 <<
" not yet implemented here!";
1165 motionModel =
new MotionModelStaticObject(robotStateInterfacePrx);
1169 objectInstance->setMotionModel(motionModel);