侧边栏壁纸
  • 累计撰写 23 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

用 Genesis 仿真器实现机械臂抓取:从强化学习到视觉策略的完整流水线

詹迪佳
2026-02-25 / 0 评论 / 0 点赞 / 1 阅读 / 16727 字

最近在看Genesis这个仿真器,总结了一下机器人manipulation任务是怎么通过这个仿真器来完成模型训练的

> 本文介绍 Genesis 仿真框架中一个完整的机械臂抓取任务示例,涵盖特权强化学习(Privileged RL)→ 视觉行为克隆(Visual BC)→ 评估部署的端到端训练流程。


背景与动机

在机器人操作任务中,有一个经典矛盾:

  • 强化学习训练速度快、效果好,但需要精确的状态信息(物体位置、末端位姿等),在真实环境中无法直接获取。

  • 视觉策略更贴近真实部署,仅依赖摄像头图像,但直接用 RL 训练视觉策略极其困难。

该示例采用了业界流行的两阶段"教师-学生"框架来解决这一矛盾:

阶段一:在仿真中用特权状态信息训练教师(RL)

         ↓

阶段二:用教师的动作监督学生学习视觉策略(BC + DAgger)


任务设定

  • 机器人:Franka Emika Panda 7 自由度机械臂

  • 目标:将末端执行器(夹爪)精确对准桌面上随机摆放的红色长方体(位置和朝向均随机)

  • 仿真器:Genesis,支持数千个并行环境的 GPU 加速仿真

  • 感知方案:双目 RGB 相机(左右各一,64×64 分辨率)


阶段一:特权强化学习训练教师模型

环境设计

环境实现在 grasp_env.py 中,核心接口为标准 Gym 风格(reset / step / get_observations)。

观测空间(14 维):教师模型直接获取精确的数字状态,无需依赖感知:

分量

维度

含义

末端 - 物体位置差

3

夹爪中心与物体的相对偏移

末端朝向四元数

4

末端执行器当前姿态

物体绝对位置

3

物体在世界坐标系下的坐标

物体朝向四元数

4

物体当前姿态

动作空间(6 维):末端执行器的增量位姿(ΔX/Y/Z + Δroll/pitch/yaw),通过阻尼最小二乘逆运动学(DLS-IK)转化为关节角度指令,控制频率 100 Hz。

奖励函数 —— 关键点对齐奖励

不直接用距离作奖励,而是在物体上均匀采样 7 个三维关键点(原点 + 6 个轴方向点),计算夹爪关键点与物体关键点的总距离,通过指数函数转为密集奖励:

$$r = e^{-\sum_{i=1}^{7} \|p_i^{finger} - p_i^{object}\|}$$

这样的设计同时约束了位置朝向对齐,比单纯的欧氏距离更鲁棒。

随机化:每个 episode 重置时,物体随机放置在桌面 x∈[0.2, 0.6]、y∈[-0.25, 0.25] 的范围内,并随机偏转 ±45°,以增强策略的泛化能力。

PPO 训练

使用 rsl_rl 库的 OnPolicyRunner 驱动 PPO 算法,策略网络为三层 MLP([256, 256, 128])的 ActorCritic 结构:

  • 并行环境数:2048

  • 每步采集:24 步 × 2048 环境 = 49152 条数据

  • 每次迭代:5 轮 mini-batch 更新

  • 自适应学习率(基于 KL 散度调节,目标 KL = 0.01)

  • 训练轮数:300 次迭代

python examples/manipulation/grasp_train.py --stage=rl --num_envs=2048 --max_iterations=300


阶段二:视觉行为克隆(BC + DAgger)

教师模型训练完成后,冻结其参数作为"专家策略",用来指导仅依赖视觉的学生模型学习。

学生模型架构

学生策略 Policy(实现于 behavior_cloning.py)的输入为双目 RGB 图像(6 通道,左右相机各 3 通道):

左图 (3×64×64) ──┐

                  ├── 共享 CNN Encoder ──┐

右图 (3×64×64) ──┘                      ├── 特征融合 (Linear + ReLU)

                                        │       ↓

                                        ├── ActionHead (MLP + 末端位姿) → 6维动作输出

                                        └── PoseHead  (MLP)             → 物体位姿(辅助任务)

共享编码器采用三层卷积网络(8→16→32 通道)+ 自适应平均池化(4×4),提取左右图像特征后拼接融合。

辅助任务设计:在动作预测之外,额外增加一个物体位姿预测头,监督编码器学习语义特征,提升视觉表征质量。

DAgger 策略混合执行

行为克隆的最大问题是分布偏移(distribution shift):学生策略在训练数据之外的状态会犯错,导致误差不断积累。

本示例使用简化版 DAgger(Dataset Aggregation)来缓解这一问题:

action_diff = torch.norm(student_action - teacher_action, dim=-1)
condition = (action_diff < 1.0).unsqueeze(-1).expand_as(student_action)
action = torch.where(condition, student_action, teacher_action)
  • 若学生动作与教师动作差距 < 1.0:执行学生自己的动作(让学生在自身分布上探索)

  • 否则:回退为教师动作(防止策略进入危险状态)

联合损失训练

每次迭代先采集数据,再对经验缓冲区(FIFO,容量 1000)中的数据做监督训练:

$$\mathcal{L} = \underbrace{\mathcal{L}{MSE}(\hat{a}, a{teacher})}{\text{动作预测损失}} + \underbrace{\mathcal{L}{pos} + \mathcal{L}{quat}}{\text{位姿估计损失(辅助)}}$$

其中四元数损失使用 $1 - |\hat{q} \cdot q|$ 近似旋转距离,避免了四元数重归一化的复杂性。

python examples/manipulation/grasp_train.py --stage=bc --max_iterations=300


评估与可视化

grasp_eval.py 支持分别加载并可视化两种策略的推理效果,还可以录制视频:

# 评估 RL 教师策略
python examples/manipulation/grasp_eval.py --stage=rl

# 评估 BC 学生策略(视觉输入)
python examples/manipulation/grasp_eval.py --stage=bc

# 录制双目摄像头视频
python examples/manipulation/grasp_eval.py --stage=bc --record# 评估 RL 教师策略
python examples/manipulation/grasp_eval.py --stage=rl

# 评估 BC 学生策略(视觉输入)
python examples/manipulation/grasp_eval.py --stage=bc

# 录制双目摄像头视频
python examples/manipulation/grasp_eval.py --stage=bc --record

评估时会自动切换为物理碰撞模式(box_collision=True,box_fixed=False),验证策略真正接触、抓取物体的能力,并在推理结束后执行一段预设的 grasp_and_lift_demo 展示抓取提升动作。


完整流程总览

Genesis 仿真环境(2048 并行)

         ↓

【Stage 1】PPO 强化学习

  • 输入:14 维特权状态

  • 网络:ActorCritic MLP (256-256-128)

  • 奖励:关键点对齐 exp(-dist)

  • 输出:6 维末端位姿增量

         ↓ 保存教师策略检查点

【Stage 2】行为克隆 + DAgger

  • 输入:双目 RGB 图像 (6×64×64) + 末端位姿

  • 网络:共享 CNN + 特征融合 + ActionHead + PoseHead

  • 损失:动作 MSE + 位姿估计(辅助)

  • 执行:DAgger 混合动作

         ↓

【Eval】可视化推理 + 视频录制


关键点

设计点

作用

关键点奖励

同时约束位置和朝向,奖励更密集

DLS 逆运动学

在关节空间操作,避免奇异位形

两阶段教师-学生

利用仿真特权信息,最终部署视觉策略

共享双目编码器

参数高效,同时利用双目视差信息

辅助位姿预测任务

强迫视觉编码器学习语义几何特征

DAgger 混合执行

缓解行为克隆的分布偏移问题

0

评论区