Features¶
Core Architecture¶
- Full MuJoCo C API accessible (
mjModel*,mjData*) -- users can call any MuJoCo function directly - Async physics thread with configurable timestep
- Component-based design matching MJCF element hierarchy
- Singleton
MjManagerorchestrates compilation, stepping, and state
MJCF Import¶
Drag-and-drop XML import into Content Browser. Auto-generates Unreal Blueprints with full component hierarchy, mesh conversion, material import, and default class inheritance.
See MuJoCo Import for details.
Quick Convert¶
- Convert any Unreal Static Mesh to a MuJoCo physics body with one click
- CoACD convex decomposition with adjustable threshold (0.01-1.0)
- Visual/collision mesh separation (group 2 visual, group 3 collision)
- Static, dynamic, or mocap-driven modes
- Friction, solver parameters configurable per component
Heightfield Terrain¶
- Convert Unreal Landscapes to MuJoCo heightfield collision
- Configurable sample resolution (2-512)
- Complex trace mode for accurate mesh sampling
- Actor whitelist filtering
- Binary cache for fast recompilation
- Editor grid preview visualization
Physics Simulation¶
- Solvers: PGS, CG, Newton
- Integrators: Euler, RK4, Implicit, ImplicitFast
- Sim speed control (5-100%)
- Pause, resume, reset, single-step
- Snapshot capture and restore (full state)
- Keyframe reset and hold
- Sleep support with per-body policies
- Multi-CCD collision detection
- Gravity, wind, density, viscosity
Actuators (8 types)¶
Motor, Position, Velocity, IntVelocity, Damper, Cylinder, Muscle, Adhesion
- All transmission types: joint, tendon, site, body, slider-crank
- Runtime control via
SetControl()(BlueprintCallable) - Gain/bias parameter arrays
- Control/force/activation range limits
Sensors (40+ types)¶
Site-attached: Touch, Accelerometer, Velocimeter, Gyro, Force, Torque, Magnetometer, RangeFinder, CamProjection
Joint/tendon/actuator: Pos, Vel, Frc for each
Ball joint: Quat, AngVel
Frame: Pos, Quat, XYZ axes, LinVel, AngVel, LinAcc, AngAcc
Subtree: COM, LinVel, AngMom
Geometric: InsideSite, GeomDist, GeomNormal, GeomFromTo
Global: Contact, EPotential, EKinetic, Clock
- All readable via
GetSensorReading()/GetSensorScalar()on the articulation (BlueprintCallable)
Controllers¶
PD, passthrough, keyframe, and twist controllers for articulations. Keyframe controller includes built-in presets for Franka, UR5e, Spot, ANYmal, and Go2.
See Controller Framework for details.
Debug Visualization¶
Hotkey-driven toggles during PIE for contact forces, collision wireframes, joint axes + limit arcs, visual-mesh visibility, constraint-island colouring, instance + semantic segmentation shaders with sleep modulation, and smooth muscle/tendon tubes with activation-driven colour and radius.
See Debug Visualization for the full hotkey table and per-mode details.
Interactive Perturbation¶
Mouse-driven body manipulation during PIE. Double-click LMB to select, Ctrl+RMB drag to translate, Ctrl+LMB drag to rotate — the same gesture map as MuJoCo's simulate viewer. Driven by the upstream mjv_applyPerturbForce / mjv_applyPerturbPose primitives, so the spring feel is identical. Works while paused for manual pose authoring (pairs well with snapshot keyframe capture).
See Interactive Perturbation for gesture mapping, gizmo reference, and paused-mode workflow.
Camera System¶
- MjCamera: scene capture attached to MuJoCo sites; per-camera
CaptureModefor photoreal RGB, depth, semantic segmentation, or instance segmentation; streams via ZMQ; respects post-process volumes - MjOrbitCamera: auto-orbiting cinematic camera with target detection, height oscillation, configurable focal length
- MjKeyframeCamera: waypoint-based camera path with smooth interpolation,
Okey play/pause
See Camera Capture Modes for per-mode behaviour and the simulate-widget preview, and Blueprint Reference for camera API details.
Networking (ZMQ)¶
Binary pub/sub protocol broadcasting joint state, sensors, and camera images. Receives actuator targets and PD gains. Prefix-based filtering for multi-articulation scenes.
See ZMQ Networking for details.
Python Integration (urlab_bridge)¶
- Policy GUI: DearPyGui dashboard for policy selection, articulation targeting, force twist override, motion/gait preset selection
- UnrealEnv: RoboJuDo-compatible environment over ZMQ with auto-detection, forward kinematics, born-place alignment
- Pre-integrated policies: Unitree G1 locomotion (12/29 DOF), BeyondMimic (dance/violin/waltz/jump), Walk-These-Ways Go2, AMO, H2H, Smooth, ASAP
- ROS 2 bridge: republishes ZMQ streams to standard ROS 2 topics
Replay System¶
Record and play back full simulation state. Supports CSV trajectory import, snapshot capture/restore, and multi-session management.
See Blueprint Reference for recording/replay API.
Blueprint API¶
40+ BlueprintCallable functions for simulation control, state queries, actuator commands, snapshots, and replay.
See Scripting with Blueprints for the full API reference.
MjSimulate Widget¶
- In-editor dashboard replicating MuJoCo's simulate UI
- Physics options: timestep, solver, integrator, iterations, sim speed
- Per-actuator control sliders
- Joint state readouts
- Sensor value display
- Camera feed thumbnails
- Articulation selector dropdown
- Record/replay/snapshot controls
- Possess button for spring-arm camera follow
Forces¶
- MjImpulseLauncher: velocity-based object launching (matching MuJoCo's object_launcher_plugin approach)
- Direct mode (arrow direction + speed) or targeted mode (ballistic arc toward target actor)
- Reset-and-fire for iterative testing during PIE
Fkey fires all launchers in scene
Simulation Hotkeys¶
See Hotkeys for the complete list of keyboard shortcuts.
Mesh Preparation Tool¶
Scripts/clean_meshes.py: XML-aware mesh converter- Parses MJCF, detects GLB stem conflicts, renames automatically
- Converts OBJ/STL to GLB with UV preservation
- Strips embedded textures to prevent Interchange import conflicts
- Outputs updated
_ue.xmlready for drag-and-drop import