How to retrieve the Grasping Action Created

Here we will see how it is possible to retrieve information about all the action created for a specific end-effector.

All the Grasping Actions are stored in .yaml file, and ROS End-Effector provides functionalities to easily access them, without the need to write code to parse them.
There are two ways to retrieve grasping action information.

One is by means of ROS Services. For this is necessary that ROS End-Effector is in execution (being the server which will respond to the request).

The other is by using the ROS End-Effector library MapActionHandler, an utility class which parse the yaml files and store the actions in more comfortable containers (std::map). This is the method which ROS End-Effector itself uses to parse the files.

Retrieving Grasping Actions with ROS Service

First, be sure that ROS End-Effector is in execution (as explained in Control your End-Effector with ROSEE).
Be also sure that the service named ros_end_effector/grasping_actions_available by default (the name can be changed in the rosee_startup launch file) is available with rosservice list.

In the request, the fields are:

  • action_type field: (note that if not filled it would be 0)

    • 0 : Primitives

    • 1 : Generic and Composed

    • 2 : Timed

    Warning

    This is a compulsory field. Be sure to fill it with the correct valur, otherwise you are requesting info about a primitive grasping action, and not of other types.

  • primitive_type field, only considered if action_type is 0. Also note that if this is not 0, the field action_name is not considered:

    • 0 : All Primitives. If also the action_name field is empty, all primitives will be given in the response

    • 1 : PinchTight

    • 2 : PinchLoose

    • 3 : MultiplePinchTight

    • 4 : Trig

    • 5 : TipFlex

    • 6 : FingFlex

    • 7 : SingleJointMultipleTips

    • 8 : None (not used)

  • action_name field, the name of the action, it can be used for all action_type

  • elements_involved field, used only for primitives, if action_name is not an empty string and/or primitive_type != 0. This is a vector which can contain the element which distinguish a primitive, like 2 fingers for a PinchTight

The respond is a vector of grasping actions (that can be also empty or with only one element)

You can use rosservice call command to call the service:

rosservice call /ros_end_effector/grasping_actions_available "action_type: 0
primitive_type: 1
action_name: ''
elements_involved:
- 'thumb'
- 'index'"

This command will request the primitive (action_type : 0) of type PinchTight (primitive_type : 0) done with the thumb and index fingers.


rosservice call /ros_end_effector/grasping_actions_available "action_type: 1
action_name: 'AParticularGenericAction'"

This other call will request info for a generic action called AParticularGenericAction (Note the action_type field set to 1 )

You can check the GraspingActionsAvailable.srv and GraspingAction.msg files (from rosee_msg package), to have a look of how these messages are composed.

To use this service with your code, you can refer to the official ROS documentation

Retrieving Grasping Actions with MapActionHandler

TODO