Hopper-v5
gravity, morphology, actuator gear
A Unified Library and Benchmark for Robust Reinforcement Learning Algorithms
Robust online, offline and safe methods in one reusable codebase.
Shifts that compose, from standard control to Isaac Lab and VLA tasks.
Where current robust methods remain effective, and where gaps persist.
Quick start
RobustRLlib is installed from a source checkout and used from the root of the checkout. The tutorial quick start runs these steps with their outputs.
# Python 3.8 or newer; the documentation was run with 3.11
conda create -n robustrllib python=3.11 && conda activate robustrllib
pip install -e ".[mujoco]"
pip install -r requirements.txt
pip install pyyaml torch minari
from robustrllib import make_robust, ShiftSpec # A deployment condition is an ordered list of shifts; the list order is the stacking order. env = make_robust("Hopper-v5", shifts=[ ShiftSpec("dynamics", "scale", {"param": "gravity", "factor": 1.3}), # Dynamic shift ShiftSpec("observation", "gauss", {"sigma": 0.05}), # Observation shift ], seed=0) obs, info = env.reset(seed=0) obs, reward, terminated, truncated, info = env.step(env.action_space.sample()) print(round(env.unwrapped.model.opt.gravity[2], 3)) -12.753
# One experiment card names an algorithm, a task and an evaluation grid. python baselines/train.py -c robustrllib/configs/experiment/rorl_hopper.yaml --seed 0 # The frozen checkpoint is scored on every condition of the grid: 20 paired episodes per # condition, the same episodes for every method, unclipped normalized score. python baselines/evaluate.py --run runs/rorl_hopper/seed0
make_robust stacks the declared shifts on the environment;
the evaluator runs the frozen checkpoint on every condition of the grid and writes one result file.Algorithms
The sixteen robust methods are grouped by data regime and by where robustness enters: the learner, the environment it collects from, or the data it learns from. Each row names the shift the method claims and the base algorithm it is built on.
| Family | Method | Claimed robustness | Base algorithm | Shifted-env rollout | Adversarial network | Learned model |
|---|---|---|---|---|---|---|
| Robust Onlinelearns through continued environment interaction | ||||||
| Learner-centric | ATLA | Observation | PPO | ✓ | ||
| ATLA-SA | Observation | PPO | ✓ | |||
| RSC | Semantic | SAC | ✓ | |||
| Environment-centric | RARL | Dynamic | PPO / TRPO | ✓ | ✓ | |
| DR | Dynamic | SAC / PPO | ✓ | |||
| Robust Offlinelearns from a fixed dataset without environment interaction | ||||||
| Learner-centric | RFQI | Dynamic | FQI | |||
| RORL | Observation | SAC | ||||
| ATLA-IQL | Observation | IQL | ✓ | |||
| Data-centric | RSC-IQL | Semantic | IQL | ✓ | ||
| RAMBO | Dynamic | SAC | ✓ | ✓ | ||
| Data-centric (generative model) | ROMB | Dynamic | IQL | ✓ | ✓ | |
| FWM | Dynamic | IQL | ✓ | |||
| PLR-PVL | Dynamic | IQL | ✓ | |||
| Robust Safeadds a cost constraint that must hold under shift | ||||||
| Robust safe | RAMU | Dynamic | PPO | |||
| SPiDR | Dynamic | PPO | ✓ | ✓ | ||
Shifted-env rollout: rollouts collected from a deliberately perturbed environment. Adversarial network: a learned adversary optimised against the policy. Learned model: a trained next-state predictor used by the robustness mechanism. The six standard references (IQL, TD3+BC, MOPO, SynthER, PPO, SAC) are on the algorithm pages.
Shift toolbox
A shift has a source, which says what is perturbed, and a mode, which says how the intervention is built: stochastic, adversarial, parametric, non-stationary through a schedule, or a composition of several shifts. A shifted environment is a base task with one wrapper per shift; the task code is not modified.
| Shift source | What it perturbs | Target | Mode names | Demo |
|---|---|---|---|---|
| Dynamic shift | Physical parameters, external forces, the simulator state. | dynamics, transition | gauss uniform loguniform push scale set translate | |
CarRacing: shifted vehicle dynamics change the response to steering and throttle, making the car deviate from its nominal path. Declare it from robustrllib import make_robust, ShiftSpec
shift = ShiftSpec("dynamics", "scale",
{"param": "gravity", "factor": 1.3}) | ||||
| Observation shift | The observation returned to the policy. | observation | gauss uniform relative bias adversarial shift | |
Hopper under nominal and noisy observations (Gaussian noise, sigma 0.10, on every observation). The shift in this clip env = make_robust("Hopper-v5", shifts=[
ShiftSpec("observation", "gauss", {"sigma": 0.10}),
], seed=0) | ||||
| Action shift | The action between policy and simulator. | action | gauss uniform adversarial oppose rotate oppose_goal shift | |
PointMaze under nominal and shifted actions. Declare it from robustrllib import make_robust, ShiftSpec
shift = ShiftSpec("action", "shift",
{"shift": 0.05, "clip_first": True}) | ||||
| Reward/cost shift | The reward, or the cost of a constrained task. | reward, cost | gauss uniform shift | |
Hopper policies trained with the reward on time and with the reward released every 64 steps, both on the nominal task. The shift in this clip # train_shifts.yaml, arm reward_delay_64
ShiftSpec("latency", "delay", {"steps": 64, "release": "interval"})
python baselines/train.py -c robustrllib/configs/experiment/sac_hopper.yaml \
--seed 0 --train-shift reward_delay_64 | ||||
| Latency shift | When actions, observations and rewards arrive. | latency | buffer substep interp fixed delay | |
HalfCheetah: actions reach the simulator 0.20–0.40 s late, disrupting gait timing and forward motion. Declare it from robustrllib import make_robust, ShiftSpec
shift = ShiftSpec("latency", "fixed", {"steps": 2}) | ||||
| Semantic shift | Colours, lights, cameras and object positions. | appearance | gauss uniform loguniform hue tint swap scale set translate | |
FetchReach: the shift moves the reaching target in the scene, changing where the robot arm must move to complete the task. Declare it from robustrllib import make_robust, ShiftSpec
shift = ShiftSpec("appearance", "hue",
{"geom": "torso_geom", "degrees": 120}) | ||||
Mode names are the values a ShiftSpec accepts; schedules and compositions apply to every
source. Each source has a tutorial page with its parameters.
Six task families across three simulators and the Isaac Lab and VLA stacks. Each card shows a trained policy on the nominal task, the shift factors its evaluation grid perturbs, and the shift sources the toolbox offers on it.
gravity, morphology, actuator gear
gravity, morphology, actuator gear
gravity, morphology, actuator gear
dynamics, observation, control rate, goal displacement
actuator gear, dry friction, adversary
actuator gear, dry friction, adversary
actuator gear, morphology
actuator gear, latch
engine power, gravity, wind
friction, actuator gear, morphology
scene rebound, appearance
terrain, pushes, physical parameters, cost constraint
physical parameters, object placement, cost constraint
execution delay, command noise, proprioception noise, image blur, brightness, gravity, damping, dry friction
Results
Every number comes from the same protocol: the frozen checkpoint of each method, 20 paired episodes per condition, five training seeds, and the normalized score in which 0 is a random policy and 100 the reference policy, unclipped. Shift magnitudes are grouped into quartiles Q1–Q4 by displacement from the nominal setting.
All 22 algorithms on 220 perturbation configurations: pick a regime, a task, a shift factor or a magnitude, and read the same numbers as a table.
Method-specific robustness from isolated sweeps: one shift source at a time on 44 configurations, every method that was run, ranked. Choose the paper's channel score or one configuration at one magnitude.
Deployment-like scenarios in which several shift sources act at once, on Hopper (offline) and on Pusher (online), then separated into their sources for comparison.
The same shift interface on Unitree G1 locomotion and Franka drawer opening in Isaac Lab with PPO, DR-PPO, ATLA-PPO and the robust safe methods RAMU-PPO and SPiDR-PPO, and on a vision–language–action policy.
Related benchmarks
| Benchmark | Robust algorithms | MDP shifts | Latency | Semantic | Compound | Task expansion |
|---|---|---|---|---|---|---|
| RLlib | 0 | 0/4 | ✗ | ✗ | ✗ | ✓ |
| RRLS | 4 | 2/4 | ✗ | ✗ | ◐ | ✓ |
| ODRL | 0 | 1/4 | ✗ | ✗ | ✗ | ✗ |
| Robust-Gymnasium | 4 | 4/4 | ✗ | ✓ | ✓ | ✓ |
| RWRL Suite | 0 | 3/4 | ✓ | ✗ | ✓ | ◐ |
| RoAd-RL | 0 | 1/4 | ✗ | ✗ | ✗ | ✓ |
| RobustRLlib (ours) | 16 | 4/4 | ✓ | ✓ | ✓ | ✓ |
✓ supported · ◐ partial · ✗ absent. MDP shifts counts observation, action, transition and reward/cost. Robust algorithms counts the robust or robust safe methods a benchmark evaluates, without standard algorithms.
BibTeX
@inproceedings{robustrllib2027,
title = {RobustRLlib: A Unified Library and Benchmark for
Robust Reinforcement Learning Algorithms},
author = {Anonymous Authors},
booktitle = {Submitted to the International Conference on
Learning Representations (ICLR)},
year = {2027},
note = {Under review}
}