Skip to content

Lei-Kun/RL-100

Repository files navigation

RL-100

Performant Robotic Manipulation with Real-World Reinforcement Learning

A unified library for diffusion / flow policy RL post-training, iterative offline data flywheels, and real-world robot RL.

Paper Project Page YouTube Twitter / X

Blog RL-100 Blog RL Zhihu Talk Slides Talk Bilibili Talk RoboPapers


Authors

Kun Lei*† · Huanyu Li* · Dongjie Yu* · Zhenyu Wei*
Lingxiao Guo · Zhennan Jiang · Ziyu Wang · Shiyu Liang · Huazhe Xu

* Equal contribution  ·  Project Lead

RL-100 repository overview


Overview

RL-100 is a real-world reinforcement learning framework for robotic manipulation built on top of diffusion and flow visuomotor policies. It targets deployment-level reliability, efficiency, and robustness through a unified imitation-to-reinforcement learning pipeline.

RL-100 aims to provide one of the most complete codebases for diffusion-policy RL and real-world robot RL post-training. The framework covers the following combinations in a unified repo.

The supported options below are designed to be freely combined across axes for different robot post-training setups.

All combinations are implemented through a compact offline RL / online RL training interface.

Axis Supported options
Policy backbone Diffusion policy
Flow policy
One-step deployment Diffusion-to-CM one-step distillation
Flow-to-flow one-step on-policy distillation
Observation modality 3D point cloud
2D RGB image
Control mode Action chunking
Single-action high-frequency control
Policy extraction strategy Policy gradient
IDQL-style extraction with reject sampling
Hybrid variants
RL stage Offline policy gradient
Online policy gradient
Training data regime Teleoperation datasets
Iterative offline rollout datasets
Online rollouts
Offline-to-online mixed training

Starting from human teleoperation demonstrations, RL-100 iteratively refines policies with offline RL, deploys them to collect new real-robot rollouts, merges those rollouts back into the offline dataset, and optionally performs lightweight online RL fine-tuning.


Table of Contents


0. Quick Install Pointer

For environment setup and dependency installation, see the Installation section and INSTALL.md. We recommend using adroit_door_medium as the first smoke-test task.

Download the Smoke-Test Dataset

The recommended adroit_door_medium zarr dataset is hosted on Hugging Face Datasets: leokk/RL-100-adroit-door-medium. From the repository root, download it with the Hugging Face CLI:

python -m pip install -U huggingface_hub
mkdir -p RL-100/data
hf download leokk/RL-100-adroit-door-medium \
  adroit_door_medium.zarr.tar.gz \
  --repo-type dataset \
  --local-dir /tmp
tar -xzf /tmp/adroit_door_medium.zarr.tar.gz -C RL-100/data

If direct URL downloads are more convenient in your environment, use:

mkdir -p RL-100/data
wget -O /tmp/adroit_door_medium.zarr.tar.gz \
  https://huggingface.co/datasets/leokk/RL-100-adroit-door-medium/resolve/main/adroit_door_medium.zarr.tar.gz
tar -xzf /tmp/adroit_door_medium.zarr.tar.gz -C RL-100/data

Optional checksum verification:

echo "73a7cd510a0715492e8f8041843ac51edf1a0feb6d30706a95a5e5857addef37  /tmp/adroit_door_medium.zarr.tar.gz" | sha256sum -c -

After extraction, the dataset should be available at:

Repo/RL-100/data/adroit_door_medium.zarr

The dataset follows the RL-100 repository/data release terms. The formal dataset license will be finalized together with the public repository license.

1. Project Overview

Why RL-100

RL-100 is designed as a full-stack real-world robot learning system, not only a collection of training scripts.

It combines

  • Behavior cloning
  • Offline policy-gradient RL
  • Iterative offline rollout data expansion
  • Online policy-gradient fine-tuning
  • One-step policy distillation

in one codebase. The goal is to make real-world robot policy post-training a repeatable pipeline rather than a set of disconnected scripts.

Repository Layout

RL-100/
├── rl_100/
│   ├── policy/              # 2D and 3D visuomotor policy implementations
│   ├── unidpg/              # offline / online RL training logic
│   └── config/              # policy, task, and training configs
├── scripts/
│   ├── Diffusion/           # diffusion policy training and online scripts
│   └── Flow/                # flow policy training and online scripts
├── tools/
│   └── teleop_off2off_data/ # teleoperation and iterative offline data flywheel tools
├── third_party/             # external environments and dependencies
└── visualizer/              # lightweight point-cloud visualizer

2. RL Post-Training Framework

RL-100 turns the capability matrix above into a practical post-training pipeline for adapting large visuomotor policies from logged data and online interaction. This section focuses on the algorithmic stages and launchers; the real-robot iterative offline data flywheel is described in Section 3.

Command Selector

Use the interactive selector to generate the launcher command from a few choices:

python scripts/select_recipe.py

It asks for:

# Choice
1DDIM  /  Flow
2Offline  /  Online
33D  /  2D
4Chunk action  /  Single action
5PG  /  PG + IDQL
6One-step distill: Yes  /  No

The first four choices select the launcher path. The PG/IDQL and distillation choices print launcher-level suggestions, because those settings are usually controlled inside the bash sweep. For example, the selector will remind you to use launcher flags for PG or PG + IDQL-style extraction; for offline distillation, first finish the offline sweep and parameter selection, then set distill_phase='after_offline'; for online distillation, set distill_phase='online'.

Example output
Command:
bash scripts/Flow/Online/3D/train_policy_online_flow_distill_online.sh rl100 adroit_door_medium 0112 100 8

Training Stages

The full algorithmic pipeline is organized around the following stages.

Stage 1 · Behavior Cloning Initialization

Train an initial visuomotor policy from demonstrations. This stage provides a stable policy prior before RL post-training.

Stage 2 · Offline RL Post-Training

Improve the initialized policy with offline policy-gradient updates on logged trajectories. This stage supports diffusion and flow policies, 2D and 3D observation backbones, chunk-action and single-action control, and optional IDQL-style extraction configured through the launcher sweep.

Example offline RL launchers:

# Single-GPU 3D diffusion offline RL.
bash scripts/Diffusion/Offline/3D/train_policy.sh rl100 adroit_door_medium 0112 100

# DDP two-stage 3D diffusion offline RL.
# The last argument is the number of GPUs.
bash scripts/Diffusion/Offline/3D/train_policy_two_stage.sh rl100 adroit_door_medium 0112 100 4

The 2D and chunk-action offline recipes also provide DDP-style launchers, including:

  • scripts/Diffusion/Offline/2D/train_policy_image_unet_two_stage.sh
  • scripts/Diffusion/Offline/2D/train_policy_image_unet_chunk_two_stage.sh
  • scripts/Diffusion/Offline/3D/train_policy_chunk_two_stage.sh

Stage 3 · Online RL Fine-Tuning

Continue improving the policy using real or simulated online rollouts. The current rollout policy collects transitions, and PPO-style updates reuse the existing rollout and log-probability flow.

This stage supports:

  • Online policy gradient.
  • Diffusion and flow online fine-tuning.
  • 2D and 3D online runners.
  • Chunked and high-frequency single-action control.
  • Lightweight online adaptation after offline RL.

Stage 4 · One-Step Policy Distillation

For deployment efficiency, RL-100 includes one-step policy extraction and distillation paths:

  • Diffusion-to-CM — distill a multi-step diffusion policy into a consistency-model style one-step policy.
  • Flow-to-flow — distill or extract a one-step flow policy through on-policy training.

These paths are intended for fast real-robot inference while retaining the behavior improved by RL post-training.

Stage 5 · Policy Extraction

RL-100 supports policy extraction strategies used in robot policy post-training:

  • Policy-gradient extraction from logged or online transitions.
  • IDQL-style extraction with reject sampling from higher-quality sampled trajectories.
  • Hybrid strategies that combine policy-gradient updates with filtered or selected data.

Configuration Entry Points

The main implementation and configuration entry points are:

RL-100/rl_100/policy/rl100_3d.py
RL-100/rl_100/policy/rl100_2d.py
RL-100/rl_100/unidpg/
RL-100/rl_100/config/
scripts/Diffusion/
scripts/Flow/

Detailed command lines and recommended configs are organized around these entry points and will be expanded as the release scripts are finalized.


3. Real-Robot Training and Data Flywheel

RL-100 includes a real-robot data flywheel for iterative offline reinforcement learning and final online improvement.

Stage Input Output
TeleoperationHuman demonstrationsRaw robot episodes
Data preparationRaw teleop data and rollout dataTraining zarr dataset
Offline RLMerged offline datasetImproved policy checkpoint
Real-robot rolloutOffline RL checkpointNew policy rollout dataset
Iterative offline dataset mergeBase zarr and new rollout h5 filesNext-round zarr dataset
Online RLOffline RL checkpoint and live rolloutsFinal deployment checkpoint
human teleoperation
   └─▶ raw teleop data
        └─▶ processed offline dataset
             └─▶ BC / offline RL training
                  └─▶ real-robot policy rollout
                       └─▶ rollout dataset
                            └─▶ merge with previous offline data
                                 └─▶ next offline RL round
                                      └─▶ online RL fine-tuning

Real-Robot Setup

This section tracks the hardware and runtime assumptions needed for real-robot deployment:

  • Robot platform and controller requirements.
  • Camera and point-cloud setup.
  • End-effector / hand / gripper setup.
  • Workspace limits and reset protocol.
  • Safety checks before running learned policies.

Teleoperation Data Collection

Teleoperation and data processing utilities live in:

tools/teleop_off2off_data/

The planned workflow is:

cd tools/teleop_off2off_data

# Collect teleoperation data
python teleop.py

# Or use the swapped teleoperation entry if required by the robot setup
python teleop_swapped.py

Hardware-specific command-line arguments should be documented next to the corresponding robot setup.

Data Preparation

The data preparation entry point is:

cd tools/teleop_off2off_data
python data_prepare.py --config configs/data_prepare.yaml

For the full teleoperation and iterative offline dataset workflow, see tools/teleop_off2off_data/DATA_PREPARE.md.

The tool supports three modes:

Mode Purpose
raw_to_npyConvert raw teleoperation episodes into processed .npy data.
build_zarrBuild a new training zarr from processed teleop data and selected rollout sources.
extend_zarrAppend new rollout sources to a base zarr and write a new zarr without modifying the base dataset in place.

Iterative Offline RL Data Flywheel

Iterative offline training is the main data flywheel used by the real-robot pipeline. A policy trained by offline RL is rolled out on the robot, the resulting trajectories are stored as rollout datasets, and the next offline RL round trains on the merged dataset.

Policy rollouts collected on the real robot are treated as named data sources in YAML:

rollout_sources:
  - name: off2off_004
    round: "004"
    enabled: true
    type: h5_rollout_dir
    path: /path/to/policy_rollouts/004/online_ft

Typical usage:

# Build a dataset from teleop data plus all enabled rollout sources.
python data_prepare.py --config configs/data_prepare.yaml --mode build_zarr --include-rollouts

# Extend an existing zarr with one new rollout source.
python data_prepare.py \
  --config configs/data_prepare.yaml \
  --mode extend_zarr \
  --rollout-source off2off_004 \
  --base-zarr-path /path/to/base.zarr \
  --zarr-output-path /path/to/new.zarr

The merge output preserves the training schema expected by RL-100:

data/
├── point_cloud, next_point_cloud
├── state, next_state
├── action, next_action
└── reward, return, done, timeout
meta/
└── episode_ends

Train on the Real-Robot Dataset

After generating a zarr dataset, point the RL-100 task config to the dataset path and run the selected offline RL script.

This section is reserved for the concrete real-robot training recipes:

  • Real-robot task config examples.
  • 3D point-cloud offline training commands.
  • 2D image offline training commands.
  • Recommended checkpoint selection and evaluation workflow.

Real-Robot Rollout Collection

Iterative offline rollout collection reuses the online training launcher as a real-robot data collection wrapper. In practice, load the offline-RL-finetuned policy checkpoint, enter the online script, and use the evaluation call before or during online fine-tuning to roll out the policy on the robot and save .h5 trajectories.

The real-robot offline and online training bash scripts are the same launchers introduced in Section 2. The only extra setting for iterative offline rollout collection is enabling data_collect=True in the collection run.

The offline and online launchers must describe the same policy network so that checkpoint weights load cleanly. Keep architecture-related options consistent between the offline training bash and the rollout-collection bash, including the policy family, observation modality, chunk/single-action setting, policy.model, policy.encoder_type, policy.use_vib, policy.use_recon, horizon, n_action_steps, n_obs_steps, encoder output size, and diffusion/flow scheduler settings. If the online bash changes these fields, the offline checkpoint may partially fail to load or silently run with a mismatched policy.

For RL data collection, the rollout policy should be stochastic rather than a deterministic evaluation policy. Set data_collect=True in the bash/config path used for collection. This enables two noise sources:

  • 🔴 Denoising/SDE action noise: the real-robot runner switches deterministic=False when data_collect=True, so policy.predict_action(...) samples stochastic denoising transitions.
  • 🔴 VIB latent noise: with policy.use_vib=True and ppo.force_stochastic_online=True, train_real.py keeps the observation encoder stochastic during eval(..., data_collect=True).

Typical real-robot collection settings:

data_collect=True
policy.use_vib=True
ppo.force_stochastic_online=True

Use offline_cp_timestamp / offline_cp_timestep or the corresponding checkpoint-loading fields in the online launcher to point to the selected offline RL checkpoint. The generated rollout .h5 files should then be added as a new rollout_sources entry in tools/teleop_off2off_data/configs/data_prepare.yaml.

Online Real-Robot Fine-Tuning

This section covers the final online RL stage:

  • Set data_collect=False before starting actual online RL fine-tuning. data_collect=True is only for iterative offline rollout dataset collection; leaving it enabled during online fine-tuning will make periodic eval calls run in collection mode and write rollout .h5 files.
  • Start from a BC or offline RL checkpoint.
  • Collect short online rollouts on the real robot.
  • Run online policy-gradient updates.
  • Evaluate and save deployment checkpoints.

Safety Notes

⚠ Before running policies on hardware:

  • Verify workspace bounds and action scaling.
  • Test controller latency and emergency stop.
  • Start with low speed and conservative action limits.
  • Run short supervised rollouts before autonomous long runs.
  • Do not deploy a checkpoint on hardware before validating observation normalization, action dimensions, and reset behavior.

Installation

See INSTALL.md for the full environment setup. We recommend using adroit_door_medium as the first smoke-test task.

The verified server setup uses:

Component Version
NVIDIA driver550.54.15
System CUDA12.4
Python3.8.20
PyTorch2.4.0+cu121

Minimal workflow:

conda create -n rl100 --clone dp3 -y
conda activate rl100

export REPO_ROOT=$(pwd)
export PYTHONPATH=${REPO_ROOT}/RL-100:${PYTHONPATH}
export LD_LIBRARY_PATH=${HOME}/.mujoco/mujoco210/bin:/usr/lib/nvidia:/usr/local/cuda/lib64:${LD_LIBRARY_PATH}
export MUJOCO_GL=egl
export PYOPENGL_PLATFORM=egl

python -m pip install -e third_party/dexart-release
python -m pip install -e third_party/gym-0.21.0
python -m pip install -e third_party/Metaworld
python -m pip install -e third_party/rrl-dependencies/mj_envs/.
python -m pip install -e third_party/rrl-dependencies/mjrl/.
python -m pip install -e third_party/mujoco-py-2.1.2.14
python -m pip install -e third_party/pytorch3d_simplified
python -m pip install -e visualizer

Sanity check:

python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"
python -c "import rl_100, zarr, hydra, einops, metaworld, mujoco_py, open3d as o3d; print('imports ok', o3d.__version__)"

Verified flow online distillation entry:

./scripts/Flow/Online/3D/train_policy_online_flow_distill_online.sh rl100 adroit_door_medium 0112 100 8

Citation

If you find this work useful, please cite:

@article{rl100,
  title  = {RL-100: Performant Robotic Manipulation with Real-World Reinforcement Learning},
  author = {Lei, Kun and Li, Huanyu and Yu, Dongjie and Wei, Zhenyu and Guo, Lingxiao and Jiang, Zhennan and Wang, Ziyu and Liang, Shiyu and Xu, Huazhe},
  journal = {arXiv preprint arXiv:2510.14830},
  year   = {2025}
}
Also consider citing the related RL post-training methods used by this project
@inproceedings{lei2024unio,
  title     = {Uni-O4: Unifying Online and Offline Deep Reinforcement Learning with Multi-Step On-Policy Optimization},
  author    = {Kun LEI and Zhengmao He and Chenhao Lu and Kaizhe Hu and Yang Gao and Huazhe Xu},
  booktitle = {The Twelfth International Conference on Learning Representations},
  year      = {2024},
  url       = {https://openreview.net/forum?id=tbFBh3LMKi}
}

@inproceedings{zhuang2023behavior,
  title     = {Behavior Proximal Policy Optimization},
  author    = {Zifeng Zhuang and Kun LEI and Jinxin Liu and Donglin Wang and Yilang Guo},
  booktitle = {The Eleventh International Conference on Learning Representations},
  year      = {2023},
  url       = {https://openreview.net/forum?id=3c13LptpIph}
}

Acknowledgements

RL-100 builds on prior work in Uni-O4, BPPO, DP3, Diffusion Policy, robotic manipulation environments, and reinforcement learning infrastructure. Detailed third-party acknowledgements and license notes will be maintained with the corresponding code and dependencies.


License

This project is released under the Apache License 2.0.

Made with care by the RL-100 team.

About

Official Implementation of the Science Robotics paper RL-100

Resources

License

Stars

181 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors