Eigengrasps define a subspace of a given hand’s DOF space. Assuming the hand has d DOF’s, each eigengrasp is a d-dimensional vector. A basis comprising b orthogonal eigengrasps can define a b-dimensional subspace. Additionally, this subspace needs an origin, which is also a d-dimensional vector. This gives the following options:
- define a hand posture using b eigengrasp amplitudes (as opposed to d DOFs).
- find the Eigengrasp subspace projection of a given hand posture which is not necessarily in this subspace.
The term “Eigengrasp” is of our own creation; in the literature (particularly regarding the human hand), the same concept is often referred to as “hand synergies”.
For a complete discussion on Eigengrasps and their application in practice, please see the section. This is just a brief overview of Eigengrasps in practice, in this version of GraspIt!.
This distribution of GraspIt! include Eigengrasp information for many dexterous hands. For the human hand, we are providing eigengrasp directions matching those discovered through user studies by Santello et al. (see M. Santello, M. Flanders, and J. F. Soechting, Postural hand synergies for tool use, Journal of Neuroscience, vol. 18, no. 23, 1998 for details). The hand model used in that study had 16 DOF. Therefore, the only the 16-DOF version of the human hand included with GraspIt! has all 6 eigengrasps discovered in the study. The 20-DOF version has only the 2 dominant eigengrasps, and since an empirical mapping was done between 16 DOF and 20 DOF, they might not be as accurate as the ones provided with the 16-DOF version.
3 more dexterous hands have eigengrasp information pre-defined in this version of GraspIt!: the Robonaut hand, the DLR hand and the Barrett hand. For the anthropomorphic models (Robonaut and DLR) we have performed an empirical mapping of the 2 dominant eigengrasps from the human hand to adapt them to the robotic hand kinematics. The Barrett hand natively only has 4 DOF (it can be considered an eigengrasp hand by construction, since it has 7 joints). We have still defined 2 eigengrasps empirically, this is the simplest case of using eigengrasps and it will be used as an example in the rest of this chapter.
Loading Eigengrasp Information¶
For any hand model, eigengrasp information can be defined using a text
file which is loaded together with the hand configuration file. Usually,
eigengrasp information files are placed together with the rest of the
information that defines a robot, such as the configuration file or link
geometry files. Here is an example file defining a 2-dimensional
(b=2) eigengrasp subspace for the Barrett hand (d=4).
The example shown here is found in the file
included in this distribution.
- the first line contains the keyword
DIMENSIONSfollowed by the number of DOF’s of the hand
- each eigengrasp begins with the keyword
EG. On the next line, a single value containing the eigenvalue associated with this particular eigengrasp. For now this number is not used anywhere in the code, but it might have uses in the future. Finally, on the next line, the d-dimensional vector that defines the eigengrasp
- an arbitrary number of eigengrasps can be defined, as long as each is formatted as described above. In this example, we define a 2-dimensional subspace with two eigengrasps.
- the origin of the subspace is defined exactly like an eigengrasp, but
it is preceded by the keyword
ORIGIN. If no origin is found in the file, the system will use a pre-defined subspace origin: for each DOF, the subspace origin is assumed to be at ( maxVal - minVal ) / 2
- the normalization information is optional. If desired, it can be
defined like an eigengrasp, preceded by the keyword
NORM. If this information is not present in the file, no normalization is used
DIMENSIONS 4 EG 0.51 1.0 0.0 0.0 0.0 EG 0.25 0.0 1.0 1.0 1.0 ORIGIN 0.0000 1.13 0.79 0.79 0.79 NORM 0.0000 1.57 1.22 1.22 1.22
When loading a robot, GraspIt! will look in the robot configuration file
for information on what eigengrasps file to load (if any). First comes
EigenGrasps, followed on the next line by the eigengrasp
file to be loaded. The path to the Eigengrasp file is relative to the
robot configuration file. For example, all this information can be
supplied by placing the following lines anywhere in the hand
configuration file (in this example,
... EigenGrasps eiegn/barrett_eigen.egr ...
With the desired hand highlighted in the hand drop-down list, use the Grasp->EigenGrasp Interface menu. Two windows will show up: the eigengrasp amplitude sliders window and the eigengrasp options window. If no eigengrasp information has been loaded from a file, the system will display the trivial eigengrasp set, where each eigengrasp corresponds to exactly one DOF and the eigengrasp subspace is identical to the DOF space.
- at launch, the hand is placed in a neutral position (all eigengrasp
amplitudes are 0). By moving each slider you control the amplitude of
the respective eigengrasp. You can also move individual DOF’s like
you normally would in GraspIt. The result depends on the mode of
operation, defined by the
Rigidcheckbox as described below.
- rigid mode: only movement in Eigengrasp space is allowed. If an individual DOF is changed, had posture is projected back into eigengrasp space.
- non-rigid mode: free movement is allowed. When an individual DOF is changed, the eigengrasp sliders still show the eigengrasp amplitudes of the projection in eigengrasp space. However, hand posture is allowed to leave eigengrasp space.
- collision detection is not performed while moving using the eigengrasp interface. This is temporary, we will probably add it in soon.
- when moving the eigengrasp sliders, motion is stopped as soon as any
DOF reaches its joint limit. Alternatively, it could be possible to
just block the stopped DOF and allow others to move, but this would
take the hand out of eigengrasp space. See code (
eigengrasp.h) for details.