27 #include <Ice/ObjectAdapter.h>
29 #pragma GCC diagnostic push
30 #pragma GCC diagnostic ignored "-Wunknown-pragmas"
31 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
32 #include <dmp/io/MMMConverter.h>
33 #include <dmp/testing/testdataset.h>
34 #pragma GCC diagnostic pop
45 usingProxy(getProperty<std::string>(
"LongtermMemoryName").getValue());
46 ARMARX_INFO <<
"successfully initialized DMP component";
57 getProperty<std::string>(
"LongtermMemoryName").getValue());
71 ARMARX_ERROR <<
"cannot get dmp segment of longterm memory";
75 ARMARX_INFO <<
"successfully connected DMP component";
91 DMPComponent::findInstancePrx(std::string name)
94 DMPInstanceBasePrx result = dmpInstPair.second;
102 return DMPInstanceBasePrx();
107 DMPComponent::findInstancePtr(std::string name)
126 return findInstancePrx(dmpName);
131 const std::string& DMPType,
135 ARMARX_INFO <<
"instantiate DMP with name " << dmpName;
137 boost::serialization::extended_type_info
const* eti =
138 boost::serialization::extended_type_info::find(DMPType.c_str());
144 dmp.reset(
static_cast<DMP::DMPInterface*
>(eti->construct()));
148 DMPFactory dmpFactory;
149 dmp = dmpFactory.getDMP(DMPType, kernelSize);
154 dmpPtr->setCurrentTime(
ctime);
156 DMPInstanceBasePrx instprx = createDMPInstancePrx(dmpPtr);
160 ARMARX_INFO <<
"Successfully instantiate DMP ... ";
167 const std::string& dmpName,
174 ARMARX_ERROR <<
"DMP with name " + dmpEntityName +
" does not exist in the database";
175 return DMPInstanceBasePrx();
179 memoryx::DMPEntityPtr::dynamicCast(
dmpDataMemoryPrx->getDMPEntityByName(dmpEntityName));
182 std::string textStr = dmpEntity->getDMPtextStr();
184 std::stringstream istr;
187 boost::archive::text_iarchive ar(istr);
189 DMP::DMPInterface* readPtr;
191 ar >> boost::serialization::make_nvp(
"dmp", readPtr);
193 DMP::DMPInterfacePtr dptr(readPtr);
196 DMPInstanceBasePrx dmpPrx = createDMPInstancePrx(dmpPtr);
197 std::string dmpLocalName = dmpName;
198 if (dmpName ==
"UNKNOWN")
200 dmpLocalName = dmpPrx->ice_getIdentity().name;
206 " exists in DMP pool. It is not allowed to overwrite it.";
210 dmpPtr->setCurrentTime(
ctime);
214 ARMARX_INFO <<
"DMP with name: " + dmpEntityName +
" is loaded into DMP Pool with dmpName " +
215 dmpLocalName +
" and dmpType " + dmpPtr->getDMPType();
216 ARMARX_INFO <<
"successfully got dmp from database.";
228 ARMARX_ERROR <<
"DMP with ID " + dbId +
" does not exist in the database";
229 return DMPInstanceBasePrx();
233 memoryx::DMPEntityPtr::dynamicCast(
dmpDataMemoryPrx->getDMPEntityById(dbId));
234 std::string dmpEntityName = dmpEntity->getDMPName();
241 const std::string& dmpName,
246 if (!std::filesystem::exists(fileName))
248 ARMARX_ERROR <<
"The dmp file: " << fileName <<
" does not exist!!!";
249 return DMPInstanceBasePrx();
253 fileName.rfind(
".") == fileName.npos ? fileName : fileName.substr(fileName.rfind(
".") + 1);
255 std::ifstream file(fileName);
256 DMP::DMPInterface* readPtr;
260 boost::archive::xml_iarchive ar(file);
261 ar >> boost::serialization::make_nvp(
"dmp", readPtr);
265 ARMARX_ERROR <<
"The extension of the file cannot be recognized!!!";
266 return DMPInstanceBasePrx();
270 DMP::DMPInterfacePtr dptr(readPtr);
272 DMPInstanceBasePrx dmpPrx = createDMPInstancePrx(dmpPtr);
274 std::string dmpLocalName = dmpName;
275 if (dmpLocalName ==
"UNKNOWN" || dmpLocalName ==
"")
281 dmpLocalName = dmpPrx->ice_getIdentity().name;
285 dmpPtr->setCurrentTime(
ctime);
289 " exists in DMP pool. It is not allowed to overwrite it.";
295 ARMARX_INFO <<
"DMP with name: " + dmpName +
" is loaded into DMP Pool with dmpName " +
296 dmpLocalName +
" and dmpType " + dmpPtr->getDMPType();
305 const std::string& dmpName,
311 fileName.rfind(
".") == fileName.npos ? fileName : fileName.substr(fileName.rfind(
".") + 1);
312 ofstream ofs(fileName);
315 DMPInterface* savedPtr = dmpPtr->getDMP().get();
320 boost::archive::xml_oarchive ar(ofs);
321 ar << boost::serialization::make_nvp(
"dmp", savedPtr);
325 ARMARX_ERROR <<
"The extension of the file cannot be recognized!!!";
329 ARMARX_INFO <<
"successfully stored DMP in the file!!!";
337 const std::string& dmpEntityName,
338 const ::Ice::Current&)
346 dmpEntity->setDMPType(dmpPtr->getDMP()->getDMPType());
347 dmpEntity->setDMPName(dmpName);
349 std::stringstream dmptext;
350 boost::archive::text_oarchive ar(dmptext);
352 DMPInterface* savedPtr = dmpPtr->getDMP().get();
353 ar << boost::serialization::make_nvp(
"dmp", savedPtr);
355 dmpEntity->setDMPtextStr(dmptext.str());
357 std::cout << dmpEntity << std::endl;
359 dmpEntity->setId(entityID);
372 ARMARX_ERROR <<
"DMP with name " + dmpEntityName +
" does not exist in the database";
377 memoryx::DMPEntityPtr::dynamicCast(
dmpDataMemoryPrx->getDMPEntityByName(dmpEntityName));
382 ARMARX_INFO <<
"successfully removed dmp from database";
393 ARMARX_ERROR <<
"DMP with id " + dbId +
" does not exist in the database";
398 memoryx::DMPEntityPtr::dynamicCast(
dmpDataMemoryPrx->getDMPEntityById(dbId));
403 ARMARX_INFO <<
"successfully removed dmp from database";
412 ARMARX_INFO <<
"In Train DMP (name: " << dmpName <<
")";
414 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
425 ARMARX_INFO <<
"Exit Train DMP (name: " << dmpName <<
")";
430 const std::string& file,
435 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
439 dmpPrx->readTrajectoryFromFile(file, times);
443 ARMARX_ERROR <<
"readTrajectoryFromFile: DMP not found.";
451 const ::armarx::cStateVec& state,
452 const ::Ice::Current&)
454 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
458 dmpPrx->setDMPState(state);
470 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
474 dmpPrx->setAmpl(dim,
value);
486 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
490 dmpPrx->setGoal(
value);
501 const Ice::DoubleSeq&
value,
504 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
508 dmpPrx->setStartPosition(
value);
518 const Ice::DoubleSeq&
value,
521 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
525 return dmpPrx->setCanonicalValues(
value);
537 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
541 dmpPrx->setTemporalFactor(tau);
553 for (DMPMap::iterator it =
dmpPool.begin(); it !=
dmpPool.end(); it++)
555 it->second.first->setTimeStep(ts);
564 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
568 return dmpPrx->getAmpl(dim);
579 const cStateVec& states,
580 const ::Ice::Current&)
583 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
587 nextState = dmpPrx->getNextState(states);
603 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
607 curState = dmpPrx->getCurrentState();
620 Ice::DoubleSeq canonicalValues;
622 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
626 canonicalValues = dmpPrx->getCanonicalValues();
633 return canonicalValues;
639 double temporalFactor = 0;
641 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
645 temporalFactor = dmpPrx->getTemporalFactor();
652 return temporalFactor;
659 DMPMap::iterator it =
dmpPool.begin();
661 return it->second.first->getCurrentTime();
667 double dampingFactor = 0;
668 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
672 dampingFactor = dmpPrx->getDampingFactor();
678 return dampingFactor;
684 double springFactor{0};
685 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
689 springFactor = dmpPrx->getSpringFactor();
702 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
706 dim = dmpPrx->getDMPDim();
720 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
724 dmpType = dmpPrx->getDMPType();
736 Ice::DoubleSeq startPositions;
737 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
741 startPositions = dmpPrx->getStartPosition();
747 return startPositions;
752 const Ice::DoubleSeq& canonicalValues,
757 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
761 forceterm = dmpPrx->getForceTerm(canonicalValues, dim);
776 const Ice::DoubleSeq& goal,
777 const cStateVec& states,
778 const Ice::DoubleSeq& canonicalValues,
779 double temporalFactor,
782 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
786 return dmpPrx->calcTrajectory(
787 startTime, timeStep, endTime, goal, states, canonicalValues, temporalFactor);
800 for (DMPMap::iterator it =
dmpPool.begin(); it !=
dmpPool.end(); it++)
802 it->second.first->setCurrentTime(
ctime);
809 for (DMPMap::iterator it =
dmpPool.begin(); it !=
dmpPool.end(); it++)
811 ::Ice::DoubleSeq canvals;
813 if (dmpPtr->getDMPType() ==
"PeriodicDMP")
815 canvals.push_back(0.0);
816 dmpPtr->setCanonicalValues(canvals);
820 canvals.push_back(1.0);
821 dmpPtr->setCanonicalValues(canvals);
830 Ice::DoubleSeq trajGoal;
831 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
835 trajGoal = dmpPrx->getTrajGoal();
848 cStateVec trajStartState;
849 DMPInstanceBasePrx dmpPrx = findInstancePrx(dmpName);
853 trajStartState = dmpPrx->getTrajStartState();
860 return trajStartState;
869 for (DMPMap::iterator it =
dmpPool.begin(); it !=
dmpPool.end(); it++)
871 nameList.push_back(it->first);
880 DMPMap::iterator dmpPoolIt =
dmpPool.find(dmpName);
882 if (dmpPoolIt !=
dmpPool.end())
906 Ice::ObjectPrx obj = adapter->addWithUUID(dmpPtr);
908 return DMPInstanceBasePrx::uncheckedCast(obj);