Dexterous Manipulation Based on Prior Dexterous Grasp Pose Knowledge
核心思想
灵巧手做操控任务(如打开笔记本电脑、拧水龙头)时,RL 从随机位置开始探索极其低效——大部分时间浪费在寻找”从哪里开始抓”。
本文的核心洞察:先用抓取先验知识确定好的初始抓取姿态,再用 RL 精细操控。
两阶段方法:
- Phase 1:自动生成针对物体功能部位的灵巧抓取姿态
- Phase 2:从该姿态出发用 RL 学习操控
结果:学习效率提升 80-150 倍,成功率提升 15-29 个百分点。
背景知识
为什么灵巧操控特别难
| 挑战 | 说明 |
|---|---|
| 高维动作空间 | 手臂 6 DoF + 灵巧手 16 DoF = 22 维 |
| 初始位置敏感 | 必须从正确角度接触物体的正确部位 |
| 功能部位 | 打开笔记本要抓盖子,不能抓底座 |
| 接触力学复杂 | 多指与物体的接触组合爆炸 |
为什么初始姿态如此重要
想象让一个人蒙眼打开水龙头——如果起始时手已经放在水龙头把手上,任务很简单;如果起始时手在桌子另一端,大部分时间都在”找水龙头”。
RL 也是一样:从随机位置出发,需要数百万步才能偶然发现一个好的接触方式。
方法详解
Phase 1:初始抓取姿态生成
1.1 功能部位分割
用 PointNet 分割网络从点云中提取物体的功能部位:
\[P_f = \text{Se}(P_1)\]其中 $P_1$ 是从相机获取的部分视角点云。
训练数据:每类物体 6,000 个点云(功能部位/非功能部位/手臂/手),共 4 类 × 6,000 = 24,000 个样本。
1.2 双指抓取 → 灵巧手抓取映射
- 用 AnyGrasp 在功能部位 $P_f$ 上生成 $n$ 个双指抓取姿态 $\hat{G} = [R, t, w]$(旋转、平移、抓取宽度)
- 将抓取宽度 $w$ 离散化为 $n$ 个等级
- 每个宽度对应 4 种灵巧手抓取类型(预定义的手指张开方式)
- 碰撞检测过滤无效姿态
- 选择离相机最近的有效姿态作为初始 $G = [R, t, B]$($B \in \mathbb{R}^{16}$ 为 Allegro Hand 的 16 个关节角)
Phase 2:强化学习精细操控
2.1 MDP 定义
$\langle S, A, O, R’, T, U \rangle$,使用 PPO 算法。
2.2 观察空间 $O$(3 种模态)
| 模态 | 内容 | 处理 |
|---|---|---|
| 点云 $P_2$ | RL 相机捕获 | PointNet 特征提取 |
| 本体感受 $S_r$ | 关节角度和速度 | 直接输入 |
| 目标状态 | 物体目标位置/旋转 | 直接输入 |
PointNet 特征提取器用 Phase 1 的分割网络预训练初始化。
2.3 动作空间 $A$(22 维)
| 维度 | 控制 |
|---|---|
| 6 维 | 末端执行器线速度 + 角速度 → IKFast 求关节角 |
| 16 维 | Allegro Hand 关节角目标 → PD 控制 |
2.4 奖励函数(三部分分解)
\[R' = \alpha \cdot r_\text{in} + \beta \cdot r_\text{co} + \eta \cdot r_\text{re}\]交互奖励 $r_\text{in}$(鼓励手接近并操控物体):
\[r_\text{in} = r_\text{finger} + r_\text{palm}\] \[r_\text{finger} = \sum_{X_i \in X} \min(-\|X_i - X_\text{object}\|, \lambda)\] \[r_\text{palm} = \min(\|Y_\text{palm} - Y_\text{object}\|, \gamma)\]- $r_\text{finger}$:手指接近物体功能部位中心
- $r_\text{palm}$:手掌朝向与物体对齐
完成奖励 $r_\text{co}$(鼓励任务完成):
\[r_\text{co} = \text{Progress}(\text{task}) + \delta \cdot \text{IsCompletion} \cdot (H_s - H_c)\]- $\text{Progress}$:任务进度(如笔记本打开角度)
- $\text{IsCompletion}$:是否完成(0/1)
- $H_s - H_c$:鼓励更快完成(最大步数 - 当前步数)
约束奖励 $r_\text{re}$(惩罚不安全行为):
\[r_\text{re} = r_\text{robot} + r_\text{en}\] \[r_\text{robot} = -(\|G_{t+1,\text{palm}} - G_{t,\text{palm}}\| + q_\text{vel}})\] \[r_\text{en} = -\sum_{j_i \in J} \text{IsCollision}(j_i, \text{object})\]- $r_\text{robot}$:惩罚大幅运动和高速
- $r_\text{en}$:惩罚手臂关节与物体碰撞
实验结果
仿真结果(SAPIEN 仿真器)
| 任务 | 本文方法 | DexArt | 提升 |
|---|---|---|---|
| 提桶 | 94.17% | 79.17% | +15.00pp |
| 开笔记本 | 90.00% | 66.67% | +23.33pp |
| 拧水龙头 | 73.33% | 60.00% | +13.33pp |
| 开马桶盖 | 87.88% | 58.57% | +29.31pp |
扩大测试空间(16× 大区域)
| 任务 | 本文方法 | DexArt |
|---|---|---|
| 提桶 | 85.21% | 54.58% |
| 开笔记本 | 76.30% | 34.00% |
| 拧水龙头 | 47.73% | 17.56% |
| 开马桶盖 | 42.38% | 34.29% |
测试空间扩大后,抓取先验的优势更加明显。
学习效率
| 任务 | 本文方法达到 75% 的步数 | DexArt 在相同步数的成功率 |
|---|---|---|
| 提桶 | 0.4M 步 | ~0%(需要 1.5M+ 步) |
| 开笔记本 | 0.1M 步 | — |
学习效率提升 80-150 倍。
消融:抓取先验的各组件
| 组件 | 提桶 @ 20M 步 | 开笔记本 @ 12M 步 |
|---|---|---|
| 仅位置 $t$ | 87% | 79% |
| 位置 + 旋转 $R$ | 89% | 87% |
| 完整抓取 $[R, t, B]$ | 94% @ 5M | 90% @ 6M |
完整抓取先验(包括手指姿态 $B$)大幅减少训练步数。
真实世界实验(UR5 + Allegro Hand)
| 任务 | 简单 | 困难 | 平均 |
|---|---|---|---|
| 提桶 | 84.62% | 73.58% | 79.08% |
| 开笔记本 | 77.19% | 71.15% | 74.31% |
成功从仿真迁移到真实世界。
个人思考
- “先站对位置再行动” 的思路极其自然——人类做精细操控也是先找好抓握位置,再进行后续动作。
- 80-150× 学习效率提升说明初始姿态是 RL 探索的最大瓶颈——解决了”从哪里开始”的问题后,”怎么操控”变得相对容易。
- 三部分奖励分解(交互 + 完成 + 约束)是清晰实用的设计:每部分解决一个明确问题,避免了单一奖励的歧义。
- 功能部位分割的必要性:打开笔记本要抓盖子不是底座——这种”在哪里抓”的语义理解是灵巧操控的前提。
- 真实世界 74-79% 的成功率说明方法具有实际可用性,但拧水龙头(73%)等需要更精细力控的任务仍有提升空间。