GraspDataGen is a standalone data generation tool but it can also be used to generate data for training new Grasp Gen models. It is designed to create collision-free, geometrically plausible grasps for triangle mesh objects and USD grippers, then validate them through physics simulation.
The system consists of three main components:
- Gripper Definition - Reads USD gripper files and extracts parameters needed for grasp generation
- Grasp Guess Generation - Creates geometrically plausible grasps for objects
- Grasp Simulation - Validates grasps through physics simulation using PhysX
Each component can be used independently or as part of a complete workflow.
For detailed installation instructions, see the Installation Guide. The guide covers:
- Docker installation (recommended) - Includes all dependencies and IsaacLab
- Integration with existing IsaacLab - Use with your current IsaacLab setup
The easiest way to get started using the full GraspDataGen pipeline is by using predefined gripper configurations (see: scripts/graspgen/gripper_configurations.py
) and the datagen.py
script:
python scripts/graspgen/datagen.py \
--gripper_config onrobot_rg6 \
--object_scales_json objects/datagen_example.json \
--object_root objects \
--num_grasps 1024 \
--max_num_envs 256
The datagen.py
script is an example of using the 3 components together to generate and verify grasps for multiple objects defined in a JSON file.
Note: The datagen.py
script handles objects differently: it loads multiple objects from a JSON file instead of a single object file. In contrast, individual components such as grasp_guess.py
and grasp_sim.py
use the --object_file
argument for single objects.
The system includes predefined configurations for common grippers:
robotiq_2f_85
- Robotiq 2F-85 parallel gripperonrobot_rg6
- OnRobot RG6 gripperfranka_panda
- Franka Panda gripper
Use --gripper_config <name>
to configure all gripper parameters based on the user definitions in scripts/graspgen/gripper_configurations.py
.
You can override any configuration parameter by providing it explicitly on the command line:
# Use onrobot_rg6 configuration but with custom parameters
python scripts/graspgen/datagen.py \
--gripper_config onrobot_rg6 \
--gripper_file bots/custom_gripper.usd \
--bite 0.02 \
--object_scales_json objects/datagen_example.json \
--object_root objects
This will use the onrobot_rg6 configuration as a base but override the gripper file and bite depth with your custom values.
Note: Read more about the parameter override system that applies to all components of GraspDataGen.
Alternatively, you can add any new gripper configuration needed by adding to GRIPPER_CONFIGS
in scripts/graspgen/gripper_configurations.py
:
'Robotiq_2F_85_msJul21': {
'gripper_file': 'bots/Robotiq_2F_85_msJul21.usd',
'finger_colliders': ['right_inner_finger', 'left_inner_finger'],
'base_frame': 'base_link',
'bite': 0.0185, # half of 37mm
'convergence_iterations': 172,
},
This custom config was used when experimenting with a gripper that had a stiff physics setup and needed more --convergence_iterations
to get a proper gripper definition.
- Complete Data Generation Pipeline - Generate and verify grasps for a list of objects and scales
This section describes the three main components of the GraspDataGen code base in the simplest standalone mode, and supplies documentation for a more detailed explanation and example.
The gripper definition module is used to read the USD of a gripper and prepare it for grasp generation and validation. The minimum you need to create a gripper definition is a USD file, and the names of the finger and base prims, and you can create the definition with the create_gripper_lab.py
script.
python scripts/graspgen/create_gripper_lab.py \
--gripper_file bots/onrobot_rg6.usd \
--finger_colliders right_inner_finger left_inner_finger \
--base_frame base_frame
- Overview and parameters - Details on what the component does and its parameters
- Gripper Setup Example - Describes in detail how the Robotiq 85 was prepared for use in GraspDataGen
- Running the Gripper Definition Component - Visually verify your gripper will work with the simulation
You can generate geometrically plausible, collision-free grasps with the grasp_guess.py
script.
python scripts/graspgen/grasp_guess.py \
--gripper_config onrobot_rg6 \
--object_file objects/banana.obj
- Overview and parameters - Details on what the component does and its parameters
- Single Object Example - Create collision free grasps for a single object
If the grasps you want to validate have been generated by the grasp_guess module, then the only parameter you need to set when running grasp_sim is --grasp_file
. The object and gripper settings will be gathered from the grasp file.
python scripts/graspgen/grasp_sim.py \
--grasp_file grasp_guess_data/onrobot_rg6/banana.yaml
- Overview and parameters - Details on what the component does and its parameters
- Verify Grasps with Simulation - Verify user defined grasps with simulation
📚 Comprehensive documentation is available in the docs/ directory:
- Documentation Overview - Complete guide to the system
- Installation Guide - Docker installation and IsaacLab integration
- Component Documentation - Detailed guides for each component
- Workflow Documentation - Complete workflow guides
- Tools Documentation - Utility tools for analysis, debugging, and data processing
- Tools Overview
- Compare Tools - Compare grasp simulations and gripper configurations
- Debug Tools - Debugging and troubleshooting tools
- Utility Tools - Data processing and workflow management
- Examples - Examples to model your own workflow after.
- Gripper Setup - Create a gripper definition and check it visually
- Running the Gripper Definition Component - Visually verify your gripper will work with the simulation
- Single Object Grasp Guess Generation - Create collision-free grasps for a single object
- Verify Grasps with Simulation - Verify user-defined grasps with simulation
- API Reference - Configuration and technical details
If you found this work to be useful, please considering citing:
@article{murali2025graspgen,
title={GraspGen: A Diffusion-based Framework for 6-DOF Grasping with On-Generator Training},
author={Murali, Adithyavairavan and Sundaralingam, Balakumar and Chao, Yu-Wei and Yamada, Jun and Yuan, Wentao and Carlson, Mark and Ramos, Fabio and Birchfield, Stan and Fox, Dieter and Eppner, Clemens},
journal={arXiv preprint arXiv:2507.13097},
url={https://arxiv.org/abs/2507.13097},
year={2025},
}