-
Notifications
You must be signed in to change notification settings - Fork 454
Grippers
Note, this is a discussion document. Some of this has not been implemented yet, or we are experimenting with implementation
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.
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.
How to add a gripper to an existing robot, say a UR gripper to a Panda?
- Frequently asked questions (FAQ)
- Documentation Style Guide
- Typing Style Guide
- Background
- Key concepts
- Introduction to robot and link classes
- Working with Jupyter
- Working from the command line
- What about Simulink?
- How to contribute
- Common Issues
- Contributors