Metapackage for the heuristic-based AGILE grasp detector and classifier. Includes the original AGILE package, the heuristic classifier package, and other supporting functionality. This metapackage includes the grasp calculator for the Point-and-Click method for 6-DoF end-effector positioning described in A Comparison of Remote Robot Teleoperation Interfaces for General Object Manipulation, published in HRI 2017.
This metapackage extends AGILE grasp to use heuristic-based grasp evaluation in place of AGILE's grasp classifier. Development of this package included adding extra ROS messages, services, and actionlib to the original AGILE code to facilitate communication with the heurist-based evaluator. Also included are additional packages potentially useful for testing and deployment.
- agile_grasp_base
- rail_agile_grasp_msgs
- rail_agile_nodes
- hlpr_moveit_wrapper
- common_actions
- primitive_actions
- Installation
- Startup
This is the original agile grasp package, modified with an action server to allow grasps to be found on demand. More details on the functionality of this package can be found in the main AGILE_grasp, on which this was based.
This package contains action definitions, messages, and services used throughout the metapackage. For more details, check the message definitions themselves.
The primary node of this package, grasp_sampler, implements grasp clustering and rating based on a set of heuristics designed to select effective grasps for man-made objects. More details on the heuristics can be found in our paper, A Comparison of Remote Robot Teleoperation Interfaces for General Object Manipulation, to be published in HRI2017.
The package also includes optional supporting nodes for filtering point clouds, creating clickable point clouds via interactive marker server, and interleaving point clouds from multiple sources. Details of each node can be found below.
This node performs grasp candidate evaluation by evaluating a set of heuristics on grasp poses sampled from the grasp hypotheses determined by the AGILE_grasp base package. Relevant parameters, action servers, topics, and services are as follows:
- Subscribed Topics
/camera/depth_registered/points
(sensor_msgs/PointCloud2)
point cloud subscriber; the topic can be set by changing the parametercloud_topic
or by calling thechange_point_cloud_topic
service./find_grasps/grasps_with_workspace
(rail_agile_grasp_msgs/GraspsWithWorkspace)
the set of grasp hypothese calculated by AGILE grasp, to be sampled from and evaluated by this node- Published Topics
sampled_grasps
(geometry_msgs/PoseArray)
the final set of grasps, ordered from best to worst- Services
change_point_cloud_topic
(rail_agile_grasp_msgs/ChangePointCloud)
service for switching the input point cloud- Parameters
cloud_topic
(string, "/camera/depth_registered/points")
initial point cloud topic to subscribe toneighborhood_radius
(double, 0.02)
radius defining the sphere of a grasp's neighborhood, in meters, used for clustering grasp hypothesesorientation_threshold
(double, 0.1)
maximum difference, in radians, between two grasps' orientations to be clusteredcluster_size
(int, 5)
maximum number of grasp hypotheses that can compose one clusterremove_table
(boolean, false)
option to remove the dominant plane from the point cloud within the given workspace before calculating the object orientaion heuristic; it's recommended to set this to true if the grasps are being used for tabletop pick-and-place applications.
This node facilitates clicking on point clouds by either creating an interactive marker server with a clickable point cloud, or by running action servers that take clicked point information and return points in 3D space. Relevant parameters, action servers, topics, and services are as follows:
- Action Servers
click_image_point
(rail_agile_grasp_msgs/ClickImagePointAction)
click event from clicking on an image; calculates gasps using AGILE and thegrasp_sampler
node on a workspace centered on the clicked pointclick_image_point_cp
(rail_agile_grasp_msgs/ClickImagePointAction)
click event from clicking on an image; initializes a constrained positioning marker at the clicked point, see the remote_manipulation_markers package for details- Subscribed Topics
/camera/depth_registered/points
(sensor_msgs/PointCloud2)
point cloud subscriber; the topic can be set by changing the parametercloud_topic
or by calling thechange_point_cloud_topic
service.- Services
change_point_cloud_topic
(rail_agile_grasp_msgs/ChangePointCloud)
service for switching the input point cloud- `request_marker_update'(std_srvs/Empty)
update the clickable point cloud marker on request - Parameters
cloud_topic
(string, "/camera/depth_registered/points")
initial point cloud topic to subscribe to
This node performs voxel grid filtering on a given input point cloud. Relevant parameters, action servers, topics, and services are as follows:
- Subscribed Topics
/camera/depth_registered/points
(sensor_msgs/PointCloud2)
point cloud subscriber; the topic can be set by changing the parametercloud_topic
- Published Topics
filtered_cloud
(sensor_msgs/PointCloud2)
voxel grid filtered point cloud- Parameters
cloud_topic
(string, "/camera/depth_registered/points")
initial point cloud topic to subscribe to
This node subscribes to two point cloud sources and combines them into a single point cloud with a common frame of reference. Relevant parameters, action servers, topics, and services are as follows:
- Subscribed Topics
/camera1/depth_registered/points
(sensor_msgs/PointCloud2)
point cloud subscriber; the topic can be set by changing the parametercloud1_topic
/camera2/depth_registered/points
(sensor_msgs/PointCloud2)
point cloud subscriber; the topic can be set by changing the parametercloud2_topic
- Published Topics
interleaved_clouds
(sensor_msgs/PointCloud2)
combined point cloud- Parameters
cloud1_topic
(string, "/camera1/depth_registered/points")
initial point cloud topic to subscribe tocloud2_topic
(string, "/camera2/depth_registered/points")
initial point cloud topic to subscribe to
Clone the package into your catkin workspace and build it as follows:
cd (your catkin workspace)/src
git clone https://github.com/GT-RAIL/rail_agile_grasp.git
cd ..
catkin_make
The rail_agile_nodes
package contains two launch files that will bring up the main functionality of the package. find_grasps.launch
will run the base AGILE code and the grasp_sampler
node for sampling and ranking the AGILE hypotheses by heuristics. It is run as follows:
roslaunch rviz rviz
roslaunch freenect_launch freenect.launch
roslaunch rail_agile_nodes find_grasps.launch
rosrun rail_agile_nodes point_cloud_clicker
rosrun rail_agile_nodes ClickedImageClient.cpp
rolaunch remote_manipulation_markers point_and_click.launch
rosservice call /point_and_click/cycle_grasps true
- Go away
two_cameras.launch
will run the same thing, but will launch two depth cameras and add the intermediate step of point cloud interleaving.
roslaunch rail_agile_nodes two_cameras.launch
Supporting nodes can be run individually using rosrun
.