Skip to content

PartyPenguin/tiago_dual_pick_place

 
 

Repository files navigation

Tiago++ Pick & Place pipeline

Description

A ROS pick-and-place implementation for a Tiago++ mobile manipulation platform using MoveIt! and PlayMotion.

Tiago++ Pick-Place

This repository is built on the Pal Robotics tiago_pick_demo. While the demo was made for the single arm Tiago and ROS Kinetic, this package is for the (dual arm) Tiago++ and ROS Melodic!

Additional features:

  • No requirement for aruco marker detection
  • Pick/Place of scene objects (by object name)
  • Pick/Place by sending a custom pose

Installation

Follow the official tutorial.

Configuration

Configuring motion

config/pick_motions: defines a pre-grasp position and the final go-to position after picking up the object.

config/pick_place_params: defines the tool frame, joints, gripper closure, direction of the grasp approach and direction for exiting the grasp (pre-grasp / post-grasp).

Grasp generation

By default a spherical grasp generator is used. This generator creates possible grasps on a hemisphere around the target pose. dynamic reconfigure is used to configure the grasp generation. You can also change the parameters statically by modifying cfg/Grasps.cfg.

Usage

(Optional) Launch simulation

roslaunch tiago_dual_pick_place pick_place_sim.launch

Launch Pick & Place pipeline

roslaunch tiago_dual_pick_place pick_place.launch

This command starts both the Pick & Place server and client.

Pick

There are two ways to pick: Either by specifing the name of the object in the scene or by specifying the grasp pose.

Pick an object by name

In this case the object to be grasped has to exist in the scene. The object could be a virtual copy of an object in the real world.

To pick an object with the name 'Box_0' using the left arm: rosservice call /pick_object left Box_0

To pick an object with the name 'Box_1' using the right arm: rosservice call /pick_object right Box_0

To pick two objects, first object with left arm, second object with right arm: rosservice call /pick_objects Box_0 Box_1

Pick by grasp pose

In this case a grasp pose (position and orientation) is directly given. Since the pipeline works with scene objects, a virtual object is constructed in the scene around the given pose and then picked up. Since this virtual object represents the grasp and not any actual object you can completely ignore the visualization.

  1. Publish message with pose of object:
    rostopic pub /grasp/pose geometry_msgs/PoseStamped '{header: {seq: 0, stamp: {secs: 0, nsecs: 0}, frame_id: base_footprint}, pose: {position: {x: 0.2, y: 0.2, z: 0.8},orientation: {x: 0.0, y: 0.0, z: 0.0, w: 0.0}}}' (You need to change position and orientation for the desired grasp. These can also be defined in a different reference frame by changing 'frame_id'.)

  2. Call the pick service, in order to perform the actual grasp:

  • Left arm: rosservice call /pick left
  • Right arm: rosservice call /pick right

Place

Placing requires a target pose. If no target pose is sent within 10 seconds, the original pose of the object (before being picking up) is used.

  1. (Optional) Publish the pose for placing:
    rostopic pub /place/pose geometry_msgs/PoseStamped '{header: {seq: 0, stamp: {secs: 0, nsecs: 0}, frame_id: base_footprint}, pose: {position: {x: 0.2, y: 0.2, z: 0.8},orientation: {x: 0.0, y: 0.0, z: 0.0, w: 0.0}}}'

  2. Call the place service, either by specifiying left/right arm or the object name:

    1. To place at the specified target pose (on timeout: the pickup pose): rosservice call /place left
    2. To place an object with the name 'Box_0' at the specified pose (on timeout: the pickup pose): rosservice call /place_object 'Box_0'

About

Pick & Place pipeline for Tiago++

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 98.1%
  • CMake 1.5%
  • Shell 0.4%