This repository enables to pick-and-place real-world tabletop objects by controlling a PR2 robot via ROS topics. Concretely, the current implementation was used for picking-and-placing tabletops objects from natural language. More information at the project page.
The node in this repository assumes that a segmented point cloud of the object to be picked and the object placing location are being published on their respective ROS topics. Grasping of objects is done by predicting grasp poses with GPD and closing the gripper gently by leveraging PR2's fingertip pressure sensors. Motion planning is handled by MoveIt.
If you find the code helpful please consider citing our work
@inproceedings{mees21iser,
author = {Oier Mees and Wolfram Burgard},
title = {Composing Pick-and-Place Tasks By Grounding Language},
booktitle = {Proceedings of the International Symposium on Experimental Robotics (ISER)},
year = 2021,
address = {La Valletta, Malta}
}
@inproceedings{mees20icra_placements,
author = {Oier Mees and Alp Emek and Johan Vertens and Wolfram Burgard},
title = {Learning Object Placements For Relational Instructions by Hallucinating Scene Representations},
booktitle = {Proceedings of the IEEE International Conference on Robotics and Automation (ICRA)},
year = 2020,
address = {Paris, France}
}
roslaunch pr2_moveit_config warehouse.launch moveit_warehouse_database_path:=~/warehouse_db
roslaunch pr2_moveit_config move_group.launch
roslaunch pr2_gripper_sensor_action pr2_gripper_sensor_actions.launch
rosrun table_detection table_detection_node _topic_in:=your_cloud
roslaunch pick_and_place pick_and_place.launch
The pick_and_place
node subscribes to the following topics:
/refexp_object (sensor_msgs::PointCloud2)
segmented point cloud of the object to be picked in the camera frame/placing_pose_pub (geometry_msgs::PointStamped)
location on which the picked object should be placed in the camera frame
The pick_and_place
node publishes to the following topics:
/placing_pose (geometry_msgs::PointStamped>)
location on which the picked object will be placed on the global frame, for visualization purposes/placing_pose_reached (std_msgs::Bool>)
boolean indicating if the placing pose was reached/picking_reached_pub (std_msgs::Bool>)
boolean indicating if the grasping pose was reached