This is the official repository for the paper:
GAPG: Geometry Aware Push-Grasping Synergy for Goal-Oriented Manipulation in Clutter, Accepted by ICRA 2026.
- Paper: arXiv:2603.21195
- Video: Youtube
We propose a geometry-aware push-grasp synergy framework that leverages point cloud data to integrate grasp and push evaluation. Specifically, the grasp evaluation module analyzes the geometric relationship between the gripper point cloud and the points enclosed within its closing region to determine grasp feasibility and stability. Guided by this evaluation, the push evaluation module predicts how pushing actions influence future graspable space, enabling the robot to select actions that reliably transform non-graspable states into graspable ones. By jointly reasoning about geometry in both grasping and pushing, our framework achieves safer, more efficient, and more reliable manipulation in cluttered environments.

The code has been tested under the following environment:
| Component | Version |
|---|---|
| OS | Ubuntu 20.04 |
| Python | 3.8 |
| PyBullet | 3.2.7 |
| CUDA | 11.8 |
| GPU | NVIDIA GTX 4060Ti, 8 GB memory |
git clone https://github.com/xiaolijz/GAPG.git
cd GAPGconda create -n gapg python=3.8
conda activate gapgpip install torch==2.4.1+cu118 torchvision==0.19.1+cu118 torchaudio==2.4.1+cu118 --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txtrequirements.txt contains graspnetAPI, please modify it to your local path, for example:
graspnetAPI @ file:///home/your_user/your_project_path/models/graspnetAPIcd models/graspnet/pointnet2
python setup.py install
cd ../../..cd models/graspnet/knn
python setup.py install
cd ../../..conda install https://anaconda.org/pytorch3d/pytorch3d/0.7.8/download/linux-64/pytorch3d-0.7.8-py38_cu118_pyt241.tar.bz2
To collect grasp data for training the grasp module, run:
python collect_grasp_data.pyGraspNet pre-trained models can be downloaded from: Google Drive
(put the downloaded file in the models/graspnet/checkpoints directory)
To collect push data for training the push module, run:
python collect_push_data.pypython train_grasp.pypython train_push.pyIf you do not want to train the models from scratch, we provide pre-trained models.
Download link:
After downloading, please place the model files in the corresponding checkpoint directory according to your project structure.
To evaluate the trained or pre-trained model, run:
python grasp_push_eval.pyIf you find this work useful in your research, please consider citing our paper:
@article{xiao2026gapg,
title={GAPG: Geometry Aware Push-Grasping Synergy for Goal-Oriented Manipulation in Clutter},
author={Xiao, Lijingze and Du, Jinhong and Cong, Yang and Diao, Supeng and Ren, Yu},
journal={arXiv preprint arXiv:2603.21195},
year={2026}
}Some code in this repository is borrowed from open-source projects, including GarmentPile, Vision-Language-Grasping and GraspNet Baseline. We sincerely appreciate their valuable contributions to the community.