Skip to content

Commit b990e6c

Browse files
committed
Merge remote-tracking branch 'origin/main' into robosuite-1to1
# Conflicts: # .gitignore
2 parents 21aba0b + d6921ac commit b990e6c

147 files changed

Lines changed: 18739 additions & 58 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,4 +137,9 @@ CLAUDE.local.md
137137
ENVIRONMENTS.local.md
138138
datasets/
139139
.robosuite_bundle/
140+
141+
# --- LIBERO / LIBERO-plus 1:1 isolated integration ---
140142
third_party/
143+
INTEGRATION_LOG.md
144+
*.hdf5
145+
libero_datasets/

CHANGELOG.md

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
# Changelog
2+
3+
All notable changes to RoboVerse are documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
RoboVerse is the downstream content-pack + research layer on top of the
9+
[MetaSim](https://github.com/RoboVerseOrg/MetaSim) core. See
10+
`MetaSim/CHANGELOG.md` for the core-framework changes that ship with this
11+
release.
12+
13+
## [Unreleased]
14+
15+
Nothing yet — open a PR to add entries here.
16+
17+
## [1.0.0-beta] - 2026-05-31
18+
19+
The headline of this release is **cross-platform parity is now testable and
20+
load-bearing**. Every shipped `RobotCfg`, every contracted handler method,
21+
and every benchmark `reset(seed=N)` is exercised across the supported
22+
backends and either passes or is xfail-documented with a specific reason.
23+
24+
The release is forward- and backward-compatible.
25+
26+
### Added
27+
28+
- **`tests/test_roboverse_robot_cfg_validation.py`** — validates every
29+
`RobotCfg` shipped in `roboverse_pack`: instantiation, non-empty `name`,
30+
default joint positions inside `joint_limits` ranges. 60 cfgs × 4 checks,
31+
9 real downstream bugs surfaced and xfail-documented:
32+
- `AlohaAgilex`, `G1Tracking` — orphan joints in `default_joint_positions`
33+
- `YamCfg`, `ArxL5Cfg`, `Vega`, `SoArm100`, `Koch`, `Go2`, `AllegroHand`
34+
defaults outside `joint_limits` ranges
35+
- **IL + RL fusion bridge** (`roboverse_learn/fusion/`) — RL-trained policy
36+
→ demo collection (rollout → `save_demo``data2zarr` unchanged) +
37+
IL-to-RL BC warmstart. End-to-end pipeline orchestrator
38+
(`rl-train → collect → to-zarr → il-train`). 6/6 tests; validated against
39+
a real cartpole checkpoint and real mujoco/EGL launch. Fails fast on
40+
scene-MJCF tasks where robot is not a `RobotCfg`.
41+
- **mjlab 1:1 obs/reward parity** — extensive byte-level alignment work:
42+
- `TerrainGridScanSensor` + `height_scan` obs wired into
43+
`velocity_rough_go1` / `velocity_rough_g1` (1:1 building block).
44+
- Continuous rough terrain wired into both velocity-rough quadruped
45+
tasks.
46+
- `tracking-g1` motion-tracking obs ports `motion_anchor` + `robot_body`
47+
1:1.
48+
- `lift_cube_yam` regains the missing `ee_to_cube` + `cube_to_goal` obs.
49+
- `velocity_rough` height_scan is now correctly scaled by
50+
`1 / max_distance` (matches mjlab); clip-then-scale order on the obs
51+
term matches mjlab's `noise → clip → scale`.
52+
- go1 / g1 `base_lin_vel` obs reads the IMU velocimeter at the offset
53+
site (adds the `ω × r` cross-term — fixes a real obs gap that diverged
54+
under turning).
55+
- cross-sim cartpole eval pipeline repaired (actor build, device,
56+
episode metric).
57+
- **RoboTwin v2 passthrough** — 50 RoboTwin tasks registered as native gym
58+
envs (`RoboVerse/RoboTwin-<task>-v0`), 1:1 by construction, mirrors the
59+
ManiSkill passthrough pattern.
60+
- **`AGENTS.md` / `CLAUDE.md`** — repo-level dev rules for AI agents
61+
(double quote, line-length 120, py38 target, lazy imports OK,
62+
parity-is-load-bearing, multi-repo discipline, commit-as-user).
63+
64+
### Fixed
65+
66+
- **`get_started/0_static_scene.py`** — gracefully skips the cameras-empty
67+
case instead of crashing on first-time setup.
68+
- **mjlab tooling paths** — lint-clean across mjlab/maniskill tasks;
69+
tooling paths made portable (no hardcoded `/home/ghr/...`).
70+
- **mjlab MJCF asset resolution** — assets pulled from
71+
`RoboVerseOrg/roboverse_data` on Hugging Face instead of hardcoded local
72+
paths (fresh checkout no longer breaks). Dual-mode locator
73+
`_locator.mjlab_asset` = clone-or-HF.
74+
- **mjlab go1 Newton 1:1** — go1 RL now stands on Newton (PD actuators +
75+
init pose + action order alignment).
76+
77+
### Documentation
78+
79+
- `ROADMAP.md` — P0/P1 cross-platform infra items marked fixed; P2/P3
80+
items refreshed.
81+
- mjlab / maniskill / robotwin integration pages wired into the docs
82+
toctree.
83+
84+
### Tests
85+
86+
- 60 RoboVerse `RobotCfg` configs validated × 4 checks = 240 statically
87+
exercised; 9 real bugs xfail-documented.
88+
- Cross-4-backend sweep against MetaSim core in the `roboverse` conda env:
89+
mujoco + sapien3 + newton + passthroughs — 323 passed, 0 regressions.
90+
91+
### Migration
92+
93+
No code changes are required for existing users.
94+
95+
If you maintain an out-of-tree `RobotCfg`, the new validation test will
96+
exercise it as soon as it is imported through `roboverse_pack` — fix any
97+
flagged `default_joint_positions` mismatches before they trip in CI.
98+
99+
---
100+
101+
[Unreleased]: https://github.com/RoboVerseOrg/RoboVerse/compare/v1.0.0-beta...HEAD
102+
[1.0.0-beta]: https://github.com/RoboVerseOrg/RoboVerse/compare/v1.0.0-alpha...v1.0.0-beta

RELEASE_NOTES_NEXT.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# RoboVerse — next release (paste-ready notes)
2+
3+
**Suggested tag**: `v1.0.0-beta` (follows the `v1.0.0-alpha` lineage; the
4+
"beta" gate is the cross-platform-parity work landing in this release).
5+
6+
**Usage**: rename `[Unreleased]``[1.0.0-beta] - 2026-05-31` in
7+
`CHANGELOG.md`, then:
8+
9+
```bash
10+
git tag -a v1.0.0-beta -m "RoboVerse v1.0.0-beta — cross-platform parity is testable"
11+
git push origin v1.0.0-beta
12+
gh release create v1.0.0-beta --prerelease \
13+
--title "RoboVerse v1.0.0-beta — cross-platform parity is testable" \
14+
--notes-file RELEASE_NOTES_NEXT.md
15+
```
16+
17+
This release should be cut alongside **MetaSim v0.2.0** (see
18+
`MetaSim/RELEASE_NOTES_NEXT.md`).
19+
20+
---
21+
22+
## Cross-platform parity is now load-bearing
23+
24+
Every shipped `RobotCfg`, every contracted handler method, and every
25+
benchmark `reset(seed=N)` is exercised across the supported backends and
26+
either passes or is xfail-documented with a specific reason. The release is
27+
forward- and backward-compatible.
28+
29+
### Highlights
30+
31+
- **60 `RobotCfg`s validated**. `tests/test_roboverse_robot_cfg_validation.py`
32+
exercises every shipped robot for instantiation, non-empty name, and
33+
defaults-inside-limits. 9 real downstream bugs surfaced:
34+
- `AlohaAgilex`, `G1Tracking` — orphan joints in `default_joint_positions`
35+
- `YamCfg`, `ArxL5Cfg`, `Vega`, `SoArm100`, `Koch`, `Go2`, `AllegroHand`
36+
defaults outside `joint_limits` ranges
37+
- **mjlab 1:1 obs/reward parity** got measurably tighter. `velocity_rough_go1`
38+
/ `velocity_rough_g1` now ship `height_scan` obs (scale `1/max_distance`,
39+
clip-then-scale order matches mjlab), continuous rough terrain, and
40+
`tracking-g1` motion-tracking obs. go1/g1 `base_lin_vel` reads the IMU
41+
velocimeter at the offset site (adds `ω × r` cross-term — closes a real
42+
obs gap that diverged under turning).
43+
- **IL + RL fusion bridge** (`roboverse_learn/fusion/`) wires RL training →
44+
demo collection → IL warmstart end-to-end. 6/6 tests, validated against a
45+
real cartpole checkpoint and real mujoco/EGL launch.
46+
- **RoboTwin v2 passthrough** — 50 native gym envs registered, 1:1 by
47+
construction (same pattern as the existing ManiSkill passthrough).
48+
- **`get_started/0_static_scene.py`** no longer crashes on first-time setup
49+
when no cameras are configured.
50+
- **AGENTS.md / CLAUDE.md** lands: repo-level dev rules for AI agents
51+
(parity is load-bearing, multi-repo discipline, commit-as-user).
52+
53+
### Migration
54+
55+
No required changes. If you maintain an out-of-tree `RobotCfg`, the new
56+
validation test will exercise it as soon as it is imported through
57+
`roboverse_pack` — fix any flagged `default_joint_positions` mismatches
58+
before they trip in CI.
59+
60+
### Verification
61+
62+
**323 tests pass** in the cross-4-backend sweep
63+
(mujoco + sapien3 + newton + passthroughs) in the `roboverse` conda env,
64+
zero regressions.
65+
66+
### Full changelog
67+
68+
See [`CHANGELOG.md`](./CHANGELOG.md) for the complete commit-by-commit list.

ROADMAP.md

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,65 @@ This document provides a high-level overview of the RoboVerse improvement roadma
1515

1616
### P0 - Critical (Immediate)
1717

18-
- [ ] **State Cache Consistency** - Fix data corruption when switching state formats
19-
- [ ] **Test Coverage** - Add validation tests for robot configs and core tasks
18+
- [x] **State Cache Consistency** - Fixed: dual tensor/dict caches in `BaseSimHandler`,
19+
invalidated on `set_states` / `set_dof_targets` / `simulate`. Regression tests:
20+
`metasim/test/sim/test_state_modes.py` (integration) + `metasim/test/test_set_states_key_validation.py`
21+
(unit, no sim env).
22+
- [x] **`set_states` silent-drop guard** - Added: unknown / control-input keys now log a
23+
one-shot warning (e.g. `dof_pos_target` → "use `set_dof_targets`"). Catches the silent
24+
no-op bug that broke 15 downstream BC experiments.
25+
- [x] **Robot-config validation tests** - Added static `-k general` tests for every shipped
26+
`RobotCfg`: instantiation, non-empty `name`, default joint positions match `joint_limits`
27+
keys + lie inside the limit ranges. Surfaces 9 real config bugs (xfail-documented:
28+
AlohaAgilex/G1Tracking orphan joints, YamCfg/ArxL5Cfg/Vega/SoArm100/Koch/Go2/AllegroHand
29+
out-of-range defaults). `metasim/test/test_robot_cfg_validation_general.py` +
30+
`tests/test_roboverse_robot_cfg_validation.py`.
31+
- [x] **Backend contract enforcement** - Static `-k general` test asserts every concrete
32+
`BaseSimHandler` subclass overrides each documented contract method. Known incomplete
33+
backends (pyrep, partial pybullet/genesis) are xfail-documented. Self-check guards the
34+
xfail list against staleness. `metasim/test/test_backend_contract_general.py`.
2035
- [ ] **CI Coverage Reporting** - Integrate pytest-cov with Codecov
2136

2237
### P1 - High (Next Release)
2338

24-
- [ ] **Abstract Method Declarations** - Complete @abstractmethod annotations
39+
- [x] **Parallel-sim error handling** - Fixed: every public method on `ParallelHandler`
40+
now drains `error_queue` + checks `process.is_alive` after wire I/O. EOFError/BrokenPipe
41+
on recv is translated into a `RuntimeError` carrying the real worker traceback instead
42+
of a cryptic IPC exception. OOM-killed workers (queue stays empty) are surfaced via the
43+
dead-process check. Tests: `metasim/test/test_parallel_error_handling_general.py`.
44+
- [x] **Newton joint-name parity** - Fixed: Newton's `_collect_joint_names` now strips
45+
the object prefix (`box_base/box_joint``box_joint`) when the bare name is unambiguous,
46+
matching mujoco / sapien3 / isaacgym / isaacsim. Cross-platform tasks doing
47+
`dof_pos["box_joint"]` previously silently broke on Newton. Falls back to the full key
48+
on collision so no information is lost. Verified by `test_dict_state_all_objects[newton-*]`
49+
flipping from failed to passed.
50+
- [x] **Newton silent-action drop guard** - Added: Newton's `_set_dof_targets` now warns
51+
once if `model.control()` has no `joint_target_pos` / `joint_target_vel` / `joint_f`
52+
buffer — previously every action was silently swallowed. Same antipattern that broke
53+
MuJoCo `set_states`.
54+
- [x] **Actuator partial-spec warning (MuJoCo + Newton)** - Identified as task #6 root
55+
cause: when an actuator cfg overrides `stiffness` / `damping` but doesn't set
56+
`effort_limit_sim`, the asset-authored force-range (MJCF `forcerange` / Newton
57+
`joint_effort_limit`) silently dominates. Same `stiffness=1e5` config produces
58+
different effective behaviour per backend. Both handlers now warn once per
59+
(robot, joint) so the asymmetry is visible.
60+
- [x] **Benchmark reproducibility — `env.reset(seed=N)` now actually reseeds** -
61+
End-to-end wired: `GymEnvAdapter.reset(seed=)``RLTaskEnv.reset(seed=)` /
62+
`TaskBase.reset(seed=)``BaseSimHandler.set_seed`. Added a default
63+
`set_seed` on the base handler that reseeds Python `random` + NumPy +
64+
Torch (CPU and CUDA), so every backend gets reproducibility for free.
65+
Backends with extra internal RNG (Newton warp kernels, Sapien physics
66+
noise) can override and call `super().set_seed(seed)` first. Tests:
67+
`test_set_seed_is_deterministic_on_numpy_and_torch` and
68+
`test_set_seed_differs_with_different_seeds` in
69+
`metasim/test/test_set_states_key_validation.py`. Backward-compat:
70+
`seed` is a keyword-only parameter — every existing call site is
71+
unchanged.
72+
- [ ] **Abstract Method Declarations** - Mostly covered by the new backend-contract test;
73+
still want `@abstractmethod` on `_get_joint_names` / `_get_body_names` once pyrep /
74+
partial pybullet / genesis catch up.
2575
- [ ] **Unified Environment Factory** - Create `roboverse.make_env()` API
2676
- [ ] **Configuration System** - Document and standardize config approaches
27-
- [ ] **Error Handling** - Improve parallel simulation error propagation
2877

2978
### P2 - Medium (Future)
3079

36.1 KB
Loading
27.4 KB
Loading
300 KB
Loading
Binary file not shown.
185 KB
Loading
Binary file not shown.

0 commit comments

Comments
 (0)