《D (R,O) Grasp:跨机械手灵巧抓取的机器人 - 物体交互统一表示》论文解读

目录

摘要:核心亮点先知道

[I. 引言:为什么要做 D (R,O) Grasp?](#I. 引言:为什么要做 D (R,O) Grasp?)

[图 1:D (R,O) Grasp 的核心流程](#图 1:D (R,O) Grasp 的核心流程)

[II. 相关工作:我们和前人比强在哪?](#II. 相关工作:我们和前人比强在哪?)

[表 I:主流灵巧抓取方法大比拼](#表 I:主流灵巧抓取方法大比拼)

两个关键研究方向的局限

[III. 方法详解:D (R,O) Grasp 到底怎么工作?](#III. 方法详解:D (R,O) Grasp 到底怎么工作?)

[方法总览(图 2)](#方法总览(图 2))

[III-A. 第一步:构型不变预训练 ------ 让模型 "认手不认姿态"](#III-A. 第一步:构型不变预训练 —— 让模型 “认手不认姿态”)

具体操作

[图 3:预训练的动机](#图 3:预训练的动机)

[III-B. 第二步:预测 D (R,O) 矩阵 ------ 机器人和物体的 "距离密码"](#III-B. 第二步:预测 D (R,O) 矩阵 —— 机器人和物体的 “距离密码”)

[两步生成 D (R,O)](#两步生成 D (R,O))

[III-C. 第三步:从 D (R,O) 生成抓取姿态 ------ 让机械手动起来](#III-C. 第三步:从 D (R,O) 生成抓取姿态 —— 让机械手动起来)

[III-D. 损失函数:逼着模型学准](#III-D. 损失函数:逼着模型学准)

[IV. 实验验证:D (R,O) Grasp 真的好用吗?](#IV. 实验验证:D (R,O) Grasp 真的好用吗?)

[IV-A. 评价标准](#IV-A. 评价标准)

[IV-B. 数据集](#IV-B. 数据集)

[IV-C. 整体性能:比所有基线都强(Q1)](#IV-C. 整体性能:比所有基线都强(Q1))

[表 II:和主流方法的对比](#表 II:和主流方法的对比)

[图 4:抓取效果可视化对比](#图 4:抓取效果可视化对比)

[IV-D. 多样抓取:能按需求抓不同姿势(Q3)](#IV-D. 多样抓取:能按需求抓不同姿势(Q3))

[图 5:腕部朝向可控](#图 5:腕部朝向可控)

[IV-E. 预训练效果:真的能跨姿态认手(Q4)](#IV-E. 预训练效果:真的能跨姿态认手(Q4))

[图 6:预训练的点匹配可视化](#图 6:预训练的点匹配可视化)

[IV-F. 鲁棒性:缺一点物体点云也能抓(Q5)](#IV-F. 鲁棒性:缺一点物体点云也能抓(Q5))

[表 III:不同条件下的成功率](#表 III:不同条件下的成功率)

[图 9(附录):部分点云抓取示例](#图 9(附录):部分点云抓取示例)

[IV-G. 真实实验:在物理世界也好用(Q6)](#IV-G. 真实实验:在物理世界也好用(Q6))

实验流程

结果

[图 7:真实实验 setup](#图 7:真实实验 setup)

[图 8(附录):真实抓取示例](#图 8(附录):真实抓取示例)

[IV-H. 零样本泛化:新机械手也能抓(Q7,附录 B)](#IV-H. 零样本泛化:新机械手也能抓(Q7,附录 B))

[表 V:零样本泛化结果](#表 V:零样本泛化结果)

[V. 结论:D (R,O) Grasp 的核心价值](#V. 结论:D (R,O) Grasp 的核心价值)

附录关键补充(结合剩余图片)


摘要:核心亮点先知道

这篇文章提出了一个叫D(R,O) Grasp的新框架,专门解决 "不同机械手抓不同形状物体" 的难题 ------ 也就是 "跨机械手灵巧抓取"。

  • 输入:机械手的结构描述 + 物体的 3D 点云(可以理解为 "物体表面的一堆 3D 坐标点");
  • 输出:机械手能实际做到的、稳定的抓取姿态;
  • 效果
    • 仿真中测试 3 种不同机械手(3 指、4 指、5 指),平均抓取成功率 87.53%,从计算到出结果不到 1 秒;
    • 真实实验用 LeapHand 机械手,10 个陌生物体平均成功率 89%;
  • 代码 & 视频 :都在项目网站(D(R,O) Grasp)。

I. 引言:为什么要做 D (R,O) Grasp?

灵巧抓取是机器人做复杂任务的第一步(比如捡东西、组装),但一直有个痛点:很难快速生成 "既稳定、又能适配不同机械手和物体" 的抓取方案

现有方法主要分两类,都有明显缺陷:

  1. 优化类方法:靠数学优化找抓取姿态,但只关注指尖接触、需要物体完整形状,计算超慢;
  2. 数据驱动方法 (更主流):
    • 机器人中心法:直接学 "观察→机械手关节角度" 的映射,推理快但 "认死手"------ 换个机械手就没用了,而且需要海量数据;
    • 物体中心法:学 "物体接触点 / 接触图",能适配不同物体,但需要额外算 "逆运动学"(比如把 "接触点" 转成 "关节怎么动"),计算慢还容易出错。

为了弥补这两类方法的缺点,作者提出了D (R,O) 统一表示------ 它不偏机器人也不偏物体,而是直接捕捉 "机械手抓取姿态" 和 "物体形状" 的交互关系,既能跨机械手,又能跨物体,还快。

图 1:D (R,O) Grasp 的核心流程

这张图直观展示了框架的 3 个关键步骤:

  1. 构型不变预训练:让模型先 "理解" 不同机械手的 "张开 / 闭合" 等姿态,不管手怎么动,都能找到对应位置(比如 "指尖" 不管张开还是闭合,都能认出来);
  2. 预测 D (R,O) 表示:用预训练好的模型,分析机器人和物体的点云,输出一个 "距离矩阵"(记录机器人每个点到物体每个点的距离);
  3. 生成跨机械手抓取:从 D (R,O) 矩阵反推出机械手的抓取姿态,不管是 3 指、4 指还是 5 指手,都能适配。

简单说:输入点云→预训练 "打底"→算距离矩阵→输出任何机械手都能用的抓取方案。


II. 相关工作:我们和前人比强在哪?

这部分主要对比现有方法,突出 D (R,O) Grasp 的优势,核心看表 I和两个研究方向。

表 I:主流灵巧抓取方法大比拼

方法 抓取表示 方法类型 能跨机械手? 推理速度 样本效率 支持部分点云? 全手接触?(不只是指尖) 有抓取偏好接口?
DFC [2] 关节值 机器人中心 ❌❌(超慢) -
UniDexGrasp++ [8] 关节值 机器人中心 ✅✅(快)
UniGrasp [9] 接触点 物体中心 ❌(慢)
GenDexGrasp [12] 接触图 物体中心 ❌(慢)
DRO-Grasp(本文) D (R,O) 矩阵 交互中心 ✅✅(快) ✅(手掌朝向)

从表中能直接看出:D (R,O) Grasp 是唯一兼顾所有优点的方法------ 能跨机械手、推理快、数据需求少、缺一点物体点云也能用、全手接触更稳定,还能让用户指定 "手掌朝哪个方向抓"。

两个关键研究方向的局限

  1. 基于学习的灵巧抓取

    • 物体中心法:靠接触点 / 图,但转成 "关节动作" 需要额外优化,慢且不准;
    • 机器人中心法:直接出关节角,但 "认死手"(换机械手就废),而且从仿真转到真实机器人误差大。
  2. 机器人手特征学习

    现有方法(比如用自编码器、3D 体积表示)都 "认死姿态"------ 比如只学了 "张开手" 的特征,换 "闭合手" 就不认了。本文提出的 "构型不变预训练",就是要解决这个问题。


III. 方法详解:D (R,O) Grasp 到底怎么工作?

这是文章的核心,整个流程分 3 步:预训练→预测 D (R,O)→生成抓取姿态 ,结合图 2(方法总览) 一步步看。

方法总览(图 2)

先记住这个流程:

  1. 左边:用 "对比学习" 做 "构型不变预训练",把机器人编码器练熟;
  2. 中间:输入机器人和物体的点云,用编码器提特征,再用交叉注意力建立两者联系,最后用 CVAE(一种能生成多样结果的神经网络)输出 D (R,O) 矩阵;
  3. 右边:从 D (R,O) 反推机器人抓取点云,用 SVD(一种数学方法)算每个连杆的 6D 姿态(平移 + 旋转),最后优化关节值,让机械手能实际动到这个姿态。

III-A. 第一步:构型不变预训练 ------ 让模型 "认手不认姿态"

问题:机械手 "张开" 和 "闭合" 时,同一个部位(比如指尖)的 3D 位置变了,模型容易认不出来,导致抓不准。

解决思路:让模型学习 "不管手怎么动,同一部位的特征都一样"。

具体操作
  1. 从数据集里找一个成功的抓取姿态(比如 "握杯子" 的 q_A),再找一个腕部姿态相似的 "标准姿态"(比如 "半张开" 的 q_B);
  2. 给机械手每个连杆(比如手指第一节、第二节)表面均匀采样点,存成 "连杆点云";用 "前向运动学"(简单说就是 "根据关节角度算点位置"),分别算出 q_A 和 q_B 对应的完整机器人点云(P^A 和 P^B,各 512 个点);
  3. 把两个点云输入编码器,得到每个点的特征(φ^A 和 φ^B);
  4. 对比学习:让 "同一部位的点"(比如 P^A 的指尖点和 P^B 的指尖点)特征靠得近,"不同部位的点" 特征离得远,用公式(1)(2)计算损失,逼着模型学出 "部位不变" 的特征。
图 3:预训练的动机

这张图想说明:预训练能让模型对齐 "不同姿态的机械手"------ 比如左边张开手和右边闭合手,对应的部位(指尖、掌心)能精准匹配,为后续 "抓物体" 打下基础。


III-B. 第二步:预测 D (R,O) 矩阵 ------ 机器人和物体的 "距离密码"

D (R,O) 是一个N_R×N_O 的矩阵(N_R=512,机器人点云的点数;N_O=512,物体点云的点数),每个元素代表 "抓取姿态下,机器人第 i 个点到物体第 j 个点的距离"。有了这个矩阵,就能反推机器人该怎么摆。

两步生成 D (R,O)
  1. 提特征 + 建联系

    • 机器人点云(初始张开姿态)和物体点云,分别用编码器提特征(φ^R 和 φ^O)------ 机器人编码器用第一步预训练的参数,冻结不动,保证 "认手" 能力;
    • 用 "多头交叉注意力"(类似 "让机器人特征和物体特征互相看"),让两者建立联系(比如 "机器人指尖特征" 会关注 "物体边缘特征"),得到关联后的特征 ψ^R 和 ψ^O。
  2. CVAE 预测距离

    • 用 CVAE 捕捉 "机械手 + 物体 + 抓取姿态" 的所有变化(比如不同手抓同一个物体,或同一只手抓不同物体),输入是 "抓取姿态下的点云" 和 ψ^R、ψ^O,输出一个 64 维的 "隐藏变量" z;
    • 把 z 和 ψ 拼接,用一个核函数(公式 7)计算每个点对的距离,最终组成 D (R,O) 矩阵。

III-C. 第三步:从 D (R,O) 生成抓取姿态 ------ 让机械手动起来

有了 "距离密码" D (R,O),怎么转成机械手的关节角度?分 3 步:

  1. 反推机器人抓取点云

    对机器人每个点(比如 P_i^R),D (R,O) 的第 i 行是它到所有物体点的距离。用 " multilateration 方法"(类似 "通过多个基站的距离定位手机"),解最小二乘问题(公式 9),反推这个点在 "抓取姿态下" 的位置。512 个点都算完,就得到了 "抓取姿态的机器人点云" P^P。

  2. 算每个连杆的 6D 姿态

    每个连杆都有之前存的 "连杆点云",把 P^P 里属于这个连杆的点,和原始 "连杆点云" 做 "刚体配准"(用 SVD,公式 10),算出连杆的平移(x_i)和旋转(R_i)------ 也就是 6D 姿态。

  3. 优化关节值

    用 CVXPY(一个优化工具)调整关节角度,让每个连杆的实际平移和预测的 6D 姿态对齐,同时满足 "关节不能超过极限"(比如手指不能弯过头)、"每次调整不能太大"(避免动作太猛)。这个优化能并行计算,1 秒内就能收敛,哪怕是 28 个自由度的 ShadowHand(6 个腕部 + 22 个手指关节)也能搞定。


III-D. 损失函数:逼着模型学准

总损失分 4 部分,确保模型输出的抓取 "准、稳、不碰撞":

  1. D (R,O) 损失:预测的距离矩阵和真实矩阵比,差得越少越好;
  2. 6D 姿态损失:预测的连杆姿态和真实姿态比,平移差、旋转差都要小(公式 14);
  3. 防穿透损失:避免机器人手和物体穿在一起(用 "有符号距离函数" 算,负的越多穿透越严重,要惩罚);
  4. KL 散度损失:让 CVAE 的隐藏变量符合高斯分布,保证生成的抓取多样且合理。

IV. 实验验证:D (R,O) Grasp 真的好用吗?

作者设计了 7 个问题(Q1-Q7),用仿真和真实实验回答,核心看表 II(整体性能) 和各类可视化图。

IV-A. 评价标准

  • 成功率:用 IsaacGym 仿真,机械手抓物体后,沿 6 个方向各施 1 秒力,物体位移 < 2cm 算成功;
  • 多样性:成功抓取的关节值标准差(越大说明能抓的姿势越多);
  • 效率:从计算到出关节角度的总时间。

IV-B. 数据集

用 CMapDataset 的子集,过滤后剩 24764 个有效抓取,3 种机械手:Barrett(3 指)、Allegro(4 指)、ShadowHand(5 指)。

IV-C. 整体性能:比所有基线都强(Q1)

表 II:和主流方法的对比
方法 成功率(%) 平均成功率 多样性(弧度) 效率(秒)
Barrett Allegro ShadowHand ShadowHand Barrett Allegro ShadowHand
DFC [2](优化类) 86.30 76.21 58.80 73.77 0.435 >1800 >1800 >1800
GenDexGrasp [12](物体中心) 67.00 51.00 54.20 57.40 0.318 14.67 25.10 19.34
ManiFM [13](物体中心) 42.60 42.60 - 42.60 0.288 9.07 - -
DRO-Grasp(无预训练) 87.20 82.70 46.70 72.20 0.429 0.49 0.47 0.98
DRO-Grasp(本文) 87.30 92.30 83.00 87.53 0.441 0.49 0.47 0.98

关键结论:

  • 成功率最高:平均 87.53%,比第二名 DFC 高 13 个百分点,比 GenDexGrasp 高 30 个百分点;
  • 最快:不到 1 秒出结果,DFC 要半小时以上,GenDexGrasp 要十几秒;
  • 预训练有用:去掉预训练后,ShadowHand 成功率从 83% 掉到 46.7%,说明预训练是核心。
图 4:抓取效果可视化对比

这张图能直观看到差距:

  • 本文方法:抓取姿态自然,和物体贴合好;
  • DFC:姿态不自然(比如手指弯得奇怪);
  • GenDexGrasp:对复杂物体(比如恐龙玩具)有明显穿透(手指穿进物体里);
  • ManiFM:看着好看,但只靠指尖接触,一受力就掉,成功率低。

IV-D. 多样抓取:能按需求抓不同姿势(Q3)

抓取多样性有两个维度:腕部朝向可控 + 同一朝向多姿势

图 5:腕部朝向可控

图中箭头是 "用户指定的手掌朝向",同颜色的机械手是模型输出的抓取姿态 ------ 比如指定 "手掌朝右",机械手就会从右侧抓;指定 "手掌朝下",就会从上往下抓。说明模型能按用户需求调整抓取方向。

另外,通过采样 CVAE 的隐藏变量 z,还能在 "同一朝向" 下生成多个不同的手指姿势(比如都从上面抓杯子,手指可以张一点或合一点),满足不同场景需求。

IV-E. 预训练效果:真的能跨姿态认手(Q4)

图 6:预训练的点匹配可视化

图中左边是 "张开手",右边是 "闭合手",每个点的颜色代表 "和对面手哪个点最像"。能看到:

  • 同一只手:张开手的指尖点(红色)和闭合手的指尖点(红色)精准匹配,掌心点(蓝色)也对应蓝色,说明模型认得出 "不管手怎么动,部位不变";
  • 不同手:比如 Allegro(4 指)和 ShadowHand(5 指),对应的部位也能匹配,说明特征能跨机械手迁移。

表 II 中 "无预训练" 的成功率下降,也证明预训练是必不可少的。


IV-F. 鲁棒性:缺一点物体点云也能抓(Q5)

真实场景中,深度相机可能只能拍到物体的一部分(比如杯子被挡住了一半)。作者做了实验:训练和测试时都去掉物体 50% 的点云(连续区域),看模型还能不能抓。

表 III:不同条件下的成功率
方法 成功率(%) 多样性(弧度)
Barrett Allegro ShadowHand Barrett Allegro ShadowHand
单机械手训练(Single) 84.80 88.70 75.80 0.505 0.435 0.425
多机械手训练(Multi) 87.30 92.30 83.00 0.513 0.397 0.441
部分点云(Partial) 84.70 87.60 81.80 0.511 0.401 0.412

结果:即使只有一半点云,成功率只比完整点云低一点点(比如 Allegro 从 92.30% 到 87.60%),说明模型不依赖 "完整物体形状",鲁棒性强。

图 9(附录):部分点云抓取示例

红色点是 "能看到的物体点云",白色是 "看不到的部分"------ 即使只看到杯子的一半、恐龙的后背,模型也能生成稳定的抓取姿态。

IV-G. 真实实验:在物理世界也好用(Q6)

实验平台:uFactory xArm6 机械臂 + LEAP Hand 机械手 + Realsense D435 相机(图 7)。

实验流程
  1. 用 AR Code 扫描 10 个陌生物体(苹果、包、恐龙玩具等),用相机标定和 FoundationPose 算法算物体的 3D 姿态;
  2. 给模型输入 "物体点云" 和 "32 个不同手掌朝向的机械手点云"(从顶到侧);
  3. 选排名前 5 的抓取方案,用 MPLib 规划机械臂运动,PD 控制器控制机械手闭合。
结果

10 个物体,每个试 10 次,平均成功率 89%(表 IV),具体如下:

物体 成功次数 物体 成功次数
苹果 9/10 杯子 7/10
10/10 恐龙玩具 9/10
刷子 9/10 鸭子玩具 8/10
饼干盒 10/10 茶叶盒 8/10
立方体 9/10 马桶清洁剂 10/10
图 7:真实实验 setup

左边是机械臂 + LEAP Hand,中间是桌子上的物体,右边是 overhead 相机,用来拍物体点云。

图 8(附录):真实抓取示例

10 个物体的成功抓取照片,比如 "用 LEAP Hand 抓苹果""抓鸭子玩具的脖子",姿态自然且稳定,证明模型能从仿真落地到真实场景。

IV-H. 零样本泛化:新机械手也能抓(Q7,附录 B)

实验:用 A 机械手训练模型,直接用在没训练过的 B 机械手上,看成功率。

表 V:零样本泛化结果
训练机械手 测试机械手成功率(%)
Barrett Allegro ShadowHand
Allegro(4 指) 83.60 88.70(自测试) 1.10
Barrett(3 指) 84.80(自测试) 42.40 6.90
ShadowHand(5 指) 56.90 83.70 75.80(自测试)

结论:高自由度手→低自由度手 泛化好(比如用 5 指手训练,用 3 指手测试成功率 56.90%);但低自由度→高自由度 几乎失败(比如 3 指训练,5 指测试只有 6.90%)。

原因:高自由度手的 "姿态变化更多",模型学的 "匹配能力" 更强,能应对简单的低自由度手;反之,低自由度手学的能力太局限,搞不定高自由度手的复杂姿态。


V. 结论:D (R,O) Grasp 的核心价值

  1. 统一表示:D (R,O) 矩阵打破了 "机器人中心" 和 "物体中心" 的界限,同时解决 "跨机械手" 和 "跨物体" 的问题;
  2. 预训练赋能:构型不变预训练让模型 "认手不认姿态",大大提升泛化能力;
  3. 实用高效:仿真和真实实验都证明成功率高、速度快(1 秒内)、鲁棒性强(缺点云也能抓),能落地到实际场景。

附录关键补充(结合剩余图片)

图 10:抓取控制器:为了避免 "静态预测的误差"(比如轻微穿透),作者设计了 "动态控制器"------ 生成两个姿态:q_outer(离物体远一点)和 q_inner(离物体近一点),让机械手从 q_outer 慢慢闭到 q_inner,更贴近真实抓取过程。

图 11:静态指标的坑:有些抓取在 "静态指标" 下算成功(比如手和物体没穿透),但实际不稳定(比如手指没抓稳)或自穿透(手指互相碰到),作者用的 "动态指标"(施力测试)能过滤掉这些坏抓取,更严谨。

图 12:点云编码器架构:机器人和物体的编码器用 "静态图 CNN"------5 个卷积层,每个点只关注周围 32 个点(局部特征),最后加全局池化(整合整体特征),保证既能抓局部细节,又能理解整体形状。

相关推荐
雲錚12 小时前
给你的vibe coding加上翅膀
人工智能·机器学习
TGC达成共识12 小时前
年轻教师开学焦虑破解:从心出发,重构健康工作生活新秩序
人工智能·科技·其他·安全·重构·生活·风景
LeonDL16813 小时前
【通用视觉框架】基于Python+OpenCV+PyQt5开发的视觉框架软件,全套源码,开箱即用
图像处理·人工智能·python·opencv·pyqt5·通用视觉框架软件·机器视觉软件框架
神州问学13 小时前
全球第一个专业设计类AI Agent:Lovart
人工智能
嘀咕博客13 小时前
PDF.AI-与你的PDF文档对话
人工智能·pdf
GEO_JYB13 小时前
大语言模型的“思考”逻辑:从Token生成到上下文理解的内部流程
人工智能·chatgpt
神州问学13 小时前
2025中国AI客户端巅峰之战:超域博弈与熵减革命
人工智能
CH3_CH2_CHO13 小时前
DAY02:【DL 第一弹】pytorch
人工智能·pytorch·python·深度学习·回归
Baihai_IDP13 小时前
系统梳理 Test-Time Compute 的主要实现路径
人工智能·llm