- Notifications
You must be signed in to change notification settings - Fork547
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 invokerobot.Gripper(link) wherelink 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 | +-F2whereF1 andF2 are end-effectors, becomes
L1--L2--L3--L4--GRIPPER1GRIPPER1+-F1 | +-F2andGRIPPER1 is now a named end-effector of the robot, ie. it can be used to compute FK, IK, Jacobians etc.
If theGripper class inherited fromELink 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 useisinstance() 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?