Examples:DoorManipulation
From OpenRAVE
by Rosen Diankov
Contents |
Running the example
Octave/Matlab: (first start openrave)
cd `openrave-config --octave-dir`/examples/doormanipulation
octave --eval "rundoormanipulation(0,1)"
octave --eval "rundoormanipulation(0,0)"
The first parameter to rundoormanipulation controls the planning algorithm:
- 0 - relaxed caging algoirthm using Randomized A* - fast (on average) and great success rate
- 1 - discrete caging algorithm using Depth First Search - slow and good success rate
- 2 - simple door opening algorithm - fast but fails often
Description
Challenges to Door Opening
Having a robot firmly grasp a door handle has many problems:
- Errors in execution might damage the robot or the handle if the real robot is controlled open-loop (which is very common)
- Because a fixed grasp means robot hand needs to follow the door motion exactly, the possible places the robot can be to successfully open doors are very small. This is because the kinematics of the robot arm constraint the motion of the hand.
- If robot is mobile, navigation algorithms might not get robot at desired place. If the feasibility region is small, the robot might fail to open the door from where it current stands.
A door is said to be caged by a hand if its configuration space is greatly limited by the hand. Caging grasps is the set of all grasps that cage the door handle at any configuration. There's a couple of advantages to using caging grasps:
- Small errors are ok because the robot doesn’t have a firm grip on the handle. But because the door is caged, the robot still controls the motion of the door.
- Robot’s feasibility space greatly increases making planning robust against navigation errors.
Outline of Caging Algorithm
This example implements the method of Diankov et. al:
- Rosen Diankov, Siddhartha Srinivasa, Dave Ferguson, James Kuffner. Manipulation Planning with Caging Grasps. IEEE-RAS Intl. Conf. on Humanoid Robots, December 2008.
The basic outline of the paper is:
- Build caging grasp set for every object-robot hand pair
- Extract a contact grasp set, which constrains door movement
- Plan simultaneously with door and robot to get the door to its target configuration space (open or close).
- Final grasp has to be in contact grasp set, so that door position can be known.
Searching for Caging Grasps
Given an initial caging configuration, use Rapidly-Exploring Random Trees to explore the space of all cages. Mark cages that put the door in form closure as contact grasps. In a form closure grasp, the hand does not allow for any motion of the door. To remove grasps that are prone to slipping, the example randomly jitters the hand for every configuration to see if it silps.
To make grasps for manus hand, type:
MakeManusHandTables()
To make grasps for Barrett Hand, type:
MakeBarrettHandTables()
Planning with Caging Grasps
There are two main algorithms for relaxing the task constraints with caging grasps:
- A discrete planner based on Depth First Search
- Trajectory door should follow is given.
- Manipulator follows door such that its hand cages it at every configuration. Kinematics constraints of the arm have to be kept.
- A randomized algorithm based on Randomized A*
- No trajectory required, which allows the robot to backtrack when necessary.
- On average, faster than discrete method, but has long tails.
Given three scenes, the robot was randomly positioned and statistics were recorded of how often it successfully opened the door. The regions describing the success rates are shown below (hot is higher chances of achieving the task).


