Support robosuite 1.5.2 / MuJoCo 3.x - #146
Open
antonibertel wants to merge 6 commits into
Open
antonibertel wants to merge 6 commits into
antonibertel wants to merge 6 commits into
Conversation
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
marked this pull request as ready for review
August 9, 2026 12:10
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:SingleArmEnvmerged intoManipulationEnv;SingleArmrenamed toFixedBaseRobotmount_typesrenamed tobase_types; mounts referenced by explicit name ("NullMount"instead ofNone)default_gripper/default_baseon robot models now return per-arm dictssuite.load_controller_config→load_part_controller_config+refactor_composite_controller_config)scripts/collect_demonstration.pyandscripts/libero_100_collect_demonstrations.pyused the same removed controller-config API, plus the removed standaloneinput2actionfunction — moved to the newDevice.input2action()+create_action_vector()flow, and restricted--controllertoOSC_POSE(robosuite's IK controller only recognizes the literal robot name"Panda", not LIBERO'sMountedPanda/OnTheGroundPanda)SegmentationRenderEnvhardcoded robot/mount/gripper instance names that changed in 1.5.x (e.g.Panda0→MountedPanda0,PandaGripper0→PandaGripper0_right) — now derived dynamically from the robot modelAlso includes
libero/__init__.py, which was missing and breaksfind_packages()for editable/pip installs.Test plan
libero_spatial,libero_object,libero_goal,libero_10,libero_90: reset + stepSegmentationRenderEnvon bothMountedPandaandOnTheGroundPandarobot variantsbenchmark_scripts/render_single_task.py(LIBERO's own verification script)Known caveat unrelated to this change: robosuite 1.5.x's newer
mjvieweron-screen renderer needsmjpythonon macOS — the classicrenderer="mujoco"OpenCV-based viewer works fine and was used for on-screen verification above.