26 #include <Ice/ObjectAdapter.h>
28 #include <dmp/io/MMMConverter.h>
33 DMP::Vec<DMP::DMPState>
36 DMP::Vec<DMP::DMPState> res;
37 res.resize(state.size());
39 for (
size_t i = 0; i < state.size(); i++)
41 res[i].pos = state[i].pos;
42 res[i].vel = state[i].vel;
52 res.resize(state.size());
53 for (
size_t i = 0; i < state.size(); i++)
55 res[i].push_back(state[i].pos);
56 res[i].push_back(state[i].vel);
66 sv.resize(dmpstate.size());
68 for (
size_t i = 0; i < dmpstate.size(); i++)
70 sv[i].pos = dmpstate[i].pos;
71 sv[i].vel = dmpstate[i].vel;
81 sv.resize(dmpstate.size());
83 for (
size_t i = 0; i < dmpstate.size(); i++)
85 sv[i].pos = dmpstate[i].at(0);
86 sv[i].vel = dmpstate[i].at(1);
107 ARMARX_WARNING <<
"Canonical value is not specified. It will be set 1.0.";
112 if (currentDMPState.size() == 0)
114 ARMARX_ERROR <<
"The current state is not available. Please specify current state with "
123 double temporalFactor =
dmp->getTemporalFactor();
124 currentDMPState =
dmp->calculateTrajectoryPointBase(
137 const Ice::DoubleSeq& goal,
139 const Vec2D& currentStates,
140 const Ice::DoubleSeq& canonicalValues,
141 double temporalFactor,
142 const ::Ice::Current&)
150 if (currentStates.size() == 0)
152 ARMARX_ERROR <<
"Current DMP State has to be specified";
157 if (goal.size() == 0)
163 DMP::DVec2d curStates;
165 for (std::size_t i = 0; i < currentStates.size(); ++i)
167 curStates.emplace_back(
DMP::DVec(currentStates.at(i)));
172 DMP::DVec2d tmp_result =
dmp->calculateTrajectoryPointBase(
173 t, goal_v, currentT, curStates, canValues, temporalFactor);
175 Ice::DoubleSeq tmpCanVal;
176 for (std::size_t i = 0; i < canValues.size(); i++)
178 tmpCanVal.emplace_back(canValues.at(i));
183 result.canonicalValues = tmpCanVal;
186 for (std::size_t i = 0; i < tmp_result.size(); ++i)
188 ::Ice::DoubleSeq dblseq = ::Ice::DoubleSeq(tmp_result.at(i));
190 nState.emplace_back(dblseq);
193 result.nextState = nState;
201 const Vec2D& currentStates,
202 const Ice::DoubleSeq& canonicalValues,
214 std::map<std::string, paraType>
configMap;
215 for (::std::map<::std::string, ::Ice::DoubleSeq>::const_iterator it = conf.begin();
220 dmp->setConfiguration(it->first, it->second);
229 if (paraIDs.size() != paraVals.size())
231 ARMARX_WARNING <<
"ID list and value list have different sizes, which may cause error.";
235 for (
size_t i = 0; i < paraIDs.size(); i++)
243 configs[paraIDs[i]] = paraVals[i];
252 const Ice::DoubleSeq&
value,
253 const ::Ice::Current&)
325 return dmp->getAmpl(dim);
331 return dmp->getTemporalFactor();
337 return dmp->_getPerturbationForce(dim, canVal[0]);
346 for (
size_t i = 0; i < goals.size(); ++i)
348 res.push_back(goals.at(i));
359 Ice::DoubleSeq trajGoal;
360 for (
size_t i = 0; i <
trajs[0].dim(); i++)
362 trajGoal.push_back(
trajs[0].rbegin()->getPosition(i));
371 cStateVec startState;
373 for (
size_t i = 0; i <
trajs[0].dim(); i++)
376 state.pos =
trajs[0].begin()->getPosition(i);
377 state.vel =
trajs[0].begin()->getDeriv(i, 1);
378 state.acc =
trajs[0].begin()->getDeriv(i, 2);
380 startState.push_back(state);
389 std::string ext = file.rfind(
".") == file.npos ? file : file.substr(file.rfind(
".") + 1);
397 else if (ext ==
"csv")
399 DMP::SampledTrajectoryV2 traj;
400 traj.readFromCSVFile(file);
401 traj.gaussianFilter(0.01);
403 double startTime = 0;
404 double endTime = times;
408 trajs.push_back(traj);
409 dmp->setDim(traj.dim());
413 else if (ext ==
"vsg")
433 const ::Ice::DoubleSeq& goal,
434 const cStateVec& states,
435 const ::Ice::DoubleSeq& canonicalValues,
436 double temporalFactor,
446 Vec2D resultingTrajectory;
448 cStateVec nextStates = states;
449 while (
ctime < endTime)
452 ::Ice::DoubleSeq positions;
454 positions.push_back(
ctime);
455 for (
unsigned int d = 0; d < states.size(); d++)
457 positions.push_back(nextStates.at(d).pos);
460 resultingTrajectory.push_back(positions);
465 return resultingTrajectory;
470 const Ice::DoubleSeq& goal,
471 const Vec2D& initStates,
472 const Ice::DoubleSeq& canonicalValues,
473 double temporalFactor,
478 if (timestampsLocal.size() == 0)
483 DMP::DVec::const_iterator it = timestamps.begin();
484 Vec2D previousState = initStates;
485 Vec2D resultingTrajectory;
489 double prevTimestamp = *it;
493 for (; it != timestamps.end(); it++)
495 nStateValues nState =
496 calcNextState(*it, goal, prevTimestamp, previousState, canValues, temporalFactor);
497 canValues = nState.canonicalValues;
498 previousState = nState.nextState;
501 ::Ice::DoubleSeq positions;
502 for (
unsigned int d = 0; d < previousState.size(); d++)
504 positions.push_back(previousState.at(d)[0]);
506 resultingTrajectory.push_back(positions);
509 return resultingTrajectory;
514 const Vec2D& initStates,
515 const Ice::DoubleSeq& canonicalValues,