ROSEndEffector
ROS End-Effector package: provides a ROS-based set of standard interfaces to command robotics end-effectors in an agnostic fashion.
FindActions.h
Go to the documentation of this file.
1 #ifndef __ROSEE_FIND_ACTIONS_
2 #define __ROSEE_FIND_ACTIONS_
3 
4 #include <moveit/planning_scene/planning_scene.h>
5 
14 
15 #include <muParser.h>
16 
17 
18 #define N_EXP_COLLISION 5000 //5000 is ok
19 #define N_EXP_DISTANCES 5000 //? is ok
20 #define N_EXP_COLLISION_MULTPINCH 3000
21 #define DEFAULT_JOINT_POS 0.0
22 
23 namespace ROSEE
24 {
25 
37 {
38 public:
39  FindActions ( std::shared_ptr < ROSEE::ParserMoveIt > parserMoveit ) ;
40 
47  std::pair < std::map < std::pair <std::string, std::string> , ROSEE::ActionPinchTight >,
48  std::map < std::pair <std::string, std::string> , ROSEE::ActionPinchLoose > >
49  findPinch ( std::string path2saveYaml );
50 
65  std::map < std::set <std::string>, ROSEE::ActionMultiplePinchTight > findMultiplePinch (
66  unsigned int nFinger, std::string path2saveYaml, bool strict = true );
67 
77  std::map <std::string, ROSEE::ActionTrig> findTrig ( ROSEE::ActionPrimitive::Type actionType,
78  std::string path2saveYaml );
79 
80  std::map < std::string, ROSEE::ActionSingleJointMultipleTips> findSingleJointMultipleTips ( unsigned int nFinger, std::string path2saveYaml );
81 
82 private:
83 
84  std::shared_ptr < ROSEE::ParserMoveIt > parserMoveIt;
85 
86  //lets store this, we access at each setRandomPos
87  std::map<std::string, std::pair<std::string, std::string>> mimicNLRelMap;
88 
94  std::map < std::pair <std::string, std::string> , ROSEE::ActionPinchTight > checkCollisions();
95 
100  void checkDistances (std::map < std::pair <std::string, std::string> , ROSEE::ActionPinchLoose >* mapOfLoosePinches);
101 
116  std::map < std::pair <std::string, std::string> , ROSEE::ActionPinchLoose >* mapOfLoosePinches);
117 
145  std::map <std::set<std::string>, ROSEE::ActionMultiplePinchTight>
146  checkCollisionsForMultiplePinch(unsigned int nFinger, bool strict);
147 
153  void removeBoundsOfNotCollidingTips ( const std::map < std::pair <std::string, std::string> , ROSEE::ActionPinchLoose >* mapOfLoosePinches,
154  robot_model::RobotModelPtr kinematic_model_noBound);
155 
166  void fillNotCollidingTips ( std::map < std::pair <std::string, std::string> , ROSEE::ActionPinchLoose >* mapOfLoosePinches,
167  const std::map < std::pair <std::string, std::string> , ROSEE::ActionPinchTight >* mapOfPinches );
168 
180  std::map < std::pair <std::string, std::string> , ROSEE::ActionPinchTight >* mapOfPinches,
181  std::map < std::pair <std::string, std::string> , ROSEE::ActionPinchLoose >* mapOfLoosePinches) ;
182 
183 
193  std::map <std::string, ActionTrig> trig();
194 
206  std::map <std::string, ROSEE::ActionTrig> tipFlex();
207 
217  std::map <std::string, ROSEE::ActionTrig> fingFlex();
218 
219 
233  bool insertJointPosForTrigInMap ( std::map <std::string, ActionTrig>& trigMap,
234  ROSEE::ActionTrig action, std::string jointName, double trigValue);
235 
236 
237 
244  ROSEE::JointsInvolvedCount setOnlyDependentJoints(std::pair < std::string, std::string > tipsNames, JointPos *jPos);
245 
246 
254  ROSEE::JointsInvolvedCount setOnlyDependentJoints( std::set< std::string > tipsNames,
255  JointPos *jPos);
256 
262  JointPos getConvertedJointPos(const robot_state::RobotState* kinematic_state);
263 
264 
270  void setToDefaultPositionPassiveJoints(moveit::core::RobotState * kinematic_state);
271 
278  std::pair < std::string, std::string > getFingersPair (std::pair <std::string, std::string> tipsPair) const;
279 
287  std::set <std::string> getFingersSet (std::set <std::string> tipsSet) const;
288 
296  std::pair < std::string, std::string > getFingertipsPair (std::pair <std::string, std::string> fingersPair) const;
297 
308  void setToRandomPositions(robot_state::RobotState* kinematic_state);
309 
310 
311 };
312 
313 }
314 
315 
316 #endif //__ROSEE_FIND_ACTIONS_
std::map< std::string, ROSEE::ActionSingleJointMultipleTips > findSingleJointMultipleTips(unsigned int nFinger, std::string path2saveYaml)
std::map< std::string, std::pair< std::string, std::string > > mimicNLRelMap
Definition: FindActions.h:87
std::map< std::string, ROSEE::ActionTrig > tipFlex()
We start from each tip.
void checkDistances(std::map< std::pair< std::string, std::string >, ROSEE::ActionPinchLoose > *mapOfLoosePinches)
Principal function which fill the mapOfLoosePinches basing on minumun distance between tips...
std::map< std::string, std::vector< double > > JointPos
The map to describe the position of all actuated joints.
Definition: Action.h:40
std::map< std::string, unsigned int > JointsInvolvedCount
The map to describe, how many times a joint is set by the action.
Definition: Action.h:63
Class to describe the action of "pinching" with more than 2 tips (with 2 tips there is the ActionPinc...
void checkWhichTipsCollideWithoutBounds(std::map< std::pair< std::string, std::string >, ROSEE::ActionPinchLoose > *mapOfLoosePinches)
Function similar to checkCollisions but used for Loose Pinches.
std::map< std::pair< std::string, std::string >, ROSEE::ActionPinchTight > checkCollisions()
principal function which check for collisions with moveit functions when looking for tight pinches ...
std::pair< std::string, std::string > getFingersPair(std::pair< std::string, std::string > tipsPair) const
Giving as argument a pair of fingertips, this function return a pair of fingers that are the fingers ...
The action of pinch with two tips.
void setToDefaultPositionPassiveJoints(moveit::core::RobotState *kinematic_state)
set to DEFAULT_JOINT_POS all the passive joints (defined so in the urdf file).
std::map< std::set< std::string >, ROSEE::ActionMultiplePinchTight > findMultiplePinch(unsigned int nFinger, std::string path2saveYaml, bool strict=true)
Finder for MultiplePinch (a pinch done with more than 2 finger).
std::shared_ptr< ROSEE::ParserMoveIt > parserMoveIt
Definition: FindActions.h:84
std::pair< std::string, std::string > getFingertipsPair(std::pair< std::string, std::string > fingersPair) const
Given the fingersPair, this function return the pair of their fingers, in lexicographical order...
void removeBoundsOfNotCollidingTips(const std::map< std::pair< std::string, std::string >, ROSEE::ActionPinchLoose > *mapOfLoosePinches, robot_model::RobotModelPtr kinematic_model_noBound)
Support function to remove the joint limits from the model.
std::map< std::string, ROSEE::ActionTrig > fingFlex()
We start from each tip.
std::map< std::string, ActionTrig > trig()
trig is the action of closing a SINGLE finger towards the palm.
Type
Enum useful to discriminate each primitive action when, for example, we want to parse a file if you ...
JointPos getConvertedJointPos(const robot_state::RobotState *kinematic_state)
Utility function to take the actuated joint positions from a kinematic_state and returns the same inf...
The action of moving some joints (see later) of a single finger in a full clousure position towards t...
Definition: ActionTrig.h:64
void changeFingertipsToFingerNames(std::map< std::pair< std::string, std::string >, ROSEE::ActionPinchTight > *mapOfPinches, std::map< std::pair< std::string, std::string >, ROSEE::ActionPinchLoose > *mapOfLoosePinches)
this function take the two tight and loose maps and change the keys from fingertips names to their fi...
bool insertJointPosForTrigInMap(std::map< std::string, ActionTrig > &trigMap, ROSEE::ActionTrig action, std::string jointName, double trigValue)
Insert/update an ActionTrig in the trigMap.
std::map< std::set< std::string >, ROSEE::ActionMultiplePinchTight > checkCollisionsForMultiplePinch(unsigned int nFinger, bool strict)
support function for findMultiplePinch (a pinch done with more than 2 finger).
void setToRandomPositions(robot_state::RobotState *kinematic_state)
This function set the random position of joint considering:
void fillNotCollidingTips(std::map< std::pair< std::string, std::string >, ROSEE::ActionPinchLoose > *mapOfLoosePinches, const std::map< std::pair< std::string, std::string >, ROSEE::ActionPinchTight > *mapOfPinches)
function to "initialize" the map of ActionPinchLoose mapOfLoosePinches.
std::map< std::string, ROSEE::ActionTrig > findTrig(ROSEE::ActionPrimitive::Type actionType, std::string path2saveYaml)
Function to look for trigs (trig, tipFlex and fingFlex).
Definition: FindActions.cpp:73
Class to check which fingertips collide (for the pinch action at the moment)
Definition: FindActions.h:36
The action of pinch with two tips.
FindActions(std::shared_ptr< ROSEE::ParserMoveIt > parserMoveit)
Definition: FindActions.cpp:3
ROSEE::JointsInvolvedCount setOnlyDependentJoints(std::pair< std::string, std::string > tipsNames, JointPos *jPos)
Given the contact, we want to know the state of the joint to replicate it.
std::set< std::string > getFingersSet(std::set< std::string > tipsSet) const
Function used when looking for multiple pinches.
std::pair< std::map< std::pair< std::string, std::string >, ROSEE::ActionPinchTight >, std::map< std::pair< std::string, std::string >, ROSEE::ActionPinchLoose > > findPinch(std::string path2saveYaml)
Function to look for pinches, both Tight and Loose ones.
Definition: FindActions.cpp:13