{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/learning-synergies-between-pushing-and","title":"Learning Synergies between Pushing and Grasping with Self-supervised Deep Reinforcement Learning","arxiv_id":"1803.09956","date":"2018-03-27","proceeding":null,"authors":["Andy Zeng","Shuran Song","Stefan Welker","Johnny Lee","Alberto Rodriguez","Thomas Funkhouser"],"abstract":"Skilled robotic manipulation benefits from complex synergies between\nnon-prehensile (e.g. pushing) and prehensile (e.g. grasping) actions: pushing\ncan help rearrange cluttered objects to make space for arms and fingers;\nlikewise, grasping can help displace objects to make pushing movements more\nprecise and collision-free. In this work, we demonstrate that it is possible to\ndiscover and learn these synergies from scratch through model-free deep\nreinforcement learning. Our method involves training two fully convolutional\nnetworks that map from visual observations to actions: one infers the utility\nof pushes for a dense pixel-wise sampling of end effector orientations and\nlocations, while the other does the same for grasping. Both networks are\ntrained jointly in a Q-learning framework and are entirely self-supervised by\ntrial and error, where rewards are provided from successful grasps. In this\nway, our policy learns pushing motions that enable future grasps, while\nlearning grasps that can leverage past pushes. During picking experiments in\nboth simulation and real-world scenarios, we find that our system quickly\nlearns complex behaviors amid challenging cases of clutter, and achieves better\ngrasping success rates and picking efficiencies than baseline alternatives\nafter only a few hours of training. We further demonstrate that our method is\ncapable of generalizing to novel objects. Qualitative results (videos), code,\npre-trained models, and simulation environments are available at\nhttp://vpg.cs.princeton.edu","url_abs":"http://arxiv.org/abs/1803.09956v3","url_pdf":"http://arxiv.org/pdf/1803.09956v3.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"learning-synergies-between-pushing-and","repo_url":"https://github.com/andyzeng/visual-pushing-grasping","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"BSD-2-Clause"}},{"paper_slug":"learning-synergies-between-pushing-and","repo_url":"https://github.com/cww97/visual-language-grasping","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"BSD-2-Clause"}},{"paper_slug":"learning-synergies-between-pushing-and","repo_url":"https://github.com/jhu-lcsr/good_robot","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"BSD-2-Clause"}},{"paper_slug":"learning-synergies-between-pushing-and","repo_url":"https://github.com/rebekkaorth/robotics_pick_n_place_masterproject","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"gone","observed_at":"2026-09-18","how":"tree_404+repo_404"}}],"tasks":[{"task_slug":"deep-reinforcement-learning","task_name":"Deep Reinforcement Learning"},{"task_slug":"q-learning","task_name":"Q-Learning"},{"task_slug":"reinforcement-learning","task_name":"Reinforcement Learning"},{"task_slug":"reinforcement-learning-1","task_name":"Reinforcement Learning (RL)"},{"task_slug":"reinforcement-learning-2","task_name":"reinforcement-learning"}],"methods":[{"method_slug":"q-learning","method_name":"Q-Learning"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=1803.09956","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1803.09956"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/jhu-lcsr/good_robot","reach":{"status":"ok","spdx":"BSD-2-Clause"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/rebekkaorth/robotics_pick_n_place_masterproject","reach":{"status":"gone","observed_at":"2026-09-18","how":"tree_404+repo_404"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/cww97/visual-language-grasping","reach":{"status":"ok","spdx":"BSD-2-Clause"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/andyzeng/visual-pushing-grasping","reach":{"status":"ok","spdx":"BSD-2-Clause"}}],"summary":{"unverified":11},"by_repo_kind":{"official":{"samples":4,"ran":0,"repositories":1},"listed":{"samples":7,"ran":0,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"2f66e33eb753b345","entry":"check_success","repo":"jhu-lcsr/good_robot","repo_kind":"listed","path":"annotate_data.py","file_url":"https://github.com/jhu-lcsr/good_robot/blob/HEAD/annotate_data.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"2f66e33eb753b345"}},{"code_sha256_prefix":"d13a0b08c052b275","entry":"gaussian_augment","repo":"jhu-lcsr/good_robot","repo_kind":"listed","path":"annotate_data.py","file_url":"https://github.com/jhu-lcsr/good_robot/blob/HEAD/annotate_data.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"d13a0b08c052b275"}},{"code_sha256_prefix":"40580a929888a5e6","entry":"get_affordance_vis","repo":"andyzeng/visual-pushing-grasping","repo_kind":"official","path":"utils.py","file_url":"https://github.com/andyzeng/visual-pushing-grasping/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"40580a929888a5e6"}},{"code_sha256_prefix":"c5da0ddce6880977","entry":"get_heightmap","repo":"andyzeng/visual-pushing-grasping","repo_kind":"official","path":"utils.py","file_url":"https://github.com/andyzeng/visual-pushing-grasping/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"c5da0ddce6880977"}},{"code_sha256_prefix":"2008ee658029d65e","entry":"get_pointcloud","repo":"andyzeng/visual-pushing-grasping","repo_kind":"official","path":"utils.py","file_url":"https://github.com/andyzeng/visual-pushing-grasping/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"2008ee658029d65e"}},{"code_sha256_prefix":"66b69e6aec040eec","entry":"get_rigid_transform","repo":"andyzeng/visual-pushing-grasping","repo_kind":"official","path":"calibrate.py","file_url":"https://github.com/andyzeng/visual-pushing-grasping/blob/HEAD/calibrate.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"66b69e6aec040eec"}},{"code_sha256_prefix":"cda60434af4d961f","entry":"orientation_and_angle_to_push_direction","repo":"jhu-lcsr/good_robot","repo_kind":"listed","path":"old_robot.py","file_url":"https://github.com/jhu-lcsr/good_robot/blob/HEAD/old_robot.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"cda60434af4d961f"}},{"code_sha256_prefix":"b13efc4d8c9255f5","entry":"rotate_pair","repo":"jhu-lcsr/good_robot","repo_kind":"listed","path":"annotate_data.py","file_url":"https://github.com/jhu-lcsr/good_robot/blob/HEAD/annotate_data.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"b13efc4d8c9255f5"}},{"code_sha256_prefix":"c3fb49ac0bbf4b2f","entry":"tile_vector_as_image_channels_torch","repo":"jhu-lcsr/good_robot","repo_kind":"listed","path":"models.py","file_url":"https://github.com/jhu-lcsr/good_robot/blob/HEAD/models.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"c3fb49ac0bbf4b2f"}},{"code_sha256_prefix":"74eb38f3b409fc2f","entry":"trunk_net","repo":"jhu-lcsr/good_robot","repo_kind":"listed","path":"models.py","file_url":"https://github.com/jhu-lcsr/good_robot/blob/HEAD/models.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"74eb38f3b409fc2f"}},{"code_sha256_prefix":"1d9bce5bd776f699","entry":"vector_block","repo":"jhu-lcsr/good_robot","repo_kind":"listed","path":"models.py","file_url":"https://github.com/jhu-lcsr/good_robot/blob/HEAD/models.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-2-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"1d9bce5bd776f699"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}