
The simulation-to-real gap in robot control β and what to do about it.
We spent years assuming that if we built good enough simulations, we could transfer controllers directly to real machines. The physics and control theory exist. The simulators are getting better every year. The promise of sim2real is compelling: build once in simulation, deploy everywhere in reality.
We've now deployed control software across five robot platforms from different manufacturers. Different kinematics, different actuators, different controllers, different dynamics. And every deployment has taught us the same lesson: simulation gets you to about 70% of production performance. The last 30% lives in the real machine.
What simulation gets right
We use simulation constantly. Architecture validation, trajectory planning, workspace analysis, collision checking. If you're building a robot system and you're not simulating first, you're wasting time.
Simulation is excellent at geometry. Joint limits, collision volumes, workspace boundaries β these are properties of the mechanical design, and simulators capture them faithfully. Motion planning works. Offline programming works. Idealized dynamics for trajectory planning β gravity loading, inertial forces, basic torque budgets β are reasonable because the errors are small relative to planning margins.
Simulation catches gross errors cheaply. Sign flips in coordinate frames, trajectory violations, kinematic singularities. These are expensive to find on real hardware, and simulation eliminates them before you touch a real machine. That's genuinely valuable.
Where it breaks down
The gap between simulation and reality is not in geometry. It's in dynamics.
Simulation tells you where the robot should be. Production performance depends on where the robot actually is. Those are different things, and the difference is everything.
Unmodeled dynamics. Real robots have joint flexibility, cable routing forces, friction that varies with speed and direction, backlash in gearing, and structural compliance that changes with configuration. Simulation models the arm as a chain of rigid bodies connected by ideal joints. The real system is none of those things.
Parameter uncertainty. The datasheet says the link mass is 15 kg. The actual link, with cables and connectors, is 15.3 kg. The center of mass is shifted. The gear ratio has manufacturing tolerance. The friction coefficient changes with wear, temperature, and lubrication. Every parameter is slightly wrong, and together they produce trajectories that diverge measurably from simulation.
Environmental coupling. In simulation, the robot is bolted to an infinitely rigid floor. In reality, it's mounted to a structure with its own resonant frequencies, deflections, and compliance. The base moves. The floor vibrates. The mounting plate flexes. The robot and its environment are a coupled system, and simulation models only half of it.
The pattern across five platforms
These aren't theoretical concerns. They're what we've encountered on every deployment.
On one platform, our modeling assumed symmetric rotations about the base joint β a standard simplification that works for most robot arms. On the real machine, the kinematics broke that assumption entirely. We had to rearchitect the calibration and control pipeline. No simulation would have revealed this. The discrepancy only became visible when we measured the real system's responses.
On another platform, our controller was compensating for dynamics that didn't actually exist in the real robot. The tracking error metrics appeared to improve, but the actual path deviation got worse. The controller was fighting physics that wasn't there. The problem wasn't the algorithm. It was the model.
The pattern is always the same. Simulation captures the geometry. It misses the dynamics. And the dynamics are what determine production performance β whether the robot vibrates, whether it tracks accurately, whether it can run at speed without ringing.
What surprised us most is the per-unit variation. Two robots of the same model, from the same manufacturer, installed side by side, have different friction profiles, different structural stiffness, different backlash. They are nominally identical and dynamically distinct. A controller transferred from simulation works differently on each one.
Why domain randomization isn't the answer
The standard sim2real response is domain randomization. Train across a distribution of simulated parameters so the controller is robust to whatever the real robot turns out to be. Vary the masses, vary the friction, vary the damping, and hope the real system falls inside the distribution.
This produces controllers that are robust to uncertainty. It does not produce controllers that are optimal for the actual machine.
There's a fundamental difference between "works despite not knowing the dynamics" and "works because it knows the dynamics." A controller trained to handle a wide range of possible friction values will behave conservatively on every robot. A controller calibrated to the actual friction of a specific machine will use that knowledge to move faster and more precisely.
Robustness and performance are in tension. Domain randomization chooses robustness. For production systems where cycle time, accuracy, and vibration matter, that leaves performance on the table.
Calibrate, don't transfer
Our approach inverts the sim2real framing. Instead of starting with a simulation and trying to make the controller survive the transfer, we start with the real machine and measure its actual dynamics.
We calibrate a model to the specific robot as installed β its real mass properties, its real friction, its real structural behavior. During calibration, sensor data captures the machine's physical responses while controlled excitations expose its resonant frequencies and structural compliance. From that data, we build a dynamic model of how that specific robot actually moves, bends, and vibrates.
The controller is then optimized for the actual machine, not a hypothetical distribution of possible machines.
The results validate the approach. Across multiple platforms, we've demonstrated greater than 5x accuracy improvement and greater than 85% vibration reduction with a 2x increase in productivity. All through software, with no hardware modifications.
Better calibration builds better simulation
There's an irony here. The path to better simulation runs through the real world, not away from it.
When you calibrate a model against real machine data, you force that model to become a faithful representation of the actual robot. The identified parameters β the real masses, the real friction, the real structural modes β are exactly what a high-fidelity simulator would need.
Accurate control forces the model to match reality. That model can then be reused for simulation that actually predicts real behavior. The sim2real gap doesn't close by making simulation better in isolation. It closes by making simulation match reality β and that requires measuring reality first.
Distribution is not just a go-to-market problem. Every robot we calibrate is another real-world model that makes simulation more faithful. Scale calibration, and you scale the quality of simulation itself.
The bottom line
Simulation is indispensable. We would not build without it. But if you're building production robot control β where cycle time, accuracy, and vibration performance matter β simulation alone won't get you there.
The robot you simulated is not the robot you deployed. Measure the one you have.
Reforge Robotics builds open-source motion control software that helps robots move faster, track more accurately, and behave more predictably. Learn more at reforgerobotics.com.


Nosa Edoimioya
Founder & CEO
Share post
Written by
Nosa Edoimioya, Founder & CEO







