Say you want a robot arm to put a banana in a black bowl, in a room it's never seen. Can a policy trained only in simulation do that? That's sim-to-real: train in a simulator, run on a physical robot. MolmoBot goes zero-shot, meaning no real robot data and no fine-tuning first. It leans on domain randomization: lighting, textures, camera pose, friction and more change at random across program-generated houses. Scripted experts, planners that read the simulator's true object poses, record 1.7 million demonstrations on two robots, and MolmoBot learns to imitate them. On real tabletop pick-and-place, it succeeds in 79.2% of 120 trials across 4 rooms, against 39.2% for π0.5-DROID, which trained on more than 10,000 hours of real robot demos. On a mobile robot, a door-only version opened a real pull door in 2 of 9 tries, with the robot's emergency stop tripping in 5 of them.
MolmoBot: a robot policy trained only in simulation, tested on real robots Panel 1, the bet: the usual sim-to-real recipe goes from a simulator through real demonstrations or fine-tuning to the real robot. MolmoBot goes from a simulator at scale straight to the real robot, zero-shot, with no real-robot step. Sim-to-real means training in simulation and running for real; zero-shot here means no real robot data and no fine-tuning. The question: can simulation alone be enough? Panel 2, randomize everything: three random draws of the same tabletop task differ in lights, textures, colors and camera angle. The paper randomizes looks (lights, textures, colors), the camera (position, angle, field of view), physics (friction, object mass, joint damping), the setup (objects, their poses, the arm start pose) and the moves (noise on the expert actions, so the policy cannot learn an exact replay). Each demonstration takes place in a generated MolmoSpaces house, rendered in MuJoCo. The paper favors variety in objects, poses and viewpoints over photorealism. Panel 3, a scripted expert: a hand-written planner reads the simulator’s true object poses and a list of grasps checked in simulation, then moves through phases: pregrasp, grasp, lift, preplace, place, postplace, and stow, back to the home pose. If the grasp slips, it goes back and retries, up to 3 times; after that the demonstration is thrown out. The policy gets only images from two cameras, the joint angles and the instruction, and learns to copy the expert. Panel 4, the scale: demos, 76k in DROID (real, same arm setup) against 1.7M in MolmoBot-Data (simulated, two robots); hours of robot time, 350 in DROID (real, same arm setup) against 5,704 in MolmoBot-Data (simulated, two robots); environments, 564 in DROID (real, same arm setup) against 94.2k in MolmoBot-Data (simulated, two robots). About 1.5 million of the demonstrations are on the Franka arm. The π0 and π0.5 baselines trained on more than 10,000 hours of real demonstrations. The 94.2k environments are drawn from more than 200,000 MolmoSpaces houses. The data took about 6,500 GPU-hours on 100 A100 GPUs. For picking, more demonstrations helped; more houses at a fixed 50,000 demonstrations did not. Panel 5, the policy: a wrist camera and an external camera, each with the current frame and one from about 0.5 seconds before, go through the frozen SigLIP2 vision encoder into Molmo2-4B, a vision-language model, with the instruction, for example “put the banana in the black bowl”. Each layer of the action head, a diffusion transformer, reads the matching Molmo2 layer, and the joint angles go into the action head. The head turns noise into a chunk of 16 steps of joint targets; the robot runs the first 8, then plans again. Panel 6, the real test: Franka arm, pick-and-place in 4 real rooms, 30 trials per room and 120 per policy. π0-DROID 9.2% (11 of 120), π0.5-DROID 39.2% (47 of 120), MolmoBot-Pi0 46.7% (56 of 120), MolmoBot-Img 72.5% (87 of 120), MolmoBot 79.2% (95 of 120). The two DROID baselines trained on more than 10,000 hours of real demonstrations; the MolmoBot policies trained only in simulation. With the same π0 architecture, simulated data instead of real data goes from 9.2% to 46.7%. MolmoBot-Img sees one frame per camera instead of two. 1 · the bet: no real robot data the usual sim-to-real recipe simulator real demos or fine-tuning real robot MolmoBot simulator, at scale zero-shot no real-robot step real robot sim-to-real train in simulation, run for real zero-shot no real robot data, no fine-tuning can simulation alone be enough? 2 · randomize everything one task, three random draws looks lights, textures, colors camera position, angle, field of view physics friction, object mass, joint damping setup objects, their poses, arm start pose moves noisy expert actions, no exact replay each demo: a generated MolmoSpaces house, in MuJoCo variety over photorealism (objects, poses, views) 3 · a scripted expert shows how it reads the simulator: true poses, a grasp list pregrasp grasp lift preplace place postplace stow (home) slipped? retry, up to 3 the expert has · exact object poses · grasps checked in sim the policy gets · images, 2 cameras · joint angles · the instruction the policy learns to copy the expert 4 · then 1.7 million of them DROID, real (same setup) MolmoBot-Data, sim demos 76k 1.7M hours of robot time 350 5,704 environments 564 94.2k π0 and π0.5 trained on >10k h of real demos (2 robots; 1.5M on the Franka) (drawn from 200k+ houses) made in about 6,500 GPU-hours on 100 A100s for picking, more demos helped; more houses at a fixed 50k demos did not 5 · the policy: MolmoBot wrist external now and 0.5 s ago “put the banana in the black bowl” joint angles SigLIP2, frozen Molmo2-4B vision-language model action head diffusion transformer noise run 8, re-plan 16 steps of joint targets 6 · the real test Franka arm, pick-and-place in 4 real rooms 30 trials per room, 120 per policy π0-DROID 9.2% π0.5-DROID 39.2% MolmoBot-Pi0 46.7% MolmoBot-Img 72.5% MolmoBot 79.2% trained on >10k h of real demos trained only in simulation same π0 architecture, simulated data: 9.2% → 46.7% MolmoBot-Img: one frame per camera, not two the data · made only in simulation scale it, learn from it, test it for real × 1.7 million MolmoBot: a robot policy trained only in simulation, tested on real robots Panel 1, the bet: the usual sim-to-real recipe goes from a simulator through real demonstrations or fine-tuning to the real robot. MolmoBot goes from a simulator at scale straight to the real robot, zero-shot, with no real-robot step. Sim-to-real means training in simulation and running for real; zero-shot here means no real robot data and no fine-tuning. The question: can simulation alone be enough? Panel 2, randomize everything: three random draws of the same tabletop task differ in lights, textures, colors and camera angle. The paper randomizes looks (lights, textures, colors), the camera (position, angle, field of view), physics (friction, object mass, joint damping), the setup (objects, their poses, the arm start pose) and the moves (noise on the expert actions, so the policy cannot learn an exact replay). Each demonstration takes place in a generated MolmoSpaces house, rendered in MuJoCo. The paper favors variety in objects, poses and viewpoints over photorealism. Panel 3, a scripted expert: a hand-written planner reads the simulator’s true object poses and a list of grasps checked in simulation, then moves through phases: pregrasp, grasp, lift, preplace, place, postplace, and stow, back to the home pose. If the grasp slips, it goes back and retries, up to 3 times; after that the demonstration is thrown out. The policy gets only images from two cameras, the joint angles and the instruction, and learns to copy the expert. Panel 4, the scale: demos, 76k in DROID (real, same arm setup) against 1.7M in MolmoBot-Data (simulated, two robots); hours of robot time, 350 in DROID (real, same arm setup) against 5,704 in MolmoBot-Data (simulated, two robots); environments, 564 in DROID (real, same arm setup) against 94.2k in MolmoBot-Data (simulated, two robots). About 1.5 million of the demonstrations are on the Franka arm. The π0 and π0.5 baselines trained on more than 10,000 hours of real demonstrations. The 94.2k environments are drawn from more than 200,000 MolmoSpaces houses. The data took about 6,500 GPU-hours on 100 A100 GPUs. For picking, more demonstrations helped; more houses at a fixed 50,000 demonstrations did not. Panel 5, the policy: a wrist camera and an external camera, each with the current frame and one from about 0.5 seconds before, go through the frozen SigLIP2 vision encoder into Molmo2-4B, a vision-language model, with the instruction, for example “put the banana in the black bowl”. Each layer of the action head, a diffusion transformer, reads the matching Molmo2 layer, and the joint angles go into the action head. The head turns noise into a chunk of 16 steps of joint targets; the robot runs the first 8, then plans again. Panel 6, the real test: Franka arm, pick-and-place in 4 real rooms, 30 trials per room and 120 per policy. π0-DROID 9.2% (11 of 120), π0.5-DROID 39.2% (47 of 120), MolmoBot-Pi0 46.7% (56 of 120), MolmoBot-Img 72.5% (87 of 120), MolmoBot 79.2% (95 of 120). The two DROID baselines trained on more than 10,000 hours of real demonstrations; the MolmoBot policies trained only in simulation. With the same π0 architecture, simulated data instead of real data goes from 9.2% to 46.7%. MolmoBot-Img sees one frame per camera instead of two. 1 · the bet: no real robot data the usual sim-to-real recipe simulator real demos or fine-tuning real robot MolmoBot simulator, at scale zero-shot no real-robot step real robot sim-to-real train in simulation, run for real zero-shot no real robot data, no fine-tuning can simulation alone be enough? 2 · randomize everything one task, three random draws looks lights, textures, colors camera position, angle, field of view physics friction, object mass, joint damping setup objects, their poses, arm start pose moves noisy expert actions, no exact replay each demo: a generated MolmoSpaces house, in MuJoCo variety over photorealism (objects, poses, views) 3 · a scripted expert shows how it reads the simulator: true poses, a grasp list pregrasp grasp lift preplace place postplace stow (home) slipped? retry, up to 3 the expert has · exact object poses · grasps checked in sim the policy gets · images, 2 cameras · joint angles · the instruction the policy learns to copy the expert 4 · then 1.7 million of them DROID, real (same setup) MolmoBot-Data, sim demos 76k 1.7M hours of robot time 350 5,704 environments 564 94.2k π0 and π0.5 trained on >10k h of real demos (2 robots; 1.5M on the Franka) (drawn from 200k+ houses) made in about 6,500 GPU-hours on 100 A100s for picking, more demos helped; more houses at a fixed 50k demos did not 5 · the policy: MolmoBot wrist external now and 0.5 s ago “put the banana in the black bowl” joint angles SigLIP2, frozen Molmo2-4B vision-language model action head diffusion transformer noise run 8, re-plan 16 steps of joint targets 6 · the real test Franka arm, pick-and-place in 4 real rooms 30 trials per room, 120 per policy π0-DROID 9.2% π0.5-DROID 39.2% MolmoBot-Pi0 46.7% MolmoBot-Img 72.5% MolmoBot 79.2% trained on >10k h of real demos trained only in simulation same π0 architecture, simulated data: 9.2% → 46.7% MolmoBot-Img: one frame per camera, not two the data · made only in simulation the policy, then the real test MolmoBot: a robot policy trained only in simulation, tested on real robots Panel 1, the bet: the usual sim-to-real recipe goes from a simulator through real demonstrations or fine-tuning to the real robot. MolmoBot goes from a simulator at scale straight to the real robot, zero-shot, with no real-robot step. Sim-to-real means training in simulation and running for real; zero-shot here means no real robot data and no fine-tuning. The question: can simulation alone be enough? Panel 2, randomize everything: three random draws of the same tabletop task differ in lights, textures, colors and camera angle. The paper randomizes looks (lights, textures, colors), the camera (position, angle, field of view), physics (friction, object mass, joint damping), the setup (objects, their poses, the arm start pose) and the moves (noise on the expert actions, so the policy cannot learn an exact replay). Each demonstration takes place in a generated MolmoSpaces house, rendered in MuJoCo. The paper favors variety in objects, poses and viewpoints over photorealism. Panel 3, a scripted expert: a hand-written planner reads the simulator’s true object poses and a list of grasps checked in simulation, then moves through phases: pregrasp, grasp, lift, preplace, place, postplace, and stow, back to the home pose. If the grasp slips, it goes back and retries, up to 3 times; after that the demonstration is thrown out. The policy gets only images from two cameras, the joint angles and the instruction, and learns to copy the expert. Panel 4, the scale: demos, 76k in DROID (real, same arm setup) against 1.7M in MolmoBot-Data (simulated, two robots); hours of robot time, 350 in DROID (real, same arm setup) against 5,704 in MolmoBot-Data (simulated, two robots); environments, 564 in DROID (real, same arm setup) against 94.2k in MolmoBot-Data (simulated, two robots). About 1.5 million of the demonstrations are on the Franka arm. The π0 and π0.5 baselines trained on more than 10,000 hours of real demonstrations. The 94.2k environments are drawn from more than 200,000 MolmoSpaces houses. The data took about 6,500 GPU-hours on 100 A100 GPUs. For picking, more demonstrations helped; more houses at a fixed 50,000 demonstrations did not. Panel 5, the policy: a wrist camera and an external camera, each with the current frame and one from about 0.5 seconds before, go through the frozen SigLIP2 vision encoder into Molmo2-4B, a vision-language model, with the instruction, for example “put the banana in the black bowl”. Each layer of the action head, a diffusion transformer, reads the matching Molmo2 layer, and the joint angles go into the action head. The head turns noise into a chunk of 16 steps of joint targets; the robot runs the first 8, then plans again. Panel 6, the real test: Franka arm, pick-and-place in 4 real rooms, 30 trials per room and 120 per policy. π0-DROID 9.2% (11 of 120), π0.5-DROID 39.2% (47 of 120), MolmoBot-Pi0 46.7% (56 of 120), MolmoBot-Img 72.5% (87 of 120), MolmoBot 79.2% (95 of 120). The two DROID baselines trained on more than 10,000 hours of real demonstrations; the MolmoBot policies trained only in simulation. With the same π0 architecture, simulated data instead of real data goes from 9.2% to 46.7%. MolmoBot-Img sees one frame per camera instead of two. 1 · the bet: no real robot data the usual sim-to-real recipe simulator real demos or fine-tuning real robot MolmoBot simulator, at scale zero-shot no real-robot step real robot sim-to-real train in simulation, run for real zero-shot no real robot data, no fine-tuning can simulation alone be enough? 2 · randomize everything one task, three random draws looks lights, textures, colors camera position, angle, field of view physics friction, object mass, joint damping setup objects, their poses, arm start pose moves noisy expert actions, no exact replay each demo: a generated MolmoSpaces house, in MuJoCo variety over photorealism (objects, poses, views) 3 · a scripted expert shows how it reads the simulator: true poses, a grasp list pregrasp grasp lift preplace place postplace stow (home) slipped? retry, up to 3 the expert has · exact object poses · grasps checked in sim the policy gets · images, 2 cameras · joint angles · the instruction the policy learns to copy the expert 4 · then 1.7 million of them DROID, real (same setup) MolmoBot-Data, sim demos 76k 1.7M hours of robot time 350 5,704 environments 564 94.2k π0 and π0.5 trained on >10k h of real demos (2 robots; 1.5M on the Franka) (drawn from 200k+ houses) made in about 6,500 GPU-hours on 100 A100s for picking, more demos helped; more houses at a fixed 50k demos did not 5 · the policy: MolmoBot wrist external now and 0.5 s ago “put the banana in the black bowl” joint angles SigLIP2, frozen Molmo2-4B vision-language model action head diffusion transformer noise run 8, re-plan 16 steps of joint targets 6 · the real test Franka arm, pick-and-place in 4 real rooms 30 trials per room, 120 per policy π0-DROID 9.2% π0.5-DROID 39.2% MolmoBot-Pi0 46.7% MolmoBot-Img 72.5% MolmoBot 79.2% trained on >10k h of real demos trained only in simulation same π0 architecture, simulated data: 9.2% → 46.7% MolmoBot-Img: one frame per camera, not two the data · only simulated scale, learn, test for real × 1.7M
MolmoBot learns by behavior cloning, copying the expert's actions. Its action head uses flow matching, which learns to turn random noise into an action chunk a little at a time. The paper takes this from π0; written out as in the released code, training minimizes L ( θ ) = E ( o , ℓ , q , A ) ∼ D , τ , ϵ [ ∥ v θ ( A τ , τ , o , ℓ , q ) − ( A − ϵ ) ∥ 2 ] , A τ = τ A + ( 1 − τ ) ϵ \mathcal{L}(\theta) = \mathbb{E}_{(o,\ell,q,A)\sim\mathcal{D},\;\tau,\;\epsilon}\Big[\big\|v_\theta(A^\tau, \tau, o, \ell, q) - (A - \epsilon)\big\|^2\Big], \quad A^\tau = \tau A + (1-\tau)\,\epsilon L ( θ ) = E ( o , ℓ , q , A ) ∼ D , τ , ϵ [ v θ ( A τ , τ , o , ℓ , q ) − ( A − ϵ ) 2 ] , A τ = τ A + ( 1 − τ ) ϵ L ( θ ) = E [ ∥ v θ ( A τ , τ , o , ℓ , q ) − ( A − ϵ ) ∥ 2 ] over ( o , ℓ , q , A ) ∼ D , τ , ϵ A τ = τ A + ( 1 − τ ) ϵ \begin{aligned}&\mathcal{L}(\theta) = \mathbb{E}\Big[\big\|v_\theta(A^\tau, \tau, o, \ell, q) - (A - \epsilon)\big\|^2\Big]\\&\text{over } (o,\ell,q,A)\sim\mathcal{D},\ \tau,\ \epsilon\\&A^\tau = \tau A + (1-\tau)\,\epsilon\end{aligned} L ( θ ) = E [ v θ ( A τ , τ , o , ℓ , q ) − ( A − ϵ ) 2 ] over ( o , ℓ , q , A ) ∼ D , τ , ϵ A τ = τ A + ( 1 − τ ) ϵ Here D \mathcal{D} D is the Franka demonstrations (about 1.5 million), mixed by task; o o o is two frames from each of a wrist camera and an external camera; ℓ \ell ℓ is the instruction, for example “put the banana in the black bowl”; and q q q is the joint angles. A A A is the expert's next 16 actions, each a target position for every joint and the gripper, called an action chunk. A mixing time τ \tau τ between 0 and 1 blends it with Gaussian noise ϵ \epsilon ϵ of the same shape into the noisy chunk A τ A^\tau A τ : at τ = 0 \tau = 0 τ = 0 it's pure noise, and at τ = 1 \tau = 1 τ = 1 it's the expert's chunk. The action head v θ v_\theta v θ , a DiT (diffusion transformer) that reads the Molmo2 vision-language model layer by layer, predicts the direction from noise toward the clean chunk. At run time it follows v θ v_\theta v θ in small steps from pure noise to a chunk, runs 8 of the 16 actions, then plans a new chunk. The head is cheap next to the vision-language model, so the authors draw 8 values of τ \tau τ for each example and train on all of them at once. Nothing in the loss mentions the real world. Every action the policy learns comes from a scripted expert in simulation; only its starting weights for vision and language, from SigLIP2 and Molmo2, come from pretraining on image and text data.
Deshpande, Guru, Hendrix, Jauhri and 22 coauthors · Ai2, UW, UCLA, TU Darmstadt, Princeton · arXiv v2 · 26 Mar 2026 π0.5-DROID: 39.2% is 47 of 120 trials (Fig. 7, Table 10); Table 6 prints 31.3%.
Paper ↗ Project ↗ Code ↗
← All writing