
Simulated Environments for Robots. Robots don't have enough data. So we're making virtual worlds for them to train in! Brothers: @SaroyaShehryar @AhmadSaroya00
San Francisco, California
Joined June 2026
- Tweets37
- Following69
- Followers1.4K
- Likes31
How Moving Atoms accurately converts Lidar/Slam scans into full 3d building Info Models.
1. Capture: the raw laser scan (here, 54M points) is reconstructed into a dense, photoreal Gaussian splat.
2. Model: every pipe, fitting, valve and steel member is built as a native BIM element.
3. Heatmap: every scan point is checked against the model, and gaps and misfits are flagged automatically.
4. Measure: cross-sections are fitted to the real points, e.g. a Ø170 mm header at a 3.7 mm median error.
5. Rebuild: the model is refitted and exported as native Revit families and IFC.
Scan is returned within 48 hours.
The final model sits within 2.1 mm median of the scan.
Send us a scan and see what comes back.
yes, this.
Replying to @alexandr_wang
@alexandr_wang, when do I get multi-muse agents? Can this be a priority in your team? Please get to it.
Moving Atoms (YC S26): Scan to Sim/BIM now runs Locally!!!
We fly to your facility with the compute to run the full conversion locally, and your scan data never leaves the building. Within 48 hours you get back a simulation-ready digital twin of your site. Every object is separated and editable, delivered in the formats your team already uses: Revit, IFC, OpenUSD, Isaac Sim and glTF.
That opens up the buildings that need digital twins most but could never share their data: data centres, government buildings, critical infrastructure and secure labs. Plan upgrades, test layouts and run simulations of your most sensitive spaces without a single file going off-site.
A scan gives you a picture. A simulation needs objects.
We can output Revit files, USD, IFC. Anything needed for BIM/Simulation workflows.
This is a real process plant in Rotterdam. On the left is the raw LiDAR, about 5 million NavVis points. On the right is our reconstruction, filmed from the same camera.
Most scan-to-3D pipelines stop at one fused mesh, which looks right but behaves like a single rock. A robot can't open, avoid or reason about something it can't tell apart from the floor.
So after we rebuild the geometry, we separate the scene into objects. In this plant that's 89 of them: pumps, vessels, heat exchangers, stairs, guardrails, pipe networks, foundations. Each one:
→ is its own mesh with its own pivot point, so you can select it, move it or swap it
→ is labelled by type, like "pump assembly" or "vertical heat exchanger"
→ traces back to the scan panoramas and points it came from
→ is flagged where we had to infer hidden geometry rather than measure it
Moving Atoms (YC S26): Scan to Sim is here.
Send us a LiDAR or SLAM scan of your factory floor, warehouse or yard, from any scanner. Upload multi-gigabyte scans straight from your browser (up to 200 GB per file). Within 48 hours you get back a simulation-ready digital twin of your real site. Every object is separated and editable, and accurate robot embodiments are placed right on your floor: autonomous forklifts, pallet AMRs, tuggers, tote robots and palletizing arms.
Test the workflow before you build it. Try layouts, fleet sizes and routes, then watch the whole operation run sped up, before a single robot arrives on site.
Moving Atoms (YC S26): Scan to BIM is here.
Send us a LiDAR or SLAM scan from any scanner, of any site: outdoor industrial plants, refineries, factory floors, warehouses or full buildings. Upload multi-gigabyte scans straight from your browser (up to 60 GB per file). Within 48 hours, every object comes back separated, measured and editable, in IFC, Revit, STEP, USD or GLB. It's ready for your BIM team and your digital twin.
Dm us if you like our work.
Moving Atoms (YC S26) : Scan to BIM is here:
Send a LiDAR or SLAM scan from any scanner. Within 48 hours every object comes back separated, measured and editable, in IFC, Revit, STEP, USD or GLB: ready for your BIM team, your digital twin.
Who this is for:
-> Data Center Requiring a Digital Twin
→ Manufacturing floors and production lines
→ Warehouses and logistics / fulfilment centres
→ Wet labs and scientific facilities
→ Commercial kitchens and food production
→ Any site where you plan to put a robot and want to test it there first
Scan to BIM is finally here from Moving Atoms.
What you're watching is a real workshop, captured on site and rebuilt by our model. 767 objects, and every one of them is its own mesh. You can pick it up, move it and simulate it.
Simulating Sponge mechanics in RobotGym. Deformable is the biggest bottleneck for humanoid training in simulation.
One of the many challenges we faced was getting water inside the sponge. We wrote a custom pore-water kernel. Water wicks into the foam by capillary suction. When the gripper squeezes, pore pressure rises and pushes it out, and the water pushes back on the foam.
More News coming soon!
We are excited to launch RobotGym (Y Combinator), a public MCP for Physical AI simulation. It's a collaborative platform built with top robotics researchers to create the largest dataset of physics-accurate environments and assets.
We are currently offering researchers grants of $1,000+ in GPT-6 Astra credits to help expand our public library and run their simulations. Pop us an email or DM to claim this.
With the help of the community, we are launching with hundreds of fully functioning environments (including wet labs, factories and homes), as well as thousands of SimReady assets.
We take care of all the GPU hosting, so the community can focus on running their simulations and pushing the frontier of Physical AI.
Moving Atoms (YC S26) has officially partnered with NVIDIA Inception!
Our Mission: Is to provide the Simulation infrastructure for Physical AI. We are building SimReady assets, Simulation Training Data, and evaluation platforms that the community can use for free to help advance the frontier of Physical AI
This is an exciting milestone with many more coming soon!
Physics you can trust.
Cloth here isn't an animation. It's a real solver: every thread-level patch has stretch, bend and friction, and it collides with itself and the robot.
The bottle is a thin plastic shell that buckles, dents and stays dented, while the water inside flows out as a real fluid.
We will soon be adding many more physics solvers to make our simulations accurate.
Describe any environment and let robot gym create it using it's physics accurate assets.
We are currently offering $1,000 + in GPT astra credits to researchers to help expand our library.
Edit any environment with ease, or choose form our 1,246 sim-ready environments. 90,349 physics-calibrated objects.
This allows researchers to quickly create physics accurate environments ot test their robot policies in.
We handle all of the Compute and GPU hosting so you can focus on running your simulations.
Pick from 1,246 sim-ready environments. 90,349 physics-calibrated objects.
We hope to advance the frontier of physical AI simulation with the help from the top researchers in robotics.
GPT 6 Astra, unlocking box to retrieve eraser. Outlined Below is the exact input prompts used, to control it.
We will be outlining the exact capabilities of the frontier models controlling robots. All videos we're made in RobotGym by Moving Atoms.
Harness is available on Movingatoms.ai
Call 1: move_to — 1.90 s
Approach the closed blue box to inspect the lid and front tab.
{
"x": 0.65,
"y": -0.03,
"z": 0.28,
"yaw": 0,
"open": 1
}
Call 2: program — 6.75 s
Grasp the lid's front tab from above and lift it to open the box.
move_to(x=0.65, y=-0.115, z=0.16, yaw=90, open=1)
move_to(x=0.65, y=-0.115, z=0.08)
grip(open=0)
move_to(x=0.65, y=-0.083, z=0.175)
checkpoint()
Call 3: program — 13.00 s
Swing the lid over its rear hinge, release it open, and retreat to inspect the contents.
move_to(x=0.65, y=-0.035, z=0.223)
move_to(x=0.65, y=0.035, z=0.25)
move_to(x=0.65, y=0.11, z=0.245)
move_to(x=0.65, y=0.163, z=0.222)
grip(open=1)
move_to(x=0.46, y=-0.08, z=0.32)
checkpoint()
Call 4: program — 18.30 s
Regrasp the lid tab and inspect it while raised, before releasing.
move_to(x=0.65, y=-0.115, z=0.16, yaw=90, open=1)
move_to(x=0.65, y=-0.115, z=0.08)
grip(open=0)
move_to(x=0.65, y=-0.082, z=0.175)
move_to(x=0.65, y=-0.035, z=0.225)
checkpoint()
Call 5: program — 20.05 s
Guide the lid carefully toward and just beyond vertical while retaining the tab.
move_to(x=0.65, y=0.03, z=0.25)
move_to(x=0.65, y=0.102, z=0.25)
checkpoint()
Call 6: program — 25.45 s
Fold the lid fully back and withdraw vertically, then approach above the exposed eraser.
Execution: error — OUTSIDE_ACTION_BOUNDS.
move_to(x=0.65, y=0.162, z=0.228)
move_to(x=0.65, y=0.211, z=0.18)
move_to(x=0.65, y=0.242, z=0.13)
grip(open=1)
move_to(x=0.65, y=0.24, z=0.41)
move_to(x=0.65, y=-0.035, z=0.27, yaw=0)
checkpoint()
Call 7: program — 27.35 s
Pick up the eraser from the open box and lift it for a grasp check.
Execution: error — OUTSIDE_ACTION_BOUNDS.
move_to(x=0.648, y=-0.034, z=0.29)
rotate_down(yaw=0)
move_to(x=0.648, y=-0.034, z=0.12, open=1)
move_to(x=0.648, y=-0.034, z=0.034)
grip(open=0)
move_to(x=0.648, y=-0.034, z=0.23)
checkpoint()
Call 8: program — 35.10 s
Align the jaws in two smaller rotations, grasp the eraser, and check the lift.
rotate_down(yaw=45)
rotate_down(yaw=0)
move_to(x=0.65, y=-0.033, z=0.12, open=1)
move_to(x=0.65, y=-0.033, z=0.032)
grip(open=0)
move_to(x=0.65, y=-0.033, z=0.23)
checkpoint()
Call 9: program — 38.40 s
Lower the grasp to the eraser's thin body and retry the lift.
Execution: error — TARGET_NOT_REACHED: 0.0163m residual; partial motion retained.
grip(open=1)
move_to(x=0.65, y=-0.033, z=0.09)
move_to(x=0.65, y=-0.033, z=0.014)
grip(open=0)
move_to(x=0.65, y=-0.033, z=0.19)
checkpoint()
Call 10: program — 39.85 s
Narrow the open jaws to clear the box walls, then close on the eraser and lift.
Execution: error — TARGET_NOT_REACHED: 0.0125m residual; partial motion retained.
grip(open=0.45)
move_to(x=0.65, y=-0.033, z=0.018, yaw=0)
grip(open=0)
move_to(x=0.65, y=-0.033, z=0.19)
checkpoint()
Call 11: program — 42.05 s
Close at the achieved low pose and inspect whether the eraser lifts.
grip(open=0)
move_to(x=0.65, y=-0.033, z=0.20)
checkpoint()
Call 12: program — 48.20 s
Place the eraser centered on the circular marked spot, release, and retreat.
move_to(x=0.416, y=-0.207, z=0.20)
move_to(x=0.416, y=-0.207, z=0.027)
grip(open=1)
move_to(x=0.416, y=-0.207, z=0.30)
checkpoint()
Call 13: program — 54.95 s
Grasp the raised lid tab and draw it forward over the hinge to start closing the box.
move_to(x=0.65, y=0.128, z=0.34, yaw=45)
rotate_down(yaw=90)
move_to(x=0.65, y=0.128, z=0.242, open=1)
grip(open=0)
move_to(x=0.65, y=0.038, z=0.25)
checkpoint()
Call 14: program — 62.65 s
Lower the lid onto the box, release its tab, and withdraw to inspect the completed arrangement.
move_to(x=0.65, y=-0.035, z=0.225)
move_to(x=0.65, y=-0.082, z=0.175)
move_to(x=0.65, y=-0.108, z=0.12)
move_to(x=0.65, y=-0.115, z=0.08)
grip(open=1)
move_to(x=0.65, y=-0.115, z=0.30)
move_to(x=0.40, y=0.04, z=0.34)
checkpoint()

