Robotics StackExchange | Archived questions

Help with procedure for simple pick and place task using MoveIt!

Greetings. In order to move forward with a pick-and-place task using kinetic, I'd like your help to understand the procedure I should employ. Describing the project is my first aim and then I ask for your input.

The manipulator is a UR 10 mounted on an AMR. For the Gazebo simulation, the end-of-arm has a Kinect model and a primitive, 1-DOF gripper. Our task is to pick up a cylindrical (tubular?) object and hang it on a peg. The current step I'd like to accomplish is to grab a tube by placing the gripper above it (pictured in the two images), open the gripper, move along the cylinder axis until the gripper is at the midpoint of the object, and then close the gripper.

image description

image description

The motion along the cylinder axis does not complete; it stops at the point when the gripper would collide with the Octomap voxels as shown in this image.

image description

It seems the pick and place pipeline (that's me using jargon I'm uncertain about) is unnecessarily complicated for this task; both the gripper and grasped object are very simple. Note that the cylinder in the screenshots is really a stack of two objects; that is, the object is only half as long as it looks in these pictures.

I'm using Python and thus moveit_commander. My guess for how to proceed is to call add_box (or add_mesh), get the gripper in position and close it, then call attach_box and I'm good to go? Is there a step I'm missing for having MoveIt! ignore collisions between the gripper and the object?

A seemingly unimportant question is what's up with the original state of my robot not being erased from RVIZ as shown in that middle picture?

Asked by raequin on 2018-05-03 18:49:10 UTC

Comments

Answers

If the cylinder you're trying to pickup is part of the collision scene that MoveIt it using then it will be impossible to grip it, as you have seen. When you're planning and executing the grasp motions you'll need to make sure that the cylinder is removed from the collision scene.

When the cylinder is grasped it should then be attached to the end effector of your arm so that it doesn't collide with other objects while it is being manipulated.

Hope this helps.

Asked by PeteBlackerThe3rd on 2018-05-04 05:49:15 UTC

Comments

That's helpful but I need a little more guidance. Can you tell me the steps to "make sure that the cylinder removed from the collision scene?"

Asked by raequin on 2018-05-04 07:13:15 UTC

It appears you're using an octomap generated from the kinect for automatic collision avoidance, is this correct? If so you'll need to either remove the cylinder from the octomap or disable octomap collision checking to be able to grasp the cylinder.

Asked by PeteBlackerThe3rd on 2018-05-04 09:35:21 UTC

Yes, the octamap comes from the Kinect data. Your comment makes sense, that one has to remove the voxels or get MoveIt! to ignore them in order for it to execute grasping. What I'm after are explicit steps required for making this happen. Is calling add_mesh sufficient?

Asked by raequin on 2018-05-06 22:12:19 UTC

Did you manage to remove the voxels?

Asked by yiying on 2020-08-11 16:40:54 UTC