Skip to content

osudrl/Decentralized-Pinch-Lift-Move

Repository files navigation

Multi-Quadruped Cooperative Object Transport: Learning Decentralized Pinch-Lift-Move

decPLM — official codebase for the paper Multi-Quadruped Cooperative Object Transport: Learning Decentralized Pinch-Lift-Move (ICRA 2026).

This repository implements decentralized reinforcement learning for teams of quadruped-arm (Unitree Go2 + D1) robots that pinch, lift, and transport a rigid payload using only local sensing and contact—no inter-robot communication or centralized controller. Training uses two robots in Isaac Lab; evaluation supports both the two-robot task and an N-robot play environment to study scaling. The stack extends the DRAIL / Isaac Lab task and training layout under drail_extensions/.


Get Started

Directory structure

drail_extensions/
├── .vscode/                     # VS Code launch configurations (see Example Runs)
├── drail_extensions/
│   ├── core/                    # Shared Isaac Lab tasks, MDP utilities, assets
│   ├── research_bikram/       # decPLM tasks, scripts, pretrained checkpoints
drail_learning/                 # Learning code (e.g. rsl_rl, rsl_rl_drail)

Codebase setup

Git LFS

Larger assets (e.g. .usd models, pretrained .pt checkpoints) use Git LFS.

  1. Install Git LFS: GitHub: Installing Git LFS
  2. Initialize in the repo:
    git lfs install
  3. Pull LFS objects:
    git lfs pull
Conda environment
  1. Run:

    ./setup_conda_env.sh

    You will be prompted for an environment name.

  2. Activate it:

    conda activate <your_conda_env>
Launch configuration (optional)

VS Code–style launch files can be merged per extension. For example:

./activate_launch.sh core

You can also open .vscode/launch.json directly. The Example Runs below use the configuration names in that file.


Example runs

These match .vscode/launch.json: train, eval (2 robots), and eval (N robots).

Option A — VS Code: open Run and Debug, choose a configuration in the dropdown, then start (green play) or F5.

Option B — CLI: from the repository root, pass the configuration name exactly as in launch.json:

./run_launch_config.sh "<configuration name>"

Optional second argument: another launch file path, e.g. ./run_launch_config.sh "<name>" .vscode/launch.other.json.

Train

Configuration name:

Train Go2 D1 MARL Box Reach, Touch, Lift and Move

VS Code: select that name in the Run and Debug dropdown, then run.

CLI:

./run_launch_config.sh "Train Go2 D1 MARL Box Reach, Touch, Lift and Move"

Training logs to Weights & Biases (--logger wandb). Set WANDB_USERNAME as in launch.json env and authenticate on first run if prompted.

Eval — 2 robots (play)

Task: Go2-D1-MARL-Box-Reach-Touch-Lift-and-Move-Finetuning-Play-v0.

Configuration name:

Play Go2 D1 MARL Box Reach, Touch, Lift and Move

VS Code: select that name in the Run and Debug dropdown, then run.

CLI:

./run_launch_config.sh "Play Go2 D1 MARL Box Reach, Touch, Lift and Move"

The first launch can take a while before the GUI appears. DISPLAY is set in launch.json; change it if your display differs.

Eval — N robots (play)

Task: Go2-D1-MARL-Box-Reach-Touch-Lift-and-Move-Finetuning-N-Robots-Play-v0.

Configuration name:

Play Go2 D1 MARL Box Reach, Touch, Lift and Move (N Robots)

VS Code: select that name in the Run and Debug dropdown, then run.

CLI:

./run_launch_config.sh "Play Go2 D1 MARL Box Reach, Touch, Lift and Move (N Robots)"

Same notes as the 2-robot play for startup time and display.


Citation

@misc{pandit2025multiquadrupedcooperativeobjecttransport,
  title         = {Multi-Quadruped Cooperative Object Transport: Learning Decentralized Pinch-Lift-Move},
  author        = {Pandit, Bikram and Shrestha, Aayam Kumar and Fern, Alan},
  year          = {2025},
  eprint        = {2509.14342},
  archivePrefix = {arXiv},
  primaryClass  = {cs.RO},
  url           = {https://arxiv.org/abs/2509.14342}
}

About

Codebase for the published paper

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors