Skip to content

Grippers

Jesse Haviland edited this page Jan 25, 2021 · 4 revisions

Note, this is a discussion document. Some of this has not been implemented yet, or we are experimenting with implementation

Jesse 30/11/20

Robot arms typically have end-effectors which can grasp things. These grippers are troublesome when designing a toolbox for arms as they are part of the robot but typically not a part of the robot which is actively controlled unless picking or placing. Additionally, grippers can not be expressed with DH notation but can be with ETS or URDF notation.

Our solution is to add grippers as an attribute to the robot object. Each robot contains a list of grippers (since a branched robot like the PR2 has two grippers). The Links which form the gripper are stored in the new gripper object so the robot's links only contain robot links. This abstaction also makes it possible to have gripper models where you can attach a Robotiq gripper to a Kionva arm for example.

A gripper object can perform forward kinematics to get the position between its base and its tool tips, close its fingers with a set acceleration/velocity, or set the finger width to be a specified distance.

Peter 5/1/21

We take a rigid-body-tree (ERobot class) and invoke robot.Gripper(link) where link is the hand or the link whose children are the fingers. These links are removed from the robot link tree and become children of the Gripper object. The Gripper object is an attribute of the preceding link. The gripper has a tool attribute which is a transform representing the mid point of the orginal grippers.

Original tree

L1--L2--L3--L4--HAND+-F1
                    |
                    +-F2

where F1 and F2 are end-effectors, becomes

L1--L2--L3--L4--GRIPPER1

GRIPPER1+-F1
        |
        +-F2

and GRIPPER1 is now a named end-effector of the robot, ie. it can be used to compute FK, IK, Jacobians etc.

If the Gripper class inherited from ELink then it could be the final link in the branch and can conveniently provide the static offset, gripper name etc. A reference to it would appear in the EE list of the robot. The Gripper subclass would have additional attributes that hold the finger sub-tree, and additional methods that allow a user program to control the gripper. We could use isinstance() to determine if the link is a regular link or a gripper.

Jesse 25/01/21

How to add a gripper to an existing robot, say a UR gripper to a Panda?