机器人操纵的奖励塑造:什么是有效的,什么是不有效的
实用指南对机器人操纵的奖励工程 密集与稀少的奖励,基于潜力的塑造,课程奖励进展,模拟到真实的差距以及如何避免奖励黑客攻击.
机器人武器指南
奖励设计是课本未能解释和实践者通过痛苦的经验学习的RL的一部分.
密集与稀少奖励:核心交易
密集奖励 基于某种代理任务进步的步骤进步信号 显著提高样本效率.一个学习密集距离到目标奖励的对象将在10
为了把数字放在这个上:在我们艾萨克实验室对模拟的 [OpenArm]
**
基于潜力的塑造:理论上安全的密集奖励
基于潜力的奖励塑造的Ng,Daswani,Russell (1999) 定理提供了一个数学上基础的方法,可以在不改变最佳政策的情况下添加密集奖励. 构建是:
对于操纵,最自然的潜在函数是负距离到目标:
实际上实施基于潜力的塑造
理论是清洁的.实施不是.主要的细致:基于潜力的塑造只能保持优势,只能在未折扣或正确折扣的无限视线的情况下.实际上,你运行有限的集节,提前终止,这违反了理论的保证. 塑造术语现在可以创造刺激来延长事件 (积累更多积极的塑造) 而不是快速完成任务.
解决方案是将基于潜在的塑造结合到每步的时间罚款和主导终端奖励.时间罚款确保节目不会拖延,终端奖励确保任务完成总是占据了任何累积的塑造信号.在我们的标准配置中:
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
关键比例:任务完成奖励 (10.0) 应该至少是10x一个集中的最大累积形状.工作空间的角形为 ~ 1.0m,剧情为 200 步,最大累积形状是大约 0.3 × 1.0 = 0.3 每个阶段,或者 60 个集中的任务奖励.所以一个任务奖励为 10.0 实际上太低了
多阶段潜在功能
许多操纵任务有多个连续阶段:接近,抓住,运输,位置.一个潜在函数 (距离到最终目标) 没有为接近和抓住阶段提供塑造信号.解决方案是基于任务进展的相识性潜在函数,它们交换:
- ** 阶段 1
方法:** Φ(s) = −d(终点_效应,对象). 提供对象的梯度. - 第二阶段
掌握: Φ(s) = −d(终点_效应,对象) +掌握_质量(s). 奖励稳定接触. - 第三阶段
运输: Φ(s) = −d(对象,目标). - 阶段4
位置: Φ(s) = −d(对象,目标) −导向_错误(对象,目标_导向). 当对象距离目标不到5厘米时,是活跃的.
时段过渡应通过物理信号 (接触力门
操纵特定奖励组件
| Component | Normalization | Weight | Activate When | Purpose |
|---|---|---|---|---|
| EE-to-Object Distance | 工作空间 diagonal (0.8–1.2m) | 0.1–0.3× | Before first contact | Encourage approach |
| Object-to-Target Distance | 工作空间 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 | 四元数 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 |
** 终极效应对象距离:** 通过工作空间对角 (通常0.8
目标距离的对象: 只有检测到抓取后才会激活 (接触力 > 门
Grasp质量: 接触稳定性的二进制或连续测量
** 行动顺度:** 惩罚
奖励黑客:一个领域指南
操作奖励设计中,以下黑客反复出现.它们列为警告,而不是发现.
| 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 |
防黑客设计原则
- **终端奖励主导地位:**任务完成终端奖励应至少为10x一个集中的最大可能的累积密集奖励. 这确保政策总是更喜欢实际完成任务,而不是利用密集的奖励积累.计算最大: (每步最大的形状) × (最大的集长度) × (形状重量). 你的终极奖励必须超过这个数量.
- ** 组件正常化:** 保持所有密集奖励组件在 [-1, 1] 和设置明确的权重.不同尺度的非正常化奖励组件相互作用不可预测,使奖励函数对实施细节非常敏感. 记录每个组件的运行统计数据在训练中
如果任何组件的差异是>10×另一个,你有一个正常化问题. - ** 逆境测试:** 在完整的训练之前,用编写的逆境政策测试你的奖励功能,它故意试图最大化奖励,而不完成任务.如果对手发现一个高奖励路径,而不是完成任务,在浪费GPU时间之前重新设计.在RCSV,我们为常见的操纵任务维护了20个逆境脚本库. 运行它们需要5分钟,节省了几天.
- 奖励组件记录: 记录每一个奖励组件在训练期间,不仅仅是总数.当奖励曲线看起来健康,但成功率停滞,组件分类显示代理正在利用哪个术语.使用TensorBoard或权重和偏差来跟踪每个组件作为单独的尺度.
学历奖励进步
对于复杂的多阶段任务,
阶段1:粗的到达 (步骤05M)
奖励仅对象的最终效应器接近. 没有抓取质量要求,没有放置精度. 目标是学习基本的手臂控制和工作空间导航. 成功门
阶段2:获得学士学位 (5M20M步骤)
增加抓质量奖励. 紧缩接近门
阶段3:交通 (步骤20M50M)
激活对象到目标距离奖励. 代理必须抓住,抬起,移动对象到目标. 成功门
阶段4:精确的放置 (步骤50M100M)
缩小所有门
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}
您希望政策在每个阶段学习了基本行为后,继续前进,而不是在它已经适应了简单版本后.如果您在进步之前等待95%的成功,则政策会发展出优化习惯,以便获得简单的回报,而在精度要求增加时很难放弃.
现实奖励差距
在模拟中完美运行的奖励函数可能会在实际硬件上产生完全不同的行为,即使是域名随机化.
联系动力不匹配
模特接触模型 (MuJoCo的软接触,Isaac Sim的GPU加速硬体) 在摩擦系数,接触硬度和变形行为方面与现实不同.取决于细粒度的接触状态的奖励 (抓质,滑动摩擦) 将在sim vs.真实中产生不同的梯度. 减轻:在训练期间随机定制摩擦系数 (0.3
2 观察延迟
实际机器人观测可变延迟 (1
3. 动机模型不匹配
模拟发动机对命令的反应是即时和准确的.真正的伺服器具有带宽限制 (通常是5
实用测试: 在部署一个模拟训练的政策之前,在模拟中评估它,并将所有随机定位到其极端同时 (最糟糕的摩擦,最大的延迟,最低的执行器带宽).如果成功率保持在50%以上,则该政策很可能足够强大,以实现实际部署.如果它下降到30%以下,在训练期间添加更多的随机定位.
特定任务的奖励功能
下面是用于常见操纵任务的现场测试奖励规格,通过RCSV进行多次设计
选择和放置 (简单)
两阶段:接近 + 运输.EEE距离塑造 (重量0.3) 直到接触,然后在抓住后塑造对象距离 (重量0.5).终端:10步程的目标3厘米内对象+100.时间罚款: -0.01/步骤.总训练:在艾萨克实验室 (4096 envs) ~15M步骤,在RTX 4090上 ~45分钟.
插 (强度耐受度 < 1mm)
需要四阶段的课程. 方法,抓住,粗
目标重定向 (手动)
单阶段,但需要精巧的指控.奖励:在电流和目标方向之间进行导向错误,以SO (SO) 3测量为地质距离).关键补充:惩罚对象线性速度 (对象应在位置旋转,而不是飞过工作空间). 预计200万+步骤,即使有精心设计的奖励率也达到40
双手会议
需要每个手臂的分别奖励流,加上协调奖励.每个手臂都获得了自己的方法/抓取/运输阶段.协调奖励奖励是两个手臂在合适的相对配置的组装步骤. 这就是奖励设计真正的困难:协调的重量太多,使两臂在正确的相对姿势中
奖励设计常见的错误
- 观察奖励,不要说: 计算奖励来自摄像头观测 (有噪音) 而不是特权的Sim状态 (这是确切的).在Sim训练期间,总是从地面真实状态计算奖励.政策观察噪音传感器,但奖励应该是干净的.
- **忘记节目界限:**基于潜力的塑造需要正确处理节目重置.如果在节目开始时不零化潜力,每个节目的第一步将从终端状态潜力和初始状态潜力之间的差异中获得虚假的大型塑造信号.
- 奖励延迟不匹配: 如果你的奖励取决于接触检测,并且你的接触检测有2步延迟,奖励信号会迟到2步.政策学习在"应该"时提前行动2步,导致振荡.确保奖励计算和观察时间均齐.
- **不测试在边界:**你的奖励可能适用于工作空间中心的对象,但在边缘附近的对象 (距离正常化行为不同的地方) 或机器人的联合界限附近 (可达性限制与奖励梯度相互作用的地方) 时,可能会断裂.
- **单种子评估:**RL对种子敏感.一个种子中90%的成功率可能会在另一个种子中产生20%的成功率. 在完成奖励工作之前,总是通过至少3种种子进行评估.在RCSV,我们使用5种子作为标准,并报告平均 ± std.
工具和框架
下列框架为操纵RL提供奖励功能基础设施:
- Isaac Lab (NVIDIA): GPU平行化环境,内置的奖励功能类.适合尺寸 (4.096
16,384个平行环境). T6 类支持权重多组件奖励,每个组件的登录是出盒子的. 建议用于生产培训. - MuJoCo + Gymnasium: 更准确的接触物理,较少的平行环境 (通常是1
64与CPU).更适合进行奖励原型设计,需要详细检查个别事件. T7 对于诊断奖励黑客的价值不 . T7 在0.1x速度观察代理人的行为时揭示了奖励曲线隐藏的内容. - robosuite (斯坦福): 预先构建的操纵任务,具有标准的奖励功能. 奖励设计的良好起点.
- RCSV RL环境: 预先配置了使用OpenArm和其他RCSV硬件模型,验证的奖励功能和域名随机定位预设的Isaac Lab环境.
相关阅读
模仿学习中的常见错误 · 行为政策解释 · 机器人创业技术堆
根据RCSV的模拟环境,标准操纵任务的参考奖励实现包括了与反黑客安全措施的内置.
模拟环境用于操纵RL
对于常见的操纵任务,RCSV提供预先配置的模拟环境,具有验证的奖励功能.开始使用经过验证的奖励设计,而不是从零开始构建.







