Skip to content

Support robosuite 1.5.2 / MuJoCo 3.x - #146

Open
antonibertel wants to merge 6 commits into
Lifelong-Robot-Learning:masterfrom
antonibertel:mujoco3-robosuite152
Open

antonibertel wants to merge 6 commits into
Lifelong-Robot-Learning:masterfrom
antonibertel:mujoco3-robosuite152

Conversation

@antonibertel

@antonibertel antonibertel commented Aug 9, 2026 •

Copy link
Copy Markdown

Summary

LIBERO pins robosuite==1.4.0, which requires MuJoCo 2.3.x. robosuite added official MuJoCo 3.x support in 1.5.0, so this bumps the pin to 1.5.2 and updates LIBERO's code for the API changes that came with it:

  • SingleArmEnv merged into ManipulationEnv; SingleArm renamed to FixedBaseRobot
  • mount_types renamed to base_types; mounts referenced by explicit name ("NullMount" instead of None)
  • default_gripper/default_base on robot models now return per-arm dicts
  • controller configs split into part vs. composite (suite.load_controller_config → load_part_controller_config + refactor_composite_controller_config)
  • scripts/collect_demonstration.py and scripts/libero_100_collect_demonstrations.py used the same removed controller-config API, plus the removed standalone input2action function — moved to the new Device.input2action() + create_action_vector() flow, and restricted --controller to OSC_POSE (robosuite's IK controller only recognizes the literal robot name "Panda", not LIBERO's MountedPanda/OnTheGroundPanda)
  • SegmentationRenderEnv hardcoded robot/mount/gripper instance names that changed in 1.5.x (e.g. Panda0 → MountedPanda0, PandaGripper0 → PandaGripper0_right) — now derived dynamically from the robot model

Also includes libero/__init__.py, which was missing and breaks find_packages() for editable/pip installs.

Test plan

  • All 130 tasks across libero_spatial, libero_object, libero_goal, libero_10, libero_90: reset + step
  • Full human demo replay reaches task success (not just no-crash) on the migrated stack
  • Camera observations and SegmentationRenderEnv on both MountedPanda and OnTheGroundPanda robot variants
  • benchmark_scripts/render_single_task.py (LIBERO's own verification script)
  • Live on-screen rendering of a real demo replay
  • Reviewed independently with Codex across multiple passes; no remaining regressions found

Known caveat unrelated to this change: robosuite 1.5.x's newer mjviewer on-screen renderer needs mjpython on macOS — the classic renderer="mujoco" OpenCV-based viewer works fine and was used for on-screen verification above.

robosuite 1.5.0+ restructured its robot/controller APIs:
SingleArmEnv merged into ManipulationEnv, SingleArm renamed to
FixedBaseRobot, mount_types renamed to base_types, controller
configs split into part/composite, and default_gripper/default_base
now return per-arm dicts. Updates LIBERO's env wrapper and Panda
robot definitions accordingly. Verified against libero_spatial,
libero_object, libero_goal task suites and full demo replay.
Without it, setuptools find_packages() can't discover
libero.libero/libero.lifelong/libero.configs as subpackages,
so pip/uv editable installs of this repo fail with
ModuleNotFoundError.
PyTorch 2.6 flipped torch.load's weights_only default to True,
which breaks loading LIBERO's numpy-array init-state checkpoints.
Pass weights_only=False explicitly since these are trusted local
files, not arbitrary downloads.
robosuite 1.5 renamed simulation instances (e.g. Panda0 -> MountedPanda0,
PandaGripper0 -> PandaGripper0_right), so the hardcoded name list no
longer matched anything and segmentation_robot_id stayed None. Derive
the expected instance names from the robot/base/gripper model classes
instead.
load_controller_config and robosuite.utils.input_utils.input2action were
removed in robosuite 1.5. Switch to load_part_controller_config +
refactor_composite_controller_config (same pattern env_wrapper.py uses),
and move to the new Device.input2action() + create_action_vector() flow
per robosuite's own demo_device_control.py. Verified the full env
construction, controller loading, and action-vector path up to env.step();
the interactive device loop itself needs physical hardware to test.
robosuite's IK controller only recognizes the literal robot name
'Panda' (SUPPORTED_IK_ROBOTS in controllers/parts/arm/ik.py), not
LIBERO's MountedPanda/OnTheGroundPanda subclasses, so --controller
IK_POSE fails deep inside robosuite. Reject it up front instead.
@antonibertel
antonibertel marked this pull request as ready for review August 9, 2026 12:10

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant