27 #include <VirtualRobot/Robot.h>
37 environment(environment)
53 designerTrajectories.insert(std::make_pair(
73 int numberOfErasedElements = designerTrajectories.erase(rnsName);
75 if (numberOfErasedElements > 0)
95 return designerTrajectories.at(rnsName);
99 throw InvalidArgumentException(
"RNS name does not exist in map");
106 VirtualRobot::RobotNodeSetPtr tmpRns = designerTrajectory->getRns();
110 tmpDTM.get()->import(designerTrajectory);
116 designerTrajectories.insert(std::make_pair(tmpRns->getName(), tmpDTM));
122 designerTrajectories[tmpRns->getName()] = tmpDTM;
135 if (designerTrajectories.find(rnsName) != designerTrajectories.end())
152 std::vector<std::vector<std::string>> rnssNodeNames;
154 for (std::map<std::string, DesignerTrajectoryManagerPtr>::iterator it =
155 designerTrajectories.begin();
156 it != designerTrajectories.end();
159 VirtualRobot::RobotNodeSetPtr rnsptr = environment->getRobot()->getRobotNodeSet(it->first);
160 std::vector<std::string> tmpRnsNodesNames = rnsptr->getNodeNames();
161 rnssNodeNames.push_back(tmpRnsNodesNames);
165 std::vector<std::string> givenRnsNodeNames =
166 environment->getRobot()->getRobotNodeSet(rnsName)->getNodeNames();
169 for (std::vector<std::string> rnsNodeNames : rnssNodeNames)
173 sort(rnsNodeNames.begin(), rnsNodeNames.end());
174 sort(givenRnsNodeNames.begin(), givenRnsNodeNames.end());
176 std::set_intersection(rnsNodeNames.begin(),
178 givenRnsNodeNames.begin(),
179 givenRnsNodeNames.end(),
193 std::vector<std::string> bodyColModelsNames,
202 VirtualRobot::CDManagerPtr cdm(
new VirtualRobot::CDManager());
205 if (cdRob->getRobotNodeSet(activeColModelName) ==
nullptr)
210 VirtualRobot::SceneObjectSetPtr sosActiveColModel(
new VirtualRobot::SceneObjectSet());
211 sosActiveColModel->addSceneObjects(cdRob->getRobotNodeSet(activeColModelName));
214 cdm->addCollisionModel(sosActiveColModel);
217 for (std::string bodyColModelName : bodyColModelsNames)
220 if (cdRob->getRobotNodeSet(bodyColModelName) ==
nullptr)
225 VirtualRobot::SceneObjectSetPtr sosBodyColModel(
new VirtualRobot::SceneObjectSet());
226 sosBodyColModel->addSceneObjects(cdRob->getRobotNodeSet(bodyColModelName));
229 cdm->addCollisionModel(sosBodyColModel);
236 double increment = 1.0 / fps;
239 while (t->dataExists(time))
243 std::vector<std::string> dimNames = t->getDimensionNames();
244 std::vector<double> jointValuesDouble = t->getStates(time, 0);
245 std::vector<float> jointValues(jointValuesDouble.begin(), jointValuesDouble.end());
247 VirtualRobot::RobotConfigPtr robConf(
new VirtualRobot::RobotConfig(
248 cdRob,
"config at t=" +
std::to_string(time), dimNames, jointValues));
252 cdRob->setConfig(robConf);
256 if (cdm->isInCollision())
263 time = time + increment;
270 DesignerTrajectoryHolder::mergeTrajectories(
unsigned int fps)
272 std::vector<TrajectoryPtr> trajectories;
273 std::vector<double> endTimes;
274 double maxEndTime = 0;
275 std::vector<double> timestamps;
278 for (std::map<std::string, DesignerTrajectoryManagerPtr>::iterator it =
279 designerTrajectories.begin();
280 it != designerTrajectories.end();
283 if (!it->second->getDesignerTrajectory())
287 TrajectoryPtr traj = it->second->getDesignerTrajectory()->getFinalTrajectory();
289 trajectories.push_back(traj);
290 double t = traj->getTimeLength();
295 endTimes.push_back(t);
298 double inc = 1.0 / fps;
299 for (
double d = 0.0; d < maxEndTime; d = d + inc)
301 timestamps.push_back(d);
304 timestamps.push_back(maxEndTime);
307 for (
unsigned int t = 0; t < trajectories.size(); t++)
309 for (
unsigned int dim = 0; dim < trajectories[t]->dim(); dim++)
311 std::vector<double> dimData;
312 for (
double time : timestamps)
314 if (time < endTimes[t])
316 dimData.push_back(trajectories[t]->getState(time, dim));
320 dimData.push_back(trajectories[t]->getState(endTimes[t], dim));
324 finalTrajectory->addDimension(
325 dimData, timestamps, trajectories[t]->getDimensionName(dim));
328 return finalTrajectory;