Grasping using MoveIt!

One of the main applications of robot manipulators is picking an object and placing it. Grasping is the process of picking the object by the robot end-effector. It is actually a complex process because lot of constraints are required in picking an object.

We humans handle our grasping using our intelligence, but in the robot we have to create rules for it. One of the constraints in grasping is force; the gripper/end-effector should adjust the grasping force for picking the object but not make any deformation on the object while grasping.

One of the ROS packages for generating the grasp poses for simple objects such as blocks and cylinders, which can work along with the MoveIt! pick and place pipeline, is moveit_simple_grasps. It's a simple grasp generator. It takes the pose  of grasping object as input and generates the grasping sequences for picking the object. It filters and removes kinematically infeasible grasps via threaded IK solvers. The package provides grasp generators, grasp filters, and visualization tools.

This package already supports robots such as Baxter, REEM, and Clam arm. We can interface a custom arm to this package with a minor tweak of the package code. The package used for this experiment is inside the chapter codes. The main package code is on GitHub, and we can find it at: https://github.com/davetcoleman/moveit_simple_grasps

It is also available as a Debian package as moveit-simple-grasps, but it will be better to use our own customized package to work with this experiment. Copy the moveit_simple_grasps package from chapter_10_codes/ to your catkin workspace and build it using the catkin_make command

After building the package, we have to check whether the following launch file is working:

$ roslaunch seven_dof_arm_gazebo grasp_generator_server.launch

If it is working well, we will get log messages as in the following screenshot:

Figure 11 : Launching grasp generator server.

The definition of this launch file follows. Basically, it starts a grasp server that provides grasp combination to a grasp client node. We have to provide the planning group and the end-effector group inside this launch file, which is needed by the grasp server. The grasp server will execute feasible motion plan on the arm. It needs detailed configuration of the gripper:

<launch>
<arg name="robot" default="seven_dof_arm"/>
<arg name="group" default="arm"/>
<arg name="end_effector" default="gripper"/>


<node pkg="moveit_simple_grasps" type="moveit_simple_grasps_server" name="moveit_simple_grasps_server">
<param name="group" value="$(arg group)"/>
<param name="end_effector" value="$(arg end_effector)"/>


<rosparam command="load" file="$(find seven_dof_arm_gazebo)/config/$(arg robot)_grasp_data.yaml"/>


</node>


</launch>

Next is the definition of  seven_dof_arm_grasp_data.yaml and its explanation:

base_link: 'base_link'


gripper:


#The end effector name for grasping
end_effector_name: 'gripper'


# Gripper joints
joints: ['finger_joint1', 'finger_joint2']


#Posture of grippers before grasping
pregrasp_posture: [0.0, 0.0]




pregrasp_time_from_start: 4.0


grasp_posture: [1.0, 1.0]


grasp_time_from_start: 4.0


postplace_time_from_start: 4.0


# Desired pose from end effector to grasp [x, y, z] + [R, P, Y]
grasp_pose_to_eef: [0.0, 0.0, 0.0]
grasp_pose_to_eef_rotation: [0.0, 0.0, 0.0]


end_effector_parent_link: 'gripper_roll_link'

These parameters are all related to the grasping task. We can fine tune these parameters for better grasping.

Next, we will see how to do a pick and place task using this grasp server and a custom client.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.119.113.208