ROS End-Effector Grasping Actions

TODO check explain better this page, put examples for create actions

In ROS End-Effector, an Action is a movement that the end effector can be commanded to do. In practice, an action is a container that include the position for all the involved joints. There are three main categories of Action:

Primitive Actions

Referred as ActionPrimitive in the code, this kind of actions is the one that is automatically detected thanks to the FindAction node (during the offline phase). Until now the following primitives have been defined:

Primitive Table

Primitive

Fingers

Joints

Description

Constraints

Trig

1

1+

Move all finger joints toward their bound

At least one joint that moves only one finger

TipFlex

1

1

Move the last joint of the finger toward its bound

At least 2 joints that moves only one finger

FingFlex

1

1

Move the first joint of the finger toward its bound

At least 2 joints that moves only one finger

PinchTight

2

1+

Collision between two fingertip links

PinchWeak

2

1+

Movement of two fingertips links towards each other but without collision

MultiPinchTight_N

N (\(\geq\) 3)

1+

Collision between N (\(\geq\) 3) fingertip links

SingleJointMultipleTips_N

N (\(\geq\) 2)

1

Move a joint that move more than one finger toward its bound

A joint that move more than one finger (e.g. grasp for lot of hands

Generic Actions

ActionGeneric are the customizable type. With ROSEE, you can add a custom action and then command the end-effector to do that action many time you want during the execution. Generic Action can be built in 2 different ways:

  • You can write by hand a yaml file (see files in config/generic

  • You can fill c++ structures with your code, and then emit the yaml file (or use directly the action as command)

There is also a third possibility: creating a ActionComposed object. This is a class that permit you to define an action as sum of other actions. For example, a grasp can be see as a sum of trig of each finger.

Timed Actions

ActionTimed are a special type of actions that permit you to execute more inner actions one after the other. As an example, this can be useful to perform a wide grasp. First we want the finger to spread, and then perform the clousure toward the palm. These type of action are creable in the code, using the class functions.