Skip to content

sim-mujoco · MuJoCo simulation Load (JVM-only quarantine) #550

Description

@wow-miley

Context. The physically-real digital body — and the quarantine that keeps a JVM-only dependency from contaminating the multiplatform libraries. com.neuronrobotics:mujoco-java is an Apache-2.0 JNI binding to DeepMind's MuJoCo (Maven Central, ~3.1.x; Windows/Linux/macOS x86_64 + macOS arm64 — no iOS/native). It loads MJCF (the same format MjcfImporter targets) and can simulate muscles with activation dynamics — i.e. the Activation/EMS path, in software, before any electrode.

Objective. A new JVM-only Gradle module :sim-mujoco depending on a pinned mujoco-java + ampere-core. Implement MujocoSimLoad : Load.

Changes

  • New module :sim-mujoco (JVM-only). Pin/vendor mujoco-java.
  • MujocoSimLoad: load an MJCF for the morphology, consume the Motor-kind emission envelope + MotorFrames, step MuJoCo, emit ProprioceptionSignal (observed) + ContactSignal (both : Event, via AgentEventApi). LoadClass = Mechanical for rigid bodies; a simulated-Embodied variant for muscle MJCFs.

Quarantine — how it's actually enforced (recon §8: there is NO ArchUnit/Konsist today)

  • ampere-core & Phosphor declare no Gradle dependency on :sim-mujoco or mujoco-java → any MuJoCo symbol in those modules is a compile error. That IS the firewall — module-graph + compile-time, not a linter.
  • :sim-mujoco is the only module that depends on mujoco-java.
  • A hard automated gate (so the build fails by rule, not merely by missing-dependency) is added separately — see the boundary-guard ticket; land it before 0.8.0 for belt-and-suspenders.

Validation

Load an MJCF hand; drive a trajectory; assert the emitted Observation diverges from the commanded Pose under gravity/contact (non-tautological — the divergence the agency loop needs); assert a ContactSignal on collision. Activation bonus: a muscle MJCF — command activation, assert a joint angle emerges (validates actuation-space, no hardware).

Notes / out of scope

May ship as a stub MujocoSimLoad behind the real module boundary first (boundary > physics, early); full physics wants published 0.8.0. No EMS/servo hardware. DoD: if any new Event types are added, follow recon §8 (EventRegistry/@SerialName/CLI handler/concept cell).

Scope ~5 pts · Model: Sonnet, high thinking (JNI + MJCF + physics).

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status
    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions