La recompensas para la manipulación de robots RL: qué funciona y qué no
Guía práctica para la ingeniería de recompensas para la manipulación de robots <unk> recompensas densas vs escasas, configuración basada en el potencial, progresión de recompensas en el currículo, brechas sim-a-real y cómo evitar el hackeo de recompensas.
Parte de: [Guía de armas de robots]
[← Blog]
El diseño de recompensas es la parte de la RL que los libros de texto no explican y los profesionales aprenden a través de una experiencia dolorosa.
Las recompensas densas vs. baratas: el principal tradeoff
Las recompensas escasas son teóricamente limpias y no pueden ser hackeadas. Pero las recompensas escasas fallan catastróficamente para tareas de manipulación que superan los 10 pasos secuenciales debido a la asignación de crédito: cuando la póliza ve una recompensa solo al final del episodio, no tiene señal para explicar cuál de las 200 acciones anteriores contribuyó al éxito. La eficiencia de la muestra disminuye exponencialmente con el horizonte de tareas bajo recompensas escasas.
Las recompensas densas
Para poner números en esto: en nuestros índices de referencia de Isaac Lab para una tarea de pick-and-place en un simulado [OpenArm]
Regla de oro: Utilice recompensas escasas solo cuando su horizonte de tareas es inferior a 50 pasos y la configuración de la meta es inequívoca. Para todo lo demás
La formación basada en el potencial: la recompensa densa teóricamente segura
El teorema Ng, Daswani y Russell (1999) sobre la configuración de recompensas basadas en el potencial proporciona un enfoque matemáticamente basado para agregar recompensas densas sin cambiar la política óptima. La construcción es:
Para la manipulación, la función potencial más natural es la distancia negativa a la meta:
Implementar la formación basada en el potencial en la práctica
El teorema es limpio. La implementación no es. La sutileza principal: la configuración basada en el potencial conserva la óptimalidad solo para el caso de horizonte infinito sin descuento o correctamente descuento. El término de formación puede ahora crear incentivos para prolongar los episodios (acumular formas más positivas) en lugar de completar la tarea rápidamente.
La solución es combinar la formación basada en el potencial con una penalización de tiempo por paso y una recompensa terminal dominante. La penalización de tiempo asegura que los episodios no se arrastran, y la recompensa terminal asegura que la finalización de la tarea siempre domine cualquier señal de formación acumulada.
def compute_reward(self, obs, action, next_obs, done, info):
# Potential-based shaping (preserves optimal policy)
phi_current = -torch.norm(obs["object_pos"] - obs["target_pos"], dim=-1)
phi_next = -torch.norm(next_obs["object_pos"] - next_obs["target_pos"], dim=-1)
shaping = self.gamma * phi_next - phi_current
# Grasp bonus: activated only on first contact
grasp_reward = 0.0
if info["contact_force"] > self.contact_threshold and not info["has_grasped"]:
grasp_reward = 0.5
# Sparse task completion (dominates all dense signals)
success = next_obs["object_at_target"].float()
task_reward = 10.0 * success
# Time penalty (discourages episode prolongation)
time_penalty = -0.01
# Action smoothness penalty
jerk = torch.norm(action - 2 * obs["prev_action"] + obs["prev_prev_action"], dim=-1)
smooth_penalty = -0.02 * jerk
total = task_reward + 0.3 * shaping + grasp_reward + time_penalty + smooth_penalty
return total
Las relaciones clave: la recompensa de finalización de tareas (10.0) debe ser al menos 10 veces la forma acumulada máxima en un episodio. Con una diagonal del espacio de trabajo de ~ 1.0 m y episodios de 200 pasos, la forma acumulada máxima es aproximadamente 0.3 × 1.0 = 0.3 por paso, o 60 en un episodio. Así que una recompensa de tareas de 10.0 es en realidad demasiado baja
Funciones potenciales en múltiples fases
Muchas tareas de manipulación tienen múltiples fases secuenciales: enfoque, agarre, transporte, lugar. Una sola función potencial (distancia al objetivo final) no proporciona ninguna señal de formación para las fases de acercamiento y agarre. La solución son las funciones potenciales conscientes de fase que cambian según el progreso de la tarea:
- Fase 1
Aproximación: Φ(s) = −d(fin_efector, objeto). Proporciona gradiente hacia el objeto. - Fase 2
Captura: Φ(s) = −d(fin_efector, objeto) + captura_qualidad(s). Premia el contacto estable. - Fase 3
Transporte: Φ(s) = −d(objeto, objetivo). Sólo se detecta activo después de la captura. - Fase 4
Lugar: Φ(s) = −d(objeto, objetivo) − orientación_errore(objeto, objetivo_orientación).
Las transiciones de fase deben ser detectadas por señales físicas (umbrales de fuerza de contacto, cambios de altura del objeto), no por pasos en el tiempo.
Componentes de recompensas específicas para la manipulación
| Component | Normalization | Weight | Activate When | Purpose |
|---|---|---|---|---|
| EE-to-Object Distance | Espacio de Trabajo diagonal (0.8–1.2m) | 0.1–0.3× | Before first contact | Encourage approach |
| Object-to-Target Distance | Espacio de Trabajo diagonal | 0.4–0.6× | After grasp detected | Primary transport signal |
| Grasp Quality | [0, 1] continuous | 0.1–0.2× | During contact | Prevent dragging |
| Orientation Alignment | Cuaternión error [0, π] | 0.1–0.2× | Last 20% of transport | Correct placement angle |
| Action Smoothness (jerk) | Max expected jerk | −0.05–0.1× | Always | Hardware-safe motions |
| Joint Limit Penalty | Binary per joint | −0.1× per violation | Always | Stay within workspace |
| Collision Penalty | Binary | −1.0 terminal | Self-collision or table | Physical safety |
| Time Penalty | Constant per step | −0.01× | Always | Discourage stalling |
** Efecto final a la distancia del objeto:** Normaliza por diagonal del espacio de trabajo (típicamente 0.8
Objeto a distancia objetivo: Activar sólo después de que se detecta el agarre (fuerza de contacto > umbral). Normaliza por espacio de trabajo. Peso: 0.4
** Calidad de grabación:** Una medida binaria o continua de la estabilidad de contacto
Listo de acción: Penaliza el jerk (tercer derivado de la posición conjunta) para desalentar movimientos jerky que dañan el hardware. Calcule como
Hacking de recompensas: una guía de campo
Los siguientes hacks aparecen repetidamente en los diseños de recompensas de manipulación.
| Hack Name | Mechanism | Frequency | Fix |
|---|---|---|---|
| Hover Exploitation | EE hovers near object, accumulating proximity reward without grasping | Very common | Disable EE-proximity after first contact; add time penalty for non-contact phases |
| Table Push for Termination | Pushes object off table to trigger early episode end (less accumulated negative reward) | Common | Large negative terminal reward (−10×) for out-of-bounds; verify termination conditions |
| Success Oscillation | Rapidly oscillates object through target zone to trigger success on rolling window check | Common | Require success maintained for 10+ consecutive steps |
| Gravity Exploitation | Drops object near target from height, scoring placement reward during free-fall | Moderate | Check that EE is within 5cm of object at success time; require low object velocity (<0.05 m/s) |
| Contact Cycling | Repeatedly touches and releases object to accumulate first-contact bonus | Moderate | Make grasp bonus one-time per episode using a boolean flag |
| Joint Limit Surfing | Jams joints against limits to achieve workspace positions unreachable with smooth motion | Occasional | Add continuous joint-limit proximity penalty, not just at-limit penalty |
| Sim Physics Exploitation | Exploits penetration or tunneling bugs to teleport objects | Rare but catastrophic | Validate object positions between steps; flag teleports >5cm as invalid |
Principios de diseño anti-hacking
- ** Dominancia de la recompensa terminal:** La recompensa terminal para completar una tarea debe ser al menos 10x la máxima recompensa densa acumulada posible en un episodio. Esto garantiza que la política siempre prefiere completar la tarea en realidad en lugar de explotar la acumulación de la recompensa densa. Calcule el máximo: (formación máxima por paso) × (lengitud máxima del episodio) × (peso de formación). Su recompensa terminal debe exceder esto en un orden de magnitud.
- ** Normalización de componentes:** Mantenga todos los componentes de recompensa densa en [-1, 1] y establezca pesas explícitas. Los componentes de recompensa no normalizados en diferentes escalas interactúan de manera impredecible y hacen que la función de recompensa sea muy sensible a los detalles de implementación. Registre las estadísticas de ejecución de cada componente durante el entrenamiento
si la variación de un componente es > 10 × de otro, tiene un problema de normalización. - ** Prueba de adversarios:** Antes de que se realice el entrenamiento completo, prueba tu función de recompensa con una política de adversarios scripted que intencionalmente intenta maximizar la recompensa sin completar la tarea. Si el adversario encuentra un camino de alta recompensa que no sea la finalización de la tarea, rediseña antes de perder el tiempo de la GPU. En RCSV mantenemos una biblioteca de ~20 scripts adversarios para tareas comunes de manipulación. Los ejecutar tomará 5 minutos y ahorra días.
- ** Registro de componentes de recompensa:** Registre cada componente de recompensa individualmente durante el entrenamiento, no solo el total. Cuando las curvas de recompensa parecen saludables pero la tasa de éxito se detiene, la descomposición de componentes revela qué término está explotando el agente. Utilice TensorBoard o Pesas y Prejuicios para rastrear cada componente como un escalar separado.
Progreso en el programa de estudios y en las recompensas
Para tareas complejas de múltiples fases
Etapa 1: Llegado en grueso (pasos 05M)
Recompensa sólo la proximidad del efecto final al objeto. No se requiere calidad de captura, no se requiere precisión de colocación. El objetivo es aprender el control básico de brazos y la navegación en el espacio de trabajo. Umbral de éxito: EE dentro de 5 cm del objeto.
Etapa 2: Adquisición de un título (pasos 5M20M)
Añadir recompensa de calidad de agarre. Aumente el umbral de proximidad. El agente ahora necesita cerrar los dedos alrededor del objeto y establecer contacto estable. Umbral de éxito: objeto levantado 10 cm sobre la superficie de la mesa.
Estación 3: Transporte (pasos 20M50M)
Activar la recompensa de distancia objeto a objetivo. El agente debe agarrar, levantar y mover el objeto hacia el objetivo. Umbral de éxito: objeto dentro de 5 cm del objetivo.
Etapa 4: Colocación de precisión (pasos 50M100M)
Aumente todos los umbrales. Añade la recompensa de alineación de orientación. Habilite el bono de precisión exponencial. Umbra de éxito: objeto dentro de 2 mm del objetivo con error de orientación < 5 grados. Aquí es donde necesita más paciencia y el ajuste de recompensa más cuidadoso.
class CurriculumRewardManager:
"""Manages reward curriculum progression based on training progress."""
def __init__(self, env_cfg):
self.stages = [
{"name": "reach", "threshold": 0.70, "min_steps": 2_000_000},
{"name": "grasp", "threshold": 0.60, "min_steps": 5_000_000},
{"name": "transport", "threshold": 0.50, "min_steps": 10_000_000},
{"name": "precise", "threshold": None, "min_steps": 0},
]
self.current_stage = 0
self.total_steps = 0
def maybe_advance(self, success_rate, steps_in_stage):
stage = self.stages[self.current_stage]
if (stage["threshold"] is not None
and success_rate >= stage["threshold"]
and steps_in_stage >= stage["min_steps"]
and self.current_stage < len(self.stages) - 1):
self.current_stage += 1
print(f"Advancing to stage: {self.stages[self.current_stage]['name']}")
def get_reward_weights(self):
"""Returns reward component weights for current curriculum stage."""
if self.current_stage == 0: # reach
return {"ee_dist": 1.0, "grasp": 0.0, "obj_dist": 0.0, "orient": 0.0}
elif self.current_stage == 1: # grasp
return {"ee_dist": 0.5, "grasp": 0.5, "obj_dist": 0.0, "orient": 0.0}
elif self.current_stage == 2: # transport
return {"ee_dist": 0.2, "grasp": 0.3, "obj_dist": 0.5, "orient": 0.0}
else: # precise
return {"ee_dist": 0.1, "grasp": 0.2, "obj_dist": 0.4, "orient": 0.3}
Los umbrales de avance de etapa (70%, 60%, 50%) se establecen deliberadamente por debajo del 100%
Las diferencias entre las recompensas sim-real
Una función de recompensa que funciona perfectamente en la simulación puede producir un comportamiento completamente diferente en el hardware real, incluso con la aleatorización de dominios.
1. Desajuste de Dinámica de Contacto
Los modelos de contacto Sim (el contacto blando de MuJoCo, el cuerpo rígido acelerado por la GPU de Isaac Sim) difieren de la realidad en coeficientes de fricción, rigidez de contacto y comportamiento de deformación. Mitigación: rango de fricción de los coeficientes de fricción (0,3
2. Retraso en la observación
Las observaciones reales de robots llegan con latencia variable (1
3. Desajuste del modelo de actuador
Los motores simulados responden a los comandos de forma instantánea y exacta. Los servos reales tienen límites de ancho de banda (generalmente 5
** Prueba práctica:** Antes de implementar una política simulada, evalúala en simulación con todas las aleatorizaciones fijadas a sus extremos simultáneamente (fricción en el peor de los casos, retraso máximo, ancho de banda más bajo del actuador). Si la tasa de éxito se mantiene por encima del 50%, la política es probablemente lo suficientemente robusta para un despliegue real.
Funciones de recompensa para tareas específicas
Las siguientes son las especificaciones de recompensa probadas en el campo para las tareas comunes de manipulación, sintonizadas a través de múltiples iteraciones de diseño en RCSV:
Selección y ubicación (simples)
Dos fases: aproximación + transporte. Formación de distancia EE (peso 0.3) hasta el contacto, luego formación de distancia objeto (peso 0.5) después de la captura. Terminal: +100 para objeto dentro de 3 cm del objetivo para 10 pasos. Penalidad de tiempo: −0.01/paso. Entrenamiento total: ~15M pasos en Isaac Lab (4096 envs), ~45 minutos en RTX 4090.
Inserción de peg (tolerancia firme < 1 mm)
El programa de estudios de cuatro fases es necesario. Aproximación, agarre, alineación gruesa (eje de peg dentro de 10 grados del eje del agujero), inserción fina. La visión crítica: usar recompensas basadas en la fuerza en la fase de inserción final en lugar de basadas en la posición. La razón es que la precisión de la posición sub-milimétrica es poco confiable desde la visión, pero el perfil de fuerza durante la inserción exitosa es distintivo y consistente. Recompensa la firma de fuerza característica (fuerza Z creciente con fuerzas XY limitadas) en lugar de posición.
Reorientación de objetos (en mano)
Una fase única pero requiere un control dextero del dedo. Recompensa: error de orientación entre la corriente y la orientación del objetivo, medido como distancia geodésica en SO(3). Adición crítica: penalizar la velocidad lineal del objeto (el objeto debe girar en su lugar, no volar a través del espacio de trabajo). También penalizar los eventos de deslizamiento del dedo-objeto detectados por caídas repentinas en la fuerza de contacto. Esta tarea es notoriamente difícil
Asamblea bimanual
Requiere flujos de recompensa separados para cada brazo, más un bono de coordinación. Cada brazo obtiene sus propias fases de aproximación / agarre / transporte. Es aquí donde el diseño de la recompensa se vuelve realmente difícil: demasiado peso en la coordinación hace que ambos brazos se congelen en la posición relativa correcta sin completar la tarea; demasiado poco peso y los brazos chocan.
Errores comunes en el diseño de las recompensas
- ** Recompensa en observación, no se indica:** Recompensa de computación por observaciones de cámaras (que tienen ruido) en lugar de estado de sim privilegiado (que es exacto).
- ** Olvidar los límites del episodio:** La configuración basada en el potencial necesita manejar los resets de los episodios correctamente. Si no se cero el potencial al inicio del episodio, el primer paso de cada episodio recibe una señal de configuración grande falsa de la diferencia entre el potencial de estado terminal y el potencial de estado inicial.
- ** Desajuste de retraso de la recompensa:** Si su recompensa depende de la detección de contactos y su detección de contactos tiene un retraso de 2 pasos, la señal de recompensa llega 2 pasos tarde. La política aprende a actuar 2 pasos antes de cuando "debería", causando oscilación. Asegúrese de que el cálculo de la recompensa y el tiempo de observación estén alineados.
- No se realizan pruebas en los límites: Su recompensa puede funcionar para objetos en el centro del espacio de trabajo, pero se rompe para objetos cerca de los bordes (donde la normalización de la distancia se comporta de manera diferente) o cerca de los límites conjuntos del robot (donde las restricciones de accesibilidad interactúan con el gradiente de recompensa).
- Evaluación de semilla única: RL es notoriamente sensible a las semillas. Una recompensa que produce un 90% de éxito en una semilla puede producir un 20% en otra. Siempre evalúa al menos 3 semillas antes de concluir sus trabajos de recompensa. En RCSV, usamos 5 semillas como estándar y reportamos media ± std.
Herramientas y marcos
Los siguientes marcos proporcionan una infraestructura de función de recompensa para la manipulación RL:
- ** Isaac Lab (NVIDIA):** Env en paralelo con GPU con clases de función de recompensa incorporadas. Mejor para la escala (4,096
16,384 env paralelo). La clase T6 admite recompensas ponderadas de varios componentes con registro por componente fuera de la caja. Recomendado para la capacitación de producción. - MuJoCo + Gymnasium: Física de contacto más precisa, menos entornos paralelos (típicamente 1
64 con CPU). Mejor para prototipos de recompensa donde se necesita inspeccionar los episodios individuales en detalle. - robosuite (Stanford): tareas de manipulación preconstruidas con funciones de recompensa estándar. Un buen punto de partida para el diseño de recompensas
estudiar sus implementaciones antes de escribir la suya. - ** Ambiente RL de RCSV:** Ambientes de laboratorio de Isaac preconfigurados con OpenArm y otros modelos de hardware de RCSV, funciones de recompensa validadas y predefinidos de aleatorización de dominios. Ver documentación.
Lectura relacionada
Erros comunes en el aprendizaje por imitación · Explicado en la política de ACT · Palabra de tecnología de inicio de robots · Glosario de robótica · Entornos de RL de RCSV
El entorno de simulación del RCSV incluye implementaciones de recompensas de referencia para tareas de manipulación estándar con garantías anti-hacking incorporadas.
Entornos de simulación para la manipulación RL
RCSV proporciona entornos de simulación preconfigurados con funciones de recompensa validadas para tareas de manipulación comunes.
Explorar los entornos de RL Hablar con un ingeniero de soluciones







