23 auto it = primitives.find (primitiveName);
24 if (it == primitives.end() ){
25 std::cerr <<
"[ERROR MapActionHandler::" << __func__ <<
"] Not found any primitive action with name " << primitiveName << std::endl;
34 std::vector<ROSEE::MapActionHandler::ActionPrimitiveMap> vectRet;
36 for (
auto it : primitives) {
38 if (it.second.begin()->second->getPrimitiveType() == type ){
39 vectRet.push_back(it.second);
54 auto map = getPrimitiveMap(primitiveName);
56 if (map.size() == 0 ) {
60 if (map.begin()->second->getKeyElements().size() != key.size()) {
61 std::cerr <<
"[ERROR MapActionHandler::" << __func__ <<
"] The action '"
62 << primitiveName <<
"' has as key a set of dimension " <<
63 map.begin()->second->getKeyElements().size() <<
64 " and not dimension of passed 2nd argument " << key.size() << std::endl;
68 auto it = map.find(key);
70 if (it == map.end()) {
71 std::cerr <<
"[ERROR MapActionHandler::" << __func__ <<
"] Not found any action '"
72 << primitiveName <<
"' with key [ " ;
73 for (
auto keyEl : key) {
74 std::cerr << keyEl <<
", ";
76 std::cerr <<
"] " << std::endl;
85 std::set <std::string> keySet (key.begin(), key.end());
86 return getPrimitive(primitiveName, keySet);
91 std::set <std::string> keySet {key};
92 return getPrimitive(primitiveName, keySet);
97 std::set <std::string> keySet {key.first, key.second};
98 return getPrimitive(primitiveName, keySet);
103 std::vector <ActionPrimitiveMap> maps = getPrimitiveMap(type);
106 std::vector <ActionPrimitiveMap> theMaps;
107 for (
int i =0; i<maps.size(); i++) {
108 if (maps.at(i).begin()->second->getKeyElements().size() == key.size()) {
109 theMaps.push_back(maps.at(i));
113 if (theMaps.size() == 0 ) {
114 std::cerr <<
"[ERROR MapActionHandler::" << __func__ <<
"] No primitive action of type '"
115 << type <<
"' has as key a set of dimension " <<
116 key.size() <<
" (passed 2nd argument)" << std::endl;
117 return std::vector<ROSEE::ActionPrimitive::Ptr>();
127 std::vector<ROSEE::ActionPrimitive::Ptr> returnVect;
128 for (
auto action : theMaps) {
129 auto it = action.find(key);
130 if (it != action.end()) {
131 returnVect.push_back(it->second);
135 if (returnVect.size() == 0) {
136 std::cerr <<
"[ERROR MapActionHandler::" << __func__ <<
"] Not found any primitive action of type '" << type <<
"' with key [ " ;
137 for (
auto keyEl : key) {
138 std::cerr << keyEl <<
", ";
140 std::cerr <<
"] " << std::endl;
141 return std::vector<ROSEE::ActionPrimitive::Ptr>();
150 std::set <std::string> keySet (key.begin(), key.end());
151 return getPrimitive(type, keySet);
156 std::set <std::string> keySet {key};
157 return getPrimitive(type, keySet);
162 std::set <std::string> keySet {key.first, key.second};
163 return getPrimitive(type, keySet);
167 return pinchTightPairsMap;
171 return pinchLoosePairsMap;
176 auto it = generics.find(
name);
177 if (it == generics.end() ) {
179 std::cerr <<
"[ERROR MapActionHandler " << __func__ <<
"] No generic function named '" <<
name <<
"'" << std::endl;
193 auto it = timeds.find(
name);
194 if (it == timeds.end() ) {
195 std::cerr <<
"[ERROR MapActionHandler " << __func__ <<
"] No timed function named '" <<
name <<
"'" << std::endl;
209 std::map<std::string, ROSEE::ActionPrimitive::Ptr> ret;
211 for (
auto it : primitives) {
213 if (it.second.begin()->second->getPrimitiveType() ==
214 ROSEE::ActionPrimitive::Type::SingleJointMultipleTips &&
215 it.second.begin()->second->getnFingersInvolved() == nFingers){
218 for (
auto itt : it.second) {
220 std::string key = *(itt.first.begin());
221 ret.insert(std::make_pair(key, itt.second));
227 if (ret.size() == 0) {
228 std::cerr <<
"[WARNING MapActionHandler::" << __func__ <<
"] Not found any singleJointMultipleTips action that moves " << nFingers <<
" fingers " << std::endl;
236 auto it = generics.find(graspName);
237 if (it != generics.end()) {
241 auto moreTip = getPrimitiveSingleJointMultipleTipsMap(nFingers);
242 if (moreTip.size() == 1) {
243 return moreTip.begin()->second;
246 std::cerr <<
"[WARNING MapActionHandler::" << __func__ <<
"] Not found any grasp named " << graspName <<
" neither a singleJointMultipleTips primitive "
247 <<
"that move all fingers with a single joint, you should create one action for grasp before calling parseAllActions/parseAllGenerics()"
258 std::set <std::string> pairedFinger;
262 case ROSEE::ActionPrimitive::Type::PinchTight : {
264 auto it = pinchTightPairsMap.find(finger);
266 if ( it != pinchTightPairsMap.end() ) {
267 pairedFinger = it->second;
270 std::cerr <<
"[WARNING MapActionHandler " << __func__ <<
"] No companions found to make a tight pinch with " << finger <<
" finger"
276 case ROSEE::ActionPrimitive::Type::PinchLoose : {
278 auto it = pinchLoosePairsMap.find(finger);
280 if ( it != pinchLoosePairsMap.end() ) {
281 pairedFinger = it->second;
284 std::cerr <<
"[WARNING MapActionHandler " << __func__ <<
"] No companions found to make a loose pinch with " << finger <<
" finger"
292 std::cerr <<
"[WARNING MapActionHandler " << __func__ <<
"] Type " <<
293 pinchType <<
" is not a type to look for companions " << std::endl;
304 if (! parseAllPrimitives(pathFolder +
"/primitives/") ) {
307 if (! parseAllGenerics(pathFolder + +
"/generics/") ) {
310 if (! parseAllTimeds(pathFolder + +
"/timeds/") ) {
323 for (
auto file : filenames) {
325 primitives.insert (std::make_pair( primitive.begin()->second->getName(), primitive) ) ;
338 for (
auto file : filenames) {
342 generics.insert (std::make_pair( genericPointer->getName(), genericPointer) ) ;
355 for (
auto file : filenames) {
357 std::shared_ptr < ROSEE::ActionTimed > timed = yamlWorker.
parseYamlTimed(pathFolder+file);
358 timeds.insert (std::make_pair( timed->getName(), timed) ) ;
367 auto it = generics.find(generic->getName());
369 if (it != generics.end()){
371 std::cerr <<
"[ERROR MapActionHandler " << __func__ <<
"] Trying to insert generic action with name " <<
372 generic->getName() <<
"which already exists" << std::endl;
378 generics.insert(it, std::make_pair(generic->getName(),
generic));
392 auto maps = getPrimitiveMap(ROSEE::ActionPrimitive::Type::PinchTight);
394 if (maps.size() != 0 ){
396 for (
auto mapEl : map) {
398 for (
auto fing : mapEl.first) {
402 if (pinchTightPairsMap.count(fing) == 0 ) {
403 pinchTightPairsMap.insert(std::make_pair(fing, mapEl.first));
405 pinchTightPairsMap.at(fing).insert (mapEl.first.begin(), mapEl.first.end());
411 for (
auto it : pinchTightPairsMap) {
412 it.second.erase(it.first);
417 auto mapsloose = getPrimitiveMap(ROSEE::ActionPrimitive::Type::PinchLoose);
419 if (mapsloose.size() != 0 ) {
421 for (
auto mapEl : map) {
423 for (
auto fing : mapEl.first) {
427 if (pinchLoosePairsMap.count(fing) == 0 ) {
428 pinchLoosePairsMap.insert(std::make_pair(fing, mapEl.first));
430 pinchLoosePairsMap.at(fing).insert (mapEl.first.begin(), mapEl.first.end());
436 for (
auto it : pinchLoosePairsMap) {
437 it.second.erase(it.first);