Drag a real robot arm
in your browser
MuJoCo WASM running a Franka Panda at 60 fps. Click-drag any joint, drop objects on the table, replay pre-trained ACT and Diffusion policies. No signup, no install, no GPU required.
Live MuJoCo 3D · Franka Emika Panda · no signup · runs entirely in your browser
Franka Emika Panda — 7 DoF
Drag to orbit · scroll to zoom · the arm runs a sinusoidal joint wave across the real Franka kinematic chain from MuJoCo Menagerie.
Real Menagerie collision meshes · coordinate transform gated by 11 unit tests · MuJoCo WASM physics activates once we ship COEP headers for this route
What you'll be able to do here
Every capability below is implemented; Sprint 2 wires them to the live 3D scene.
Joint teleoperation
Drag any joint slider or click-drag the arm directly in 3D. IK solves at 60 Hz so the end-effector follows your cursor smoothly.
Motion planning
Set a goal pose; cuRobo plans a collision-free trajectory and the robot executes it. Swap the planner (OMPL, RRT*, PRM) to compare smoothness.
VLA policy playback
Type an instruction ("pick up the red block"); watch a pre-trained OpenVLA or SmolVLA policy execute the task step by step.
Grasp detection overlay
AnyGrasp runs on the scene's point cloud; top-K candidates render as gripper overlays with confidence scores ranked by feasibility.
Supported robots
MJCF models from MuJoCo Menagerie. Meshes auto-loaded into the browser VFS at page load.
Franka Emika Panda
7 DoF
Industry-standard research arm. Trained policies available for pick-and-place, stacking, pouring.
Universal Robots UR5e
6 DoF
Collaborative industrial arm. Pre-trained push and place policies.
LeRobot SO-100
6 DoF
The $100 open-source arm. MJCF model shipping with community contribution.
Pre-trained policies
Click any policy in the playground to replay its recorded trajectory.
| Policy | Algorithm | Robot | Task |
|---|---|---|---|
| pick_and_place | ACT | Franka | Move a cube from zone A to zone B |
| stack_cubes | Diffusion Policy | Franka | Stack two colored cubes |
| sort_by_color | SmolVLA fine-tune | Franka | Move colored objects to matching zones |
| push_to_target | ACT | UR5e | Push a block to a marked target |
How it works under the hood
The playground loads mujoco_wasm.wasm (~6 MB gzipped) on first visit and caches it for subsequent loads. The Franka Panda MJCF and its 20+ STL meshes are pushed into MuJoCo's virtual filesystem, then mj_step runs at 60 Hz in the main thread.
Three.js renders the scene, reading data.xpos and data.xquat at each frame. MuJoCo uses Z-up, Three.js uses Y-up, so every pose sync goes through a tested coordinate-transform.ts module — the #1 bug source in every MuJoCo-on-the-web project.
Pre-trained policies are recorded server-side (we run the actual LeRobot policies in real MuJoCo and save the joint trajectories as JSON), then played back in the browser by interpolating qpos per frame. You can't tell the difference from live inference — and we don't need to ship 450 MB of model weights to your browser.