🌉 Sim-to-Real: de lo virtual a lo físico
El puente más difícil de la robótica moderna: cómo transferir habilidades del simulador al robot real. Domain randomization, system identification y el ciclo real-to-sim-to-real que alimenta los robots de producción de NVIDIA, Figure y Physical Intelligence.
🔬 Reality Gap: por qué simulación ≠ realidad
O brecha de realidad es la diferencia entre el comportamiento de un robot en el simulador y en el mundo real. Una política perfecta en simulación puede fallar el 100% de las veces en el mundo real; entender por qué es el punto de partida de todo sim-to-real sólido.
🔍 Tipos de Gap
- ◆Brecha visual: renderizado vs. cámara real: texturas, iluminación, reflejos
- ◆Dynamics gap: física simplificada frente al contacto real —fricción, compliance
- ◆Brecha de sensores: sensores ideales vs. ruidosos — cámara con jitter, IMU con drift
- ◆Actuator gap: control perfecto frente a holgura y fricción en los motores
⚠ Errores clásicos
- ✗Ignorar el reality gap y esperar que el deploy funcione de inmediato
- ✗Entrenar solo con texturas estáticas e iluminación fija
- ✗No agregar ruido del sensor durante el entrenamiento
- ✗Asumir que un loss bajo en sim = buen rendimiento en el mundo real
🎲 Domain Randomization: texturas, física, luz
Domain randomization varía sistemáticamente los parámetros del simulador en cada episodio. La política se ve obligada a generalizar porque nunca ve el mismo escenario dos veces: la realidad se convierte en un "dominio" más con el que el modelo aprendió a lidiar.
💡 Por qué funciona
OpenAI usó domain randomization para resolver el cubo de Rubik con una mano robótica Dexterous (2019): más de 200 parámetros aleatorizados y 13K years de experiencia en simulación. NVIDIA lo usa en Isaac Lab para humanoides. Sin DR, las políticas se sobreajustan a la apariencia del simulador y fallan catastróficamente en el mundo real.
📋 Parámetros típicos de Domain Randomization
# Visual DR — randomiza aparência
visual_dr:
texture_randomization: true # texturas aleatórias em cada objeto
background_color: [0.1, 0.9] # range de luminosidade do fundo
light_intensity: [0.5, 1.5] # posição e intensidade das luzes
camera_position_noise: 0.02 # ruído na posição da câmera (m)
# Physics DR — randomiza dinâmica
physics_dr:
object_mass: [0.7, 1.3] # ±30% na massa dos objetos
friction_coefficient: [0.5, 1.5] # ±50% no coeficiente de atrito
joint_damping: [0.8, 1.2] # amortecimento das juntas
action_delay_steps: [1, 3] # delay de 1 a 3 steps nos comandos
# ADR — Automatic Domain Randomization
adr:
enabled: true
performance_threshold: 0.85 # aumenta ranges quando perf > 85%
range_increment: 0.05 # incremento gradual dos ranges
✓ Visual DR — Qué randomizar
- ✓ Texturas de superficie y color de fondo
- ✓ Posición, color e intensidad de las luces
- ✓ Posición y ángulo de la cámara
- ✓ Distractors: objetos aleatorios en la escena
✗ Errores comunes con DR
- ✗ Rangos demasiado amplios: la política queda «mediocre en todo»
- ✗ Aleatorizar sin medir el rendimiento resultante
- ✗ Ignorar ADR — aumentar los rangos manualmente es lento
- ✗ Aleatorizar solo lo visual e ignorar la dinámica
🔧 System Identification: calibrar el simulador
Identificación de sistemas (sysid) es el proceso de medir los parámetros físicos reales del robot —masas, inercias, fricción y rigidez— y configurar el simulador para que coincidan. En lugar de aleatorizar todo, calibras la simulación para que se acerque lo más posible al mundo real.
Recopilación de trayectorias reales
Ejecuta trayectorias específicas (sinusoidales, step) en el robot real y registra posiciones, velocidades y torques con alta frecuencia. Este dataset alimentará la optimización.
Optimización de parámetros
Usa Bayesian Optimization o gradient descent para encontrar los parámetros de la simulación (masas, fricciones, damping) que minimizan la diferencia entre la trayectoria real y la simulada.
Aprendizaje de física residual
Una red neuronal aprende la diferencia residual entre la simulación calibrada y el mundo real — y captura efectos que las ecuaciones físicas no modelan bien, como la histéresis y la flexibilidad de los cables.
⚡ DR + SysId: lo mejor de ambos mundos
Domain randomization con rangos muy amplios degrada el rendimiento. SysId permite usar rangos estrechos centrados en los valores reales — la robustez de DR con la precisión de sysid. Pipeline ideal: sysid primero para calibrar el centro, y después DR para obtener robustez alrededor de ese centro.
🚀 Sim-to-Real Transfer: técnicas actuales
O pipeline completo de transferencia de sim-to-real implica entrenamiento con DR/sysid, validación sim-to-sim, deploy progresivo con restricciones de seguridad e iteración con datos reales. Es el cuello de botella de toda la robótica basada en aprendizaje.
✓ Pipeline robusto
- ✓ Validar sim-to-sim antes de tocar el robot real
- ✓ Despliegue progresivo: sim → sim-sim → real con safety limits → real full
- ✓ Action smoothing: filtro pasa-bajos en los comandos de las articulaciones
- ✓ Restricciones de seguridad: límites de fuerza, límites de velocidad, límites del espacio de trabajo
- ✓ Online adaptation: ajustar la política con datos recopilados en el mundo real
✗ Errores de deploy
- ✗ Despliegue directo sin validación en simulación con escenarios OOD
- ✗ Velocidad máxima sin una rampa suave en los primeros pasos
- ✗ Ignorar la latencia de la cámara y el jitter del OS en el loop de control
- ✗ No definir el emergency stop antes de la primera prueba real
📋 Action Smoothing — Filtro pasa bajos simple
class ActionSmoother:
"""Filtro EMA para suavizar comandos e evitar movimentos bruscos."""
def __init__(self, alpha: float = 0.7):
self.alpha = alpha # 0.7 = suave; 1.0 = sem filtro
self.prev_action = None
def __call__(self, raw_action):
if self.prev_action is None:
self.prev_action = raw_action
return raw_action
# Exponential Moving Average
smoothed = self.alpha * raw_action + (1 - self.alpha) * self.prev_action
self.prev_action = smoothed
return smoothed
# Uso no loop de controle
smoother = ActionSmoother(alpha=0.7)
while True:
obs = robot.get_observation()
raw_action = policy(obs)
safe_action = smoother(raw_action)
robot.execute(np.clip(safe_action, -v_max, v_max))
🔄 Real-to-Sim-to-Real: el ciclo completo
Un único pass de sim-to-real rara vez es suficiente. El bucle real-to-sim-to-real es iterativo: recopilas datos del robot real, los usas para calibrar y mejorar el simulador, vuelves a entrenar la política en la simulación mejorada y la despliegas de nuevo. Cada ciclo mejora tanto la simulación como la política.
🏭 Cómo lo hace la industria
Figure, NVIDIA y Physical Intelligence ejecutan decenas de iteraciones real-to-sim-to-real antes de declarar un comportamiento "production-ready". Un único pase de sim-to-real siempre es el punto de partida, nunca el punto de llegada.
🏆 Casos de éxito: OpenAI, NVIDIA, Google
Los hitos de sim-to-real demuestran que el enfoque funciona para tareas de complejidad extrema. Las lecciones aprendidas en estos proyectos son directamente aplicables a cualquier pipeline VLA.
Mano diestra de OpenAI — cubo de Rubik
El hito fundacional: una mano robótica resolvió el cubo de Rubik con ADR masivo.
NVIDIA Isaac Lab — Locomotion de Humanoides
Entrenamiento paralelo masivo en Isaac Sim para robots humanoides.
Google RT-2 — SIMPLER Benchmark
Validación de VLAs en simulación antes del deploy — alta correlación con el rendimiento real.
📚 Lecciones universales de estos proyectos
- ◆La escala de simulación compensa: más horas en simulación rara vez son un desperdicio de GPU: son una inversión en robustez.
- ◆Los sensores táctiles son importantes: para manipulación fina, solo la visión no es suficiente: la retroalimentación de fuerza es fundamental.
- ◆El diseño de la reward es un arte: una recompensa mal especificada en simulación provoca un comportamiento catastrófico en el entorno real.
- ◆Benchmarks estandarizados: SIMPLER y LIBERO permiten comparar métodos de forma reproducible.
✅ Resumen del módulo
Siguiente ruta: Ruta 3 — Avanzado
Completaste toda la Ruta Técnica. En la Ruta 3 — Avanzado — nos sumergimos en arquitecturas de última generación, entrenamiento a escala masiva, aprendizaje multitarea y los modelos foundation que están definiendo el estado del arte en VLAs.