Revision 24 as of 2010-07-14 23:35:29

Clear message

Only released in EOL distros:  

object_manipulation: bayesian_grasp_planner | compressed_pointcloud_transport | current_state_validator | household_objects_database | household_objects_database_msgs | interactive_marker_helpers | object_manipulation_msgs | object_manipulator | point_cloud_server | probabilistic_grasp_planner | rviz_interaction_tools | static_transform_broadcaster

Package Summary

Core functionality for pickup and place tasks. Services Pickup and Place action goals.

ROS API

Actions and Services Provided

The object_manipulator provides two SimpleActionServers:

  • /object_manipulator_pickup: requests that an object be picked up.

    • action definition:
    • the object must be of type GraspableObject.msg

    • the object must have been previously segmented from the background, added to the collision environment and have a collision name defined
    • grasp definitions are encapsulated in the Grasp message

    • the action will then:
      • plan a list of potential grasps on the requested object, unless a list of desired grasps is already supplied by the caller in the pickup goal
      • test each grasp in the list for feasibility in the current environment
      • execute the first grasp deemed feasible
    • see message definitions for more details
  • /object_manipulator_place: requests that a previously picked up object be placed somewhere in the environment

    • action definition:
    • the object must be of type GraspableObject.msg

    • the object must have been previously segmented from the background, added to the collision environment and have a collision name defined
    • information is required about how the robot is currently holding the object, encapsulated in a Grasp message. In particular, if the object if held as the result of a previous Pickup action execution, this information is returned by the Pickup action.

    • the action will then:
      • check if it possible to place the object at the desired location without colliding with the environment
      • if place is deemed feasible, place the object at the desired location

Actions and Services Required

The object manipulator assumes a number of actions and services are available for it to call. Note that, for the PR2 robot equipped with a gripper, default implementations are available for all of these. The launch files in pr2_object_manipulation_launch will bring up all of these components and make sure all the topics are mapped correctly.

Services internal to the manipulation pipeline:

  • grasp planning
    • if no desired grasps are supplied by the caller of the Pickup action, the object manipulator will call a grasp planner to create its own list of grasps.
    • grasp planning is requested using a GraspPlanning service call

    • by default, the object manipulator will look for this service on the following topics:
      • /default_database_planner if the target object is a known model from a database of objects

      • /default_cluster_planner if the target object is an unrecognized point cloud

    • the manipulation pipeline provides default implementations for both of these cases.
  • hand posture controller for grasping
    • this component has the ability to:
      • shape the hand in the (pre-)grasp posture specified in a Grasp message, and to apply the desired joint efforts. This is performed using the GraspHandPostureExecutionAction

      • check if a grasp has been correctly executed using proprioception (joint values, tactile sensors, etc.). This query is performed using the GraspHandPostureQuery service.

    • a PR2 gripper-specific implementation is available in pr2_gripper_grasp_controller

  • reactive grasp (optional)
  • reactive lift (optional)
    • lifts an object while using tactile sensor feedback to apply the necessary levels of force to prevent object slip
    • implemented using the ReactiveLiftAction

    • a PR2 gripper-specific implementation is available in slipgrip_controller

Services external to the manipulation pipeline:

  • inverse kinematics
  • arm navigation
  • interpolated inverse kinematics
  • joint trajectory normalization and execution
  • collision map services
  • state validity check (i.e. check a given state for collisions)

Running the Manipulation Pipeline

To launch the manipulation pipeline and execute pickup and place tasks using the PR2 robot, tutorials and launch files are provided in pr2_tabletop_manipulation_apps.

Note that, in addition to the functionality covered here, the manipulation pipeline requires external input for sensor processing, identifying graspable objects, managing a collision environment, etc. A default implementation of these, sufficient for running the manipulation pipeline, is available in the tabletop_object_perception stack.