Grasp Execution

Overview

The Easy Manipulation Deployment Grasp Execution package was developed to provide a robust path planning process to navigate robot to the taget location for grasping. The package serves as a grasp execution simulator using Moveit2 path planners and the results from the Grasp Planner.

Note

It is recommended that you use scene packages generated by the Workcell Builder. If you are using a robot, make sure you have the moveit config folder (check out Workcell Initialization for more information about the moveit_config folder)

Benefits of EMD Grasp Execution

1. Seamless intergration with EMD Grasp Planner

The EMD Grasp Execution package communicates with the Grasp Planner package through the subscription to a single ROS2 topic with the GraspTask.msg type. Details of the GraspTask Message can be found here: Grasp Planner Output Message Types

2. Dynamic Safety Capabilities

In real life use cases, collaborative robots often operate closely with human operators or reside in an ever-changing environment. There is thus a need for the robot to be equipped with the dynamic safety capability, to detect possible collision during its trajectory execution and avoid these occurring obstacles.

Grasp Execution provides users with a vision based dynamic collision avoidance capability using Octomaps. When a collision has been deemed to occur in the trajectory of the robot, the dynamic safety module will be triggered. This would either stop the robot to avoid collision, or call for the dynamic replanning of its trajectory given the new collision objects in the scene.

Package configuration

Before running the grasp execution package, make sure that you have a scene package in the workcell/src/scenes/ folder.

Launch file

Open the grasp_execution.launch.py file in /workcell/src/easy_manipulation_deployment/grasp_execution/example/launch/ and change the parameters accordingly.

scene_pkg

The name of your scene package

Example:

scene_pkg = 'ur5_2f_test'

base_link

The base link of the robot connected to the table surface

Example:

robot_base_link = 'base_link'

grasp_execution_node.cpp

Open the demo_node.cpp file in /workcell/src/easy_manipulation_deployment/grasp_execution/example/src/ and change the parameters accordingly.

static const char PLANNING_GROUP[] = "manipulator";

static const char EE_LINK[] = "ee_palm";

static const float CLEARANCE = 0.1;

static const char GRASP_TASK_TOPIC[] = "grasp_tasks";

PLANNING_GROUP

Robot group state that is declared in the srdf. for example, in the file ur5_moveit_config/config/ur5.srdf.xacro:

<!--GROUPS: Representation of a set of joints and links. This can be useful for specifying DOF to plan for, defining arms, end effectors, etc-->
<group name="manipulator">
    <chain base_link="base_link" tip_link="ee_link" />
</group>

the planning_group is then manipulator

EE_LINK

Tip link of end effector

CLEARANCE

Distance above the object that the end effector would plan to before moving down to pick the object up

GRASP_TASK_TOPIC

ROS2 topic from the Grasp Planning component that will output the GraspTask message

Running grasp execution

ros2 launch grasp_execution grasp_execution.launch.py

You should then see RViz launch with the initial workcell scene, where the robot arm is at its home state.

Note

Ensure that on your terminal, the ROS2 distribution is sourced, Moveit2 is sourced, and the workspace is built and sourced as well.

Publishing a Fake Task

ros2 launch grasp_execution fake_task_publisher.launch.xml

This publishes an object for the robot to conduct a pick-and-place operation. The location and dimensions of the object can be configured in grasp_execution/example/config/fake_grasp_pose_publisher.yaml as described in the configuration page.