Skip to content

Environment.from_spec(): MjSpec + objects composition#62

Merged
siddhss5 merged 1 commit into
mainfrom
spec-input
Apr 8, 2026
Merged

Environment.from_spec(): MjSpec + objects composition#62
siddhss5 merged 1 commit into
mainfrom
spec-input

Conversation

@siddhss5
Copy link
Copy Markdown
Contributor

@siddhss5 siddhss5 commented Apr 8, 2026

Summary

New classmethod `Environment.from_spec(spec, objects_dir, scene_config)` that accepts an MjSpec with the robot assembled, attaches prl_assets objects via MjSpec (native mesh path resolution), compiles, and sets up the full object registry.

Problem

`Environment.init` only accepts file paths. Robots that need MjSpec assembly (attaching grippers, adding EE sites) before adding objects must save temp files, which breaks because `from_xml_string` can't resolve relative mesh paths.

Solution

`from_spec` keeps everything in MjSpec where path resolution works natively. Also accepts shorthand `{"can": 3}` in addition to the full `{"can": {"count": 3}}` format.

Test plan

  • 129 mj_environment tests pass
  • `python -m mj_manipulator --objects '{"can": 3}'` works (companion PR)

Closes #61

🤖 Generated with Claude Code

Accepts an MjSpec with the robot already assembled, attaches prl_assets
objects via MjSpec.attach_body (native mesh path resolution), compiles,
and sets up the full object registry.

This enables robots that need runtime MjSpec assembly (attaching a
gripper, adding an EE site) to use Environment's object management
without saving to temp files.

Usage:
    spec = mujoco.MjSpec.from_file("franka_scene.xml")
    add_franka_ee_site(spec)
    env = Environment.from_spec(spec, objects_dir, {"can": 3})

Closes #61
@siddhss5 siddhss5 merged commit 017e48a into main Apr 8, 2026
4 checks passed
@siddhss5 siddhss5 deleted the spec-input branch April 8, 2026 04:20
@siddhss5 siddhss5 mentioned this pull request Apr 16, 2026
4 tasks
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.

Support MjSpec as base scene input for object composition

1 participant