Section 20.1: The reality gap revisited

"The MDP you trained on and the world you deployed into are not the same problem. The gap between them is not a bug in the simulator; it is a bill the real world sends at inference time."

Section 20.1
Technical illustration showing a simulated robot plan meeting a physical robot run, with sensor noise, contact slip, and delayed actuation making the same action behave differently.
Figure 20.1A: The reality gap is not one crack in the simulator. It is the combined effect of perception, dynamics, timing, contact, and evaluation mismatches showing up in the same closed loop.

This section assumes familiarity with Markov decision processes from section 2.6 and with physics simulator assumptions from section 6.3. The six gap types introduced here are addressed directly in section 20.2, which builds transfer strategies around each gap category. Domain randomization, one response to transition and contact mismatch, is treated in depth in section 13.2, and the visual observation gap is examined alongside sensor modeling in section 9.4.

Big Picture

A robot grasps objects flawlessly in simulation for ten million steps, then reaches the real lab and misses by two centimeters every time. The simulator was not wrong; it was just a different problem. This is the reality gap: the mismatch between the Markov decision process used for training and the physical process that receives the deployed policy. As robots enter uncontrolled environments today, closing this gap is the central engineering challenge separating lab demos from reliable deployment. The six measurable mismatch types introduced here each serve as a concrete diagnostic target.

Two centimeters: that is how far a flawless ten-million-step grasping policy can miss on its very first real-world reach, and the maddening part is that the simulator was never wrong, just answering a different question. This section takes that single failure label, "the reality gap," and decomposes it into six measurable mismatch types that each name a specific interface to test and repair. As Figure 20.1A shows, the gap is never one crack in the simulator: it is the combined effect of perception, dynamics, timing, contact, and evaluation mismatches surfacing together in the same closed loop.

By the end of this section you will be able to do three concrete things: name each of the six gap types by the interface it corresponds to, run the paired-rollout diagnostic algorithm below to localize which gap dominates a given failure, and choose a narrow repair (recalibrate a parameter, add a delay buffer, adjust an observation model) instead of defaulting to broad fixes such as full domain randomization or higher simulator fidelity.

This section turns the reality gap from a slogan into a set of measurable mismatches. The most common gaps are observation mismatch, transition mismatch, actuator mismatch, timing mismatch, contact mismatch, and evaluation mismatch. Each one creates a different debugging question. A policy trained for ten million simulator steps can fail its first real-world rollout because one interface changed enough to flip the action ranking, not because the entire model is wrong. Without knowing which interface diverged, teams routinely burn 50,000 additional rollouts chasing the gap; with a paired trace that names the culprit in the first diagnostic run, the same repair often takes fewer than 300.

SIMULATION P_sim(s'|s,a) policy training 10M rollouts REAL WORLD P_real(s'|s,a) policy deploy 1st rollout policy checkpoint REALITY GAP observation mismatch transition mismatch actuator mismatch timing mismatch contact mismatch evaluation mismatch paired trace identifies dominant gap
Figure 20.1B: The six measurable gap types that separate the simulator MDP from the hardware MDP. A policy checkpoint transfers across the gap; a paired rollout trace identifies which gap type caused the action ranking to flip.

The key question is practical: when a policy succeeds in simulation and fails on hardware, what engineers face is the sim-to-real gap, and the productive response is not to distrust the simulator but to identify which specific interface changed enough to invalidate the learned action. In practice, a friction coefficient shift from 0.6 in simulation to 0.35 on a real surface can be enough, for contact-sensitive tasks such as peg insertion, to drop task success from roughly 95% to under 30%, even while every other simulator parameter remains identical.

A policy that performs flawlessly in simulation but collapses on the first hardware rollout is not a failed policy; it is an undiagnosed one.

Action Is The Test

A sim-to-real policy fails for a reason that can usually be localized. Treat "the reality gap" as a failure label only temporarily, then split it into sensor, dynamics, actuator, timing, contact, and metric gaps.

Theory

A useful formalization compares the simulator transition model \(P_{\text{sim}}(s_{t+1}\mid s_t,a_t)\) with the hardware transition model \(P_{\text{real}}(s_{t+1}\mid s_t,a_t)\). The policy never sees these distributions directly. It experiences them as different next observations, different rewards, and different safety margins after the same nominal action.

The gap is load-bearing (meaning it is the cause actually holding up the failure, not an incidental difference) when it changes the policy ranking: action \(a_1\) looks better than action \(a_2\) in simulation, but the ordering reverses on the robot. Small parameter errors matter most when they push the policy across a contact threshold, actuator limit, sensor blind spot, or termination condition.

Think of a recipe tested at sea level that calls for boiling water: at altitude, water boils at 93 degrees Celsius instead of 100, and the same cooking time that produced a perfect soft-boiled egg at home produces a runny one on the mountain. The recipe did not change, the steps did not change, and the difference in temperature seems small. But that gap was large enough to flip the outcome from success to failure. In the same way, a small shift in friction or sensor timing does not degrade every action uniformly: it changes which action ranks first, turning a policy that reliably chose the right move in simulation into one that consistently chooses the wrong one on hardware.

Mechanism

The mechanism is a mismatch cascade. A camera pose estimate is late by two frames, the policy commands torque for the old pose, the motor clips the command, the contact model overestimates friction, and the evaluator counts a brief touch as success. The robot does not see five small errors. It sees one failed rollout.

Checkpoint

So far: the simulator and hardware transition models differ, that difference only matters when it flips which action looks best, and in practice several small mismatches chain together into the one failed rollout an engineer actually observes.

The isolation step below relies on the policy gradient \(\nabla_\theta J\), the direction in which the policy's parameters \(\theta\) would move to increase expected return \(J\) under the current transition model; a sign flip in that gradient for a perturbed parameter is the formal signal that the parameter, not noise, caused the ranking reversal described above.

Algorithm: Reality-Gap Localization via Paired Rollout Diagnosis

Input: simulator transition model \(P_{\text{sim}}(s_{t+1}\mid s_t,a_t)\), hardware transition model \(P_{\text{real}}(s_{t+1}\mid s_t,a_t)\), trained policy \(\pi_\theta\) with parameters \(\theta\), shared initial-condition family \(\mathcal{S}_0\)

Output: dominant gap label \(g^* \in \{\text{observation, transition, actuator, timing, contact, evaluation}\}\) and a targeted repair recommendation

  1. Write the simulator contract: record state variables, observation noise \(\sigma_o\), transition parameters, actuator model, contact coefficients \(\mu\), and termination rule \(\mathcal{T}\).
  2. Define paired trace fields \(\mathcal{F} = \{s_t, a_t, o_t, \tau_t, r_t, \text{done}_t\}\) with identical schema in both simulation and on hardware; include timestamps to the millisecond.
  3. Sample a batch of initial conditions \(s_0 \sim \mathcal{S}_0\) and execute \(\pi_\theta\) in simulation, collecting trace \(\mathcal{D}_{\text{sim}} = \{(s_t, a_t, o_t, \tau_t)\}_{t=0}^{T}\).
  4. Execute the same policy checkpoint \(\pi_\theta\) on hardware from matching \(s_0\) and collect \(\mathcal{D}_{\text{real}}\) using the same trace schema.
  5. Compute per-field divergence \(\delta_f = \mathbb{E}[|f_{\text{real}} - f_{\text{sim}}|]\) for each field \(f \in \mathcal{F}\).
  6. Identify the first time step \(t^*\) at which \(\delta_f\) exceeds a task-specific threshold; assign \(g^* \leftarrow \arg\max_f \delta_f(t^*)\), meaning the gap label \(g^*\) is set to whichever field \(f\) has the largest divergence at that time step.
  7. Verify isolation: perturb only the parameter governing \(g^*\) (e.g., friction coefficient \(\mu\), actuator delay \(\Delta\tau\), or rendering noise \(\sigma_o\)) and rerun step 3. If the policy gradient \(\nabla_\theta J\) changes sign for the perturbed parameter, the gap is confirmed.
  8. Apply the narrowest repair: correct \(\mu\), add an action-delay buffer \(\alpha\) steps, or adjust the observation noise model; avoid full domain randomization until targeted repairs are exhausted.
  9. Rerun paired rollouts from step 3 and confirm that \(\delta_{g^*}\) drops below threshold before advancing to policy retraining.
  10. Log the final artifact: configuration, seed, metrics, timing traces, gap label \(g^*\), repair applied, and post-repair \(\delta_{g^*}\) side by side.

Worked Example

Code Fragment 20.1.1 below shows a tiny diagnostic for a pushing policy. It compares the same commanded push in simulation and on hardware, then labels the dominant gap instead of hiding the failure behind one success rate.

# Compare a simulated push with a hardware push using the same command.
# The gap label points to the interface that changed the rollout outcome.
sim_trace = {"slip_cm": 0.4, "settle_ms": 110, "success": True}
real_trace = {"slip_cm": 2.1, "settle_ms": 190, "success": False}

if real_trace["slip_cm"] - sim_trace["slip_cm"] > 1.0:
    gap = "contact and friction"
elif real_trace["settle_ms"] - sim_trace["settle_ms"] > 50:
    gap = "actuator delay"
else:
    gap = "evaluation or observation"

print(f"sim_success={sim_trace['success']}, real_success={real_trace['success']}")
print(f"dominant_gap={gap}")
sim_success=True, real_success=False dominant_gap=contact and friction
Code Fragment 20.1.1: A rule-based gap classifier that compares sim_trace and real_trace dictionaries for one pushing rollout, thresholding slip_cm and settle_ms differences to assign the label gap = "contact and friction", "actuator delay", or "evaluation or observation".

Step-Through: Reality-Gap Localization on a peg-insertion rollout

Trace through the localization algorithm with a tiny example. Two paired rollouts run the same checkpoint from the same start state. We log four fields at each step and compute the per-field divergence \(\delta_f = \mathbb{E}[|f_{\text{real}} - f_{\text{sim}}|]\).

Field traces (averaged over the rollout):

Normalize each by its task threshold (obs 2 px, time 5 ms, act 0.1 Nm, contact 1.0 mm): obs = 0.15, time = 0.40, act = 0.40, contact = 3.40. The argmax is contact at 3.40, the only field above 1.0, so \(g^* = \text{contact}\).

Isolation check: rerun the simulator with friction lowered from \(\mu = 0.6\) to \(\mu = 0.35\). Sim slip jumps from 0.4 mm to 3.6 mm, matching the real trace, and the policy now also fails. The contact label is confirmed, so the narrow repair is to recalibrate \(\mu\) rather than launch full domain randomization.

Expected output: a useful reality-gap diagnostic reports the simulator outcome, the hardware outcome, and the suspected mismatch category. If the trace contains only final reward, the team cannot tell whether to fix sensing, dynamics, actuation, timing, or evaluation.

Library Shortcut

Use Gymnasium or Isaac Lab to enforce a common rollout schema, MuJoCo or Drake when explicit dynamics and contact assumptions must be inspected, and ROS 2 bags for hardware traces. The library shortcut is not "train and trust." It is "log the same fields in sim and real so the gap can be localized."

Practical Recipe

  1. Write the simulated MDP assumptions: state variables, observation noise, transition parameters, actuator model, contact model, and termination rule.
  2. Record the hardware interface with the same fields: sensor timestamps, command timestamps, controller status, measured motion, safety events, and success label.
  3. Run paired rollouts with the same initial condition family and the same commanded policy checkpoint.
  4. Label failures by the first interface that diverges enough to change the action outcome.
  5. Repair the narrowest mismatch first, then rerun the paired diagnostic before changing the policy architecture.
Common Failure Mode

The common mistake is to treat sim-to-real as a single scalar transfer score. A high simulator reward can coexist with a wrong contact model, a delayed motor response, and an evaluator that rewards a state the hardware cannot safely reach.

A common assumption is that a more physically accurate simulator will automatically close the reality gap, so the correct strategy is always to improve simulator fidelity. This is wrong in the embodied AI context because the gap is not a single fidelity deficit: it is the combined effect of mismatches in observation, actuation, timing, contact, and evaluation that interact inside a closed control loop. A simulator that perfectly models rigid-body dynamics can still fail on contact-rich tasks if the friction coefficients are miscalibrated, and adding visual realism does not help if the dominant gap is actuator delay. The correct mental model is a diagnostic one: identify which specific interface changed the action ranking between simulation and hardware, then apply the narrowest targeted repair to that interface before investing in broader fidelity improvements.

When Each Gap Bites Hardest

Contact mismatch typically dominates in tasks where the policy must regulate force: peg insertion, door opening, and object pivoting all depend on friction coefficients that simulators over-smooth. A policy that achieves 95% success in MuJoCo can, in cases like these, drop to under 30% on hardware if the simulated coefficient of friction is 0.6 and the real surface is 0.35. Timing mismatch dominates in fast closed-loop tasks: a 20 ms control loop that becomes a 40 ms loop on an embedded controller can cause a balancing or catching policy to become unstable even when the dynamics model is otherwise accurate. Knowing which gap type matches the task class saves teams from applying domain randomization uniformly when a targeted fix, such as lowering the simulated friction range or adding an actuator delay wrapper, would close the gap in one iteration.

Practical Example

A mobile manipulator that opens a drawer may fail because the simulated hinge friction is too low. The fix is not automatically more domain randomization. The first fix is a paired trace that shows whether the gripper slipped, the wrist saturated, the drawer contact stuck, or the success detector fired too early.

Real-World Application: OpenAI's Dactyl in-hand cube manipulation

OpenAI's Dactyl system trained a Shadow Hand to reorient a cube entirely in simulation, then transferred zero-shot to hardware. The dominant gap was a transition and actuator mismatch: the simulated tendon dynamics and contact behavior diverged from the real hand, so the team randomized physics parameters and added an LSTM (long short-term memory network, a recurrent neural network that carries a hidden state across time steps) that implicitly identified the live dynamics from observation history. This is exactly the diagnostic move from this section, localizing the gap to the dynamics interface before throwing fidelity at the renderer.

Memory Hook

When the reality gap revisited feels abstract, ask what would be different in the next frame of video, the next robot state, or the next safety margin.

Research Frontier

Active research directions (2024-2026):

1. World-model-mediated transfer. Instead of bridging sim and real by randomizing physics parameters, recent work learns a compact latent world model jointly from simulation and small amounts of real data, then adapts the policy in latent space rather than in pixel or state space. DeepMind's work on RoboCat (2023) and the broader line of model-based adaptation at Google DeepMind suggests that a learned world model can absorb the residual gap left after domain randomization, and early reports on contact-rich tasks describe fine-tuning cost reductions on the order of ten times fewer real-world samples, though the size of this effect varies by task and has not been established as a general result.

2. Privileged-state adaptation at inference time. Building on RMA (Rapid Motor Adaptation, a method that trains an online adapter to estimate hidden environment parameters from a short history of robot sensor readings), the 2024-2025 generation of legged and dexterous manipulation work (Carnegie Mellon University's Extreme Parkour and RoboPianist lines) separates a privileged simulator policy from a deployable sensorimotor policy, then trains a small online adapter that estimates latent environment parameters from a short history of proprioceptive observations. The key advance over earlier two-phase methods is that the adapter is now trained with a meta-learning objective so it generalizes to gap types not seen during adaptation training.

3. Diffusion-policy sim-to-real for dexterous manipulation. Diffusion-based policies (MIT CSAIL and Stanford's work on 3D Diffusion Policy, 2024) achieve zero-shot or one-shot real transfer on tabletop manipulation by treating the action distribution as a denoising problem: the multimodal action distribution learned in simulation covers rare contact configurations that a unimodal policy would average away, and this coverage is exactly what narrows the contact-mismatch gap at deployment time.

Open problem for PhD students: All three directions above require measuring when the residual gap is small enough to stop adaptation or fine-tuning. There is no agreed protocol for detecting transfer saturation: current practice is to run fixed-length hardware rollout batches and report a final success rate, which conflates slow convergence with a closed gap. A rigorous sequential testing procedure that stops adaptation as soon as the gap-attribution trace falls below a task-specific threshold, without requiring a pre-set rollout budget, would make sim-to-real transfer reproducible across labs and robot platforms.

Self Check

Pick one robot task and name the most likely observation gap, transition gap, actuator gap, timing gap, and evaluation gap. Which one would you test first, and what trace field would prove it?

Naming the likely gap for a task is only half the discipline; the other half is committing to a contract that makes any two rollouts comparable in the first place. Reality-gap diagnosis pays off only when it is tied to a closed-loop contract that names the simulator assumptions, the hardware measurements, and the alignment rule that says two rollouts are comparable. Without that contract, a model can look capable in a notebook while failing the first time a sensor drops a frame or a controller saturates.

The graduate-level habit is to separate three claims. The modeling claim explains which part of \(P_{\text{sim}}\) approximates \(P_{\text{real}}\). The systems claim explains which observation, action, or timing interface exposes the approximation error. The evidence claim records which paired rollout would convince a skeptical builder.

Which gap dominates which task family

Once those three claims are separated, the next practical question is where to spend the diagnostic budget, and the answer is that the six gap types are not equally likely across task families. Observation gaps dominate in vision-driven tasks. There, rendered textures, lighting, and depth noise differ from real camera output. Transition gaps dominate in tasks with deformable objects, liquids, or complex rigid-body chains, because simulator physics engines simplify these most aggressively. Actuator gaps dominate in high-speed or high-torque tasks, where the simulated motor model omits back-EMF (the voltage a spinning motor generates that opposes the driving current, reducing available torque at high speed), thermal derating, and current limits. Timing gaps dominate in any fast closed-loop task where the real controller adds latency that the simulated step function ignores. Contact gaps dominate in tasks requiring precise force regulation. Evaluation gaps dominate whenever the simulation success criterion captures a proxy state (object within 5 cm of goal) rather than the operationally correct state (object stable and graspable by the next agent in the pipeline).

What does it look like when the wrong gap type is targeted? A team invests two weeks adding visual realism to a simulator for a peg-insertion task, only to discover on the first hardware rollout that the culprit was actuator delay the whole time.

Evaluation mismatch causes silent failures on hardware. A policy can earn high simulator reward while producing unusable outcomes on the robot. Consider a gripper that barely touches an object at the goal position: the simulator awards full reward, but the object lands in a pose the downstream manipulator cannot grasp. A lax termination criterion invites reward hacking (the policy finding a shortcut that maximizes the reward signal without accomplishing the intended task). The simulator checks one scalar distance threshold at one timestep, so the policy learns the minimum action that crosses that threshold, not the sustained, stable configuration the real task demands. On hardware, the same action satisfies the proxy threshold and fails every downstream check. Identifying which family a task belongs to before training is the fastest way to choose the right transfer strategy.

To catch timing mismatch before deploying to hardware, add an action-delay wrapper to your training environment: in MuJoCo set model.opt.timestep to your real controller period and apply a one-step action buffer so the policy sees lagged feedback; in Isaac Lab use action_delay_range in the environment config to randomize delay between 0 and 2 steps. If the policy collapses when delay is added in simulation, it will almost certainly collapse on the embedded controller before you ever plug in the robot. Fix the delay tolerance in sim first, then transfer.

Practical Tool Choices For This Section
Tool or LibraryRole in the TopicBuilder Advice
GymnasiumCommon rollout APIUse it to keep reset, step, reward, and termination semantics consistent across diagnostic environments.
Isaac LabRobot-learning simulationUse it when the gap involves sensors, randomized assets, parallel rollout collection, or GPU-scale task panels.
ROS 2 bagsHardware trace captureUse them to align observations, commands, controller states, and safety events with simulator logs.
MuJoCoInspectible contact and dynamicsUse it when contact parameters, inertia, actuator limits, or control latency need explicit auditing.
DrakeSystem modeling and identificationUse it when the transfer question depends on calibrated dynamics, constraints, and state estimation.

A robust implementation starts with a paired rollout schema that logs inputs, outputs, units, timestamps, controller limits, termination reasons, and one failure label. Simulator and robot must emit the same artifact shape; otherwise the comparison is a story stitched from separate experiments.

  1. Write a one-paragraph reality-gap contract with simulator assumptions and hardware measurements.
  2. Choose paired trace fields that can be captured in both places without manual interpretation.
  3. Run one deterministic smoke test and one perturbation test before scaling policy training.
  4. Save a single artifact containing configuration, seed, metrics, videos or state logs, timing traces, and failure labels.
  5. Compare repairs only when one script evaluates them on the same task panel and hardware protocol.

When a transfer attempt fails, avoid labeling the whole policy as weak. First assign the failure to observation, transition dynamics, contact, actuator delay, controller saturation, data coverage, or evaluation. Then rerun one controlled perturbation that isolates the suspected cause. This pattern turns a disappointing rollout into a reusable diagnostic asset.

Evaluation Recipe

For reality-gap studies, compare only construct-matched metrics that are co-computed in one pass on one configuration: same policy checkpoint, same initial-condition panel, same perturbation suite, same hardware protocol, and the same success definition. Save the result as one artifact with traces, summary statistics, videos or state logs, timing measurements, and failure labels so every number in a later table is backed by the same run.

Key Takeaway

The reality gap becomes useful engineering knowledge only after it is decomposed into measurable mismatches that a team can test, repair, and retest.

Project Ideas

Beginner (weekend): MuJoCo friction-gap demonstrator. Build a Gymnasium environment wrapping a MuJoCo tabletop pushing task, train a short Proximal Policy Optimization (PPO) policy with one friction coefficient, then replay the same policy checkpoint with a different coefficient and log the paired slip metrics side by side. The key challenge is setting up the paired trace schema so the gap label is computed automatically rather than eyeballed.
Intermediate (1-2 weeks): Isaac Lab to ROS 2 transfer diagnostic for a pick-and-place task. Train a pick-and-place policy in Isaac Lab with GPU-parallel rollouts, export the checkpoint, deploy it inside a ROS 2 node on a simulated or physical arm, and produce a per-gap divergence report covering observation, actuator, and timing fields. The key challenge is aligning the Isaac Lab environment step rate with the ROS 2 control loop period so timing mismatch is measured rather than hidden in the interface.
Intermediate (1-2 weeks): LeRobot sim-to-real gap audit for a teleoperated dataset. Use LeRobot to collect a small teleoperation dataset on a physical arm, retrain a diffusion policy in PyBullet on the same task, then compare real rollouts with simulated ones using the Reality-Gap Localization algorithm from this section to assign a dominant gap label. The key challenge is constructing comparable initial conditions in PyBullet that match the real setup closely enough for the paired trace comparison to be valid.

Lab: Inducing and localizing a friction gap in MuJoCo

Goal: create a controlled reality gap in simulation, then localize it with a paired trace, all without touching real hardware.

Tools needed: Python, gymnasium, mujoco (the Pusher-v5 or a tabletop push environment), and stable-baselines3 for a quick PPO policy.

Steps: Train a PPO pushing policy for roughly 200k steps with the default friction. Save the checkpoint. Now build a "fake real" environment by editing the MuJoCo model so the contact friction (geom_friction, MuJoCo's per-geometry friction coefficient parameter) drops from 0.6 to 0.35, keeping every other parameter identical. Run 30 paired rollouts from matched start states in both environments and log four fields per rollout: final slip distance, settle time, commanded vs. measured displacement, and success.

What to vary: sweep the "real" friction over {0.6, 0.5, 0.4, 0.35, 0.25} and, separately, inject a one-step action delay instead of changing friction.

What to observe: compute the per-field divergence \(\delta_f\) for each sweep point and confirm that the contact field dominates under friction changes while the timing field dominates under the action-delay injection. You should see success rate fall off a cliff between 0.5 and 0.35, demonstrating that a small parameter shift flips the action ranking rather than degrading it smoothly.

Exercise 20.1.1

Choose a real robot task and write a paired trace schema with at least one observation field, one action field, one timing field, one safety field, and one suspected gap label.

What's Next?

This section turned the reality gap revisited into a testable embodied-learning contract: define the loop, choose the tool, save one comparable artifact, and diagnose failure by interface. Next, continue with Section 20.2, where the same evaluation habit carries into the next reinforcement-learning decision.

References & Further Reading
Foundational Papers, Tools, and Practice References

Kumar, A. et al. (2021). RMA: Rapid Motor Adaptation for Legged Robots. RSS.

Introduces RMA, which separates a base policy trained with full privileged state from a lightweight adaptation module trained online from proprioception only. Read Section 3 for the two-phase training procedure; RMA is one of the clearest demonstrations that explicit adaptation at inference time outperforms domain randomization alone for legged locomotion.

Paper

Peng, X. B. et al. (2018). Sim-to-Real Transfer of Robotic Control with Dynamics Randomization. ICRA.

Trains a Fetch robot arm to push a puck to a target by randomizing mass, friction, damping, and actuator gains in simulation, then transfers zero-shot to hardware. Read Section 5 for the recurrent policy that implicitly identifies dynamics parameters online; this is the canonical demonstration that randomizing the transition model, not the renderer, is what closes the contact and actuator gap.

Paper

Tan, J. et al. (2018). Sim-to-Real: Learning Agile Locomotion for Quadruped Robots. RSS.

This work is a clear example of transferring locomotion policies from simulation to hardware.

Paper

Tobin, J. et al. (2017). Domain Randomization for Transferring Deep Neural Networks from Simulation to the Real World. IROS.

Demonstrates that training with randomized visual and physical parameters forces policies to learn features invariant to simulator appearance, enabling direct transfer to a physical robot without fine-tuning. Read to understand the gap between visual sim-to-real and dynamics sim-to-real; this paper focuses on the visual side.

Paper

NVIDIA Isaac Lab documentation.

NVIDIA's GPU-accelerated robot learning framework that runs thousands of parallel environments on a single GPU. Read the documentation for task configuration, domain randomization APIs, and the sim-to-real export path; massively parallel training with Isaac Lab is how locomotion and dexterous manipulation policies achieve the sample counts needed for sim-to-real transfer.

Tool

Drake documentation.

Drake is relevant when transfer work needs explicit dynamics, constraints, and system identification.

Tool