Only released in EOL distros:
Package Summary
Executes a grasp with the PR2 gripper, starting from the pre-grasp stage and using the tactile sensors to correct for unexpected contacts encountered along the way.
- Author: Kaijen Hsiao
- License: BSD
- Repository: wg-ros-pkg
- Source: svn https://code.ros.org/svn/wg-ros-pkg/stacks/pr2_object_manipulation/tags/pr2_object_manipulation-0.4.4
Package Summary
Executes a grasp with the PR2 gripper, starting from the pre-grasp stage and using the tactile sensors to correct for unexpected contacts encountered along the way.
- Author: Kaijen Hsiao
- License: BSD
- Source: svn https://code.ros.org/svn/wg-ros-pkg/stacks/pr2_object_manipulation/branches/0.5-branch
Package Summary
Executes a grasp with the PR2 gripper, starting from the pre-grasp stage and using the tactile sensors to correct for unexpected contacts encountered along the way.
- Author: Kaijen Hsiao
- License: BSD
- Source: svn https://code.ros.org/svn/wg-ros-pkg/stacks/pr2_object_manipulation/branches/0.6-branch
Package Summary
Executes a grasp with the PR2 gripper, starting from the pre-grasp stage and using the tactile sensors to correct for unexpected contacts encountered along the way.
- Author: Kaijen Hsiao
- License: BSD
- Source: git https://github.com/ros-interactive-manipulation/pr2_object_manipulation.git (branch: groovy-devel)
Overview
This package provides reactive grasp, reactive lift, and reactive approach actions, and compliant close and grasp adjustment services for the PR2 gripper. All of the above use the pressure sensors on the fingertips to improve object grasping. Details on this module can be found in the following paper: '''Contact-Reactive Grasping of Objects with Partial Shape Information'''.
In order to use these actions and services, you probably want to launch either
- pr2_tabletop_manipulation_launch/launch/pr2_tabletop_manipulation.launch (no slip detection)
or
- pr2_tabletop_manipulation_launch/launch/pr2_tabletop_manipulation_slip.launch (with slip detection)
NOTE: with trunk of c-turtle/d-turtle you must manually edit pr2_tabletop_manipulation.launch and set <arg name="use_slip_controllers" default="true"/>
ROS API
- The reactive approach action moves the gripper from a pre-grasp position to a grasp position while monitoring the fingertip sensors; unexpected tip contacts cause the gripper to back up and try to move around the object.
- The compliant close service closes the gripper while watching the fingertip sensors, so that seeing one contact early causes the arm to counter-move such that the finger that contacted first holds its position.
- The grasp adjustment service tries to adjust the position of the gripper relative to a grasp such that the contacts do not look unstable (contact only at the edge or only at the tip of the front of a fingertip sensor).
- The reactive grasp action executes reactive approach, followed by compliant close, followed by grasp adjustment, doing each step multiple times as necessary.
- The reactive lift action tries to lift an object while using the slip-avoidance controller in package slipgrip_controller to avoid crushing deformable objects more than is necessary to grasp them. It also leaves the slip-avoidance controller in slip-servo mode after it returns, so the controller can continue to adjust the grasp force as needed until the object is released.
API Stability
The ROS API is UNREVIEWED and UNSTABLE
ROS Parameters
Parameters
side_step (double, default: .015 m)- How far to move to the side (in the direction of the tip that contacted) during reactive approach.
- How far to back up when a tip contact is detected during reactive approach.
- How many times to attempt to back up and move around upon detecting unexpected contacts during reactive approach.
- How close you have to be to the goal before reactive approach will ignore tip contacts (and assume it's at a goal that may have desired tip contact).
- How far in contact has to be seen on the 5x3 front array of each fingertip pressure sensor (0=none/disable grasp adjustment in the gripper x-direction, 1=the row nearest to the tip,... 5=the row farthest in) for a grasp to be considered stable
- If the gripper closes to a value lower than this, it will assume that it is empty.
- If the gripper closes and has a value higher than this, it will assume that the grasp failed (useful if you know the width of the desired grasp).
- How far to move the gripper along the gripper x-axis during grasp adjustment when only tip contacts are seen
- How far to move the gripper along the gripper +-z-axis during grasp adjustment when only edge contacts are seen
- Number of times to attempt the reactive approach (upon failure, if this param is more than 1, the gripper will move the goal forward by forward_step and perform reactive approach again).
- If non-zero, how far to move the goal forward before attempting reactive approach again. If set to zero, defaults to 3 cm for grasps from the top and 6 cm for grasps from any other direction.
- The gripper force to use when closing hard (used every time if use_slip_controller is false; used only if the grasp still looks unstable after adjustment if use_slip_controller is true)
- If True, uses the pr2_gripper_fingersensor_action; if False, uses the default pr2_gripper_action. If this is False, reactive lift becomes just a Cartesian move up, and reactive grasp will always use close_force when closing on the object.
Action APIs
The reactive_grasp_server node provides implementations of SimpleActionServer (see actionlib documentation). The action servers for reactive grasp and reactive approach take in goals containing object_manipulation_msgs/ReactiveGraspGoal messages, and the action server for reactive lift takes in goals containing object_manipulation_msgs/ReactiveLiftGoal messages. You can communicate with these nodes over ROS directly, but the recommended way to send goals is by using the SimpleActionClient. Please see actionlib documentation for more information.
Reactive Grasp Action Subscribed Topics
reactive_grasp/right/goal (or reactive_grasp/left/goal) (object_manipulation_msgs/ReactiveGraspGoal)
- A goal for executing a reactive grasp.
- A request to cancel a specific goal.
Reactive Grasp Action Published Topics
reactive_grasp/right/status (or reactive_grasp/left/status) (actionlib_msgs/GoalStatusArray)
- Provides status information on the goals that are sent to the reactive grasp action.
- Contains a result code of type object_manipulation_msgs/ManipulationResult, that indicates the final result of the reactive grasp.
Reactive Approach Action Subscribed Topics
reactive_approach/right/goal (or reactive_approach/left/goal) (object_manipulation_msgs/ReactiveGraspGoal)
- A goal for executing a reactive approach.
- A request to cancel a specific goal.
Reactive Approach Action Published Topics
reactive_approach/right/status (or reactive_approach/left/status) (actionlib_msgs/GoalStatusArray)
- Provides status information on the goals that are sent to the reactive approach action.
- Contains a result code of type object_manipulation_msgs/ManipulationResult, that indicates the final result of the reactive approach.
Reactive Lift Action Subscribed Topics
reactive_lift/right/goal (or reactive_lift/left/goal) (object_manipulation_msgs/ReactiveLiftGoal)
- A goal for executing a reactive lift.
- A request to cancel a specific goal.
Reactive Lift Action Published Topics
reactive_lift/right/status (or reactive_lift/left/status) (actionlib_msgs/GoalStatusArray)
- Provides status information on the goals that are sent to the reactive lift action.
- Contains a result code of type object_manipulation_msgs/ManipulationResult, that indicates the final result of the reactive lift.
Services
Both the compliant close and grasp adjustment services use the std_srvs/Empty service. (If you use these services and would prefer that they be actions, or that they provide feedback of some sort, email hsiao@willowgarage.com with your suggestions, and they're likely to be implemented in a later release.)
The compliant close service is called /l_reactive_grasp/compliant_close (or /r_reactive_grasp/compliant_close) and the grasp adjustment service is called /l_reactive_grasp/grasp_adjustment (or r_reactive_grasp/grasp_adjustment).