(来源:科技行者)
2015 年前后,如果你去问任何一个做机器人抓取的研究者一个问题:给机械手做一个抓取规划系统,最大的坎在哪里?答案几乎众口一致,数据不够。
不是随便什么数据都不够,是那种把某个具体物体和某种具体抓取姿势对应起来的数据严重不足。你想让一只机械手学会抓杯子、抓螺丝刀、抓苹果,前提是有人先把成千上万次成功的抓取姿势记录下来,喂给神经网络。问题是,抓取数据集的采集成本高得吓人,早期的做法要么靠人类戴着动作捕捉设备做示范,要么靠遥操作机械臂一次次试错,甚至有研究组用热成像相机去捕捉手掌接触物体后留下的热痕迹。这些方法慢、贵,而且天生有一个致命伤:你训练时用的是苹果和螺丝刀,测试时遇到一个从没见过的奇怪形状的水壶,模型大概率就懵了。
这篇论文的题目叫 GOAG,全称是 Generative and Object-Agnostic Grasp Planner,直译过来是"生成式的、与物体无关的抓取规划器"。它想解决的正是这个老大难问题,但解决思路有点反常识:它压根不用任何物体的数据来训练模型。
这事听起来有点玄乎,一个抓取系统,不看任何物体照片、不看任何物体点云,是怎么学会抓东西的?
这就是整篇论文最值得琢磨的地方。
抓取问题卡在哪儿
先说说传统数据驱动方法到底难在哪。
主流的深度学习抓取规划器,不管是早期的回归模型,还是后来的扩散模型、基础模型,骨子里做的都是同一件事:拿一个物体的三维点云当输入,直接吐出一个抓取姿态,包括机械手手掌的位置朝向,以及每个手指关节该弯曲多少度。这类方法统称为"直接预测法",论文里提到的 DexDiffuser、DexGrasp Anything 都属于这一类。
问题是,这种直接预测经常会"想当然"。它给你的姿态,手指可能戳进物体里面去了,这在物理上叫穿透,是抓取里最忌讳的一种失败。所以这类方法往往还得加一道后处理,用物理仿真器筛一遍,把明显不合理的抓取过滤掉,这一步计算开销不小。
另一条路线叫"中间表征法",UniGrasp、GeoMatch、GenDexGrasp、DRO-Grasp 这些工作走的都是这条路。它们不直接预测抓取姿态,而是先预测一张"接触图",也就是物体表面上哪些点应该被手指碰到,再用一个逆运动学求解器把这张图翻译成具体的关节角度。这样做的好处是能天然避免穿透,抓取更靠谱,但代价是,这些方法依然要靠"物体加机械手"配对的训练数据才能学会预测接触图,数据瓶颈并没有真正解开。
论文里给出的对比数字很直接:此前一份叫 GenDexGrasp 的工作,构建训练数据集花了 1400 个 GPU 小时,用的还是英伟达 A100 这种高端卡。这个数字背后的意思是,每换一种机械手、每扩充一批新物体,都得重新烧掉上千小时的算力去生成配对数据。
这就是 2023 年前后这个领域卡住的地方:模型越做越花哨,扩散模型、基础模型都用上了,但骨子里都得先喂饱一个物体专属的训练集,而这个训练集的生产成本高、覆盖面窄,换个新物体形状,识别率立刻掉下来。
GOAG 团队的思路是,能不能干脆不去学"这个物体该怎么抓",而是去学"这只手能怎么抓"?
物体视角换成机械手视角
这是整篇论文最核心的一次视角转换,值得慢慢讲清楚。
先想一个物理事实:当一次抓取成功发生时,机械手表面和物体表面在接触的地方,几何形状是高度吻合的。手指贴住杯壁的那一小片区域,和杯壁贴住手指的那一小片区域,说的其实是同一件事,只是站在两个不同的参照系里看。
论文把这个共同的接触区域记作 C(.),从物体角度看是 C(O),从机械手角度看是 C(H)。这两者近似相等,这是整个方法的立足点。
传统做法固定在物体坐标系里思考问题:给定物体点云 O 和机械手在某个姿态下的"手印"H,数一数物体表面上哪些点足够靠近手印,这些点就构成接触图。这个思路天然要求你手头有一大堆物体,才能算出一大堆接触图。
GOAG 反过来做。它把整个坐标系换成机械手自己的坐标系,机械手固定在原点不动,不管外面的物体是什么,先把物体通过一个逆变换搬到机械手的参照系里。这样一来,接触点就变成了机械手表面上的一个子集,和外面到底是什么物体没有直接关系。
这里有个概念叫手印*:论文里定义的手印 H,指的是机械手表面上真正参与抓取的那部分区域,主要是手掌和手指内侧朝向物体的那一面。这是机械手"能够接触外界"的物理边界。
这个视角转换带来的直接好处是,你现在可以完全脱离物体,单独去研究"这只机械手在各种手指弯曲程度下,它自己身上哪些区域会同时形成一片有效的接触面"。这变成了一个纯粹关于机械手运动学的问题,和外部世界长什么样完全无关。
打个比方可能更好理解。假设你是个乐高积木爱好者,想搞清楚一块特定形状的积木能和哪些其他积木拼接。传统做法是把仓库里所有积木都拿出来,一块一块去试拼,拼上了就记一笔"这块积木和那块积木能拼上"。积木种类越多,你要试的组合就越多,永远试不完,而且换了一批新积木,之前攒的经验全部作废。GOAG 的做法是反过来,先只研究手里这一块积木本身,它凸起的位置在哪、凹陷的位置在哪、能和多宽的凹槽咬合、能承受多大角度的偏转,把这块积木自身的拼接可能性摸透。等真正遇到新积木的时候,你不需要重新试遍仓库,只需要拿这块积木的"拼接指纹"去对比新积木的形状,哪里能对上一目了然。如果不这样做,而是坚持把每一种可能遇到的积木都收集齐再逐一配对训练,你就永远追不上现实世界物体形状的多样性,这正是过去那些方法卡住的地方。
如何在没有物体的情况下生成训练数据
视角换了,接下来的问题是,训练数据从哪儿来。
答案是,从机械手自己的运动学参数里"编"出来。具体做法是,先在机械手的关节活动范围内随机采样出一万组合法的关节角度配置,记作 Q。对每一组配置,算出机械手在这个姿态下的完整表面点云 H(Q)。
光有点云还不够,还需要知道这个姿态下,手上哪些区域"应该"被算作接触区域。这里论文借用了一个来自人体工程学研究的成果,叫抓取分类法*:一套将人类和机器人常见抓取动作归类的体系,论文引用自 Escorcia-Hernandez 等人 2023 年的工作,原本用于分析人类手部完成日常任务时的姿态模式。
论文选取了其中最常见、最适合机械手的六种抓取类型,针对每一种类型,在机械手表面预先标出哪些区域是"可能形成有效接触"的黑色区域,哪些是"不太可能参与接触"的区域。然后,对每一组随机采样的关节配置,再随机挑一种抓取类型,在对应的黑色允许区域内随机撒一些点当作这次采样的"接触点"。这样重复五十次,再乘以一万组关节配置,总共生成了三百万条带标签的点云数据。
这里有个细节值得注意:论文特意强调,如果完全随机地在整个手上撒点当接触点,理论上也能凑出一个数据集,但那样生成出来的接触模式很可能是不合逻辑的,比如某几个手指的接触点组合在物理上根本无法同时实现。借助抓取分类法作为先验,保证了每一条生成的数据都符合真实抓取时手指之间应有的协同关系。
这带来一个立竿见影的效果:整个数据集的生成只花了大约一个 GPU 小时,用的是一块消费级的 RTX 4090 显卡,和前面提到 GenDexGrasp 那 1400 个 GPU 小时相比,差了三个数量级。
这个对比数字值得多说一句。1400 个 GPU 小时换成一个 GPU 小时,意味着如果你想给一种全新设计的机械手重新训练一遍,以前得规划好几周的服务器排期,现在一顿饭的功夫就能跑完。这不只是省钱,而是从根本上改变了这类研究能不能被小团队、小实验室复现和迭代的现实门槛。
模型架构:条件变分自编码器怎么学接触分布
有了数据,接下来是怎么把这些三百万条点云喂给神经网络学习。
这里遇到一个技术性的麻烦:点云的点数是不固定的,神经网络不太喜欢处理长度可变的输入。论文用了一种叫基点集的编码方式来解决这个问题。
基点集*:英文缩写 BPS,是一种把不定长点云转换成固定长度向量的编码技术,做法是预先在空间里放置一批固定的"基准点",然后计算输入点云里每个点到这些基准点的最近距离,拼成一个固定维度的向量。
论文的一个巧妙设计是,这批基准点不是随便撒在一个包围盒里,而是专门离散化了机械手的运动学工作空间,也就是机械手转动所有关节之后,手掌坐标系下能够触及的整个体积范围。这样一来,基准点天然集中在抓取真正会发生的区域,而不是浪费在手根本够不到的地方。
有了这个编码,论文进一步定义了一个连续的接触似然值,对每个基准点算一个 0 到 1 之间的分数,越接近 1 说明这个基准点越靠近真实的接触点,并且方向也对得上。这个分数背后用了一个叫对齐距离的度量,不仅看两点的空间距离,还要看表面法线方向是否一致,毕竟指尖压在物体表面上,压的方向和物体表面朝外的方向应该基本相反,方向不对,压不实。
训练用的核心模型是条件变分自编码器*:英文缩写 CVAE,是一种生成式神经网络,能学会一个数据分布的"压缩表示",并且可以在给定某些条件的情况下,从这个压缩表示里采样生成新的、合理的样本,而不是死记硬背训练时见过的例子。
放在 GOAG 里,这个 CVAE 学的是,给定一个基准点集合的编码,机械手表面上合理的接触分布长什么样。训练完之后,模型的编码器部分其实用不上了,推理阶段直接从一个标准正态分布里随机采样一个隐变量,喂给解码器,就能生成一份新的、符合机械手运动学规律的接触点分布预测。
与此同时,论文还单独训练了一个 PointNet++*:一种专门处理三维点云数据的神经网络结构,能够从点云里逐层提取局部到全局的几何特征,常用于点云分类和分割任务。
这个网络的任务比较专一,就是给定一批接触点,判断每个点应该归属于机械手的哪个手指或者哪一节指骨。这一步很关键,因为光知道"物体表面这里需要被碰一下"还不够,还得知道该派哪根手指去碰。
这里可以做个类比。你让一个刚上岗的快递分拣员去处理一堆包裹,如果只告诉他"这些包裹需要送到某个地址附近",却不告诉他具体该走哪条路线、由哪个片区的快递员负责,他还是没法把包裹准确送到。PointNet++ 在这里干的就是分派路线的活,把一个抽象的"这里需要接触"翻译成一个具体的"三号手指的第二关节负责这里"。如果没有这一步,后面的关节优化就变成了无头苍蝇,不知道该弯哪根手指去够哪个点,整个抓取执行会乱套。
推理阶段:换个新物体,怎么用起来
训练阶段完全没见过任何物体,那真正遇到一个新物体的时候,这套系统是怎么运作的?
第一步,把物体点云通过前面提到的那个逆变换,搬进机械手的坐标系里,这一步依赖你已经指定或者采样出了一个候选的抓取姿态,也就是机械手手掌相对物体应该摆在哪个位置、朝哪个方向。
第二步,对这个搬运过来的物体点云,用和训练时同一套基点集编码方式,算出它的距离场向量。
第三步,从标准正态分布里采样一个隐变量,丢进 CVAE 的解码器,连同刚才算出的距离场向量一起,解码器直接吐出一份接触似然预测。挑出那些似然值超过某个阈值的基准点,这些点就构成了模型认为"应该在这里发生接触"的候选集合。
第四步,用训练好的 PointNet++ 给这些候选接触点分配责任手指。
这里有个自然而然的问题:模型是在纯粹的机械手几何上训练出来的,推理时突然要处理真实物体的形状,这两种数据分布真的能对得上吗?论文自己也承认,这里存在一个"训练测试域偏移"的挑战,并且提到这个问题在他们后续一篇工作 CoToGrasp 里有更深入的探讨。不过从后面的实验结果看,这种迁移在实践中效果不错。
生成出来的接触点候选虽然几何上说得通,但毕竟是从一个随机采样的隐变量里生成的,并不天然保证物理上稳不稳。所以论文加了一道力封闭*:一种描述抓取稳定性的经典力学判据,大致意思是,如果几个接触点上施加的摩擦力组合起来,能够抵消任意方向的外力和外力矩,这个抓取在理论上就是"锁得住"的。
检验步骤。具体做法是,把预测出来的接触点按手指分组,每组取一个重心投影到物体表面上,假设摩擦系数是 0.3,算出所有可能的接触力构成的凸包,如果这个凸包严格包含坐标原点,就说明这组接触点理论上能锁住物体,不会滑脱。
如果没通过这个检验,模型不会将就着往下走,而是重新采样一个隐变量,再试一次,最多试二十次。这一步之所以要设上限,是因为有些候选姿态天生条件差,比如刚好卡在机械手工作空间的边缘,这种情况下怎么采样都难找到稳定组合,与其死磕,不如及时止损换个姿态。
最后一步是关节优化,把力封闭检验通过的接触点,当作目标,反过来去调整机械手每个关节该弯多少度,才能让手指真正碰到这些指定的位置。这一步的优化目标函数包含四项:一项是让手指尽量靠近目标接触点,一项是惩罚手指戳进物体内部,一项是惩罚手指之间自己互相打架,还有一项是约束关节角度不能超出机械手硬件本身的活动范围。
这套流程走下来,你会发现它其实是把"生成"和"验证"拆成了两个独立的阶段,生成阶段大胆天马行空地采样,验证阶段用扎实的物理判据把关。这种设计思路让人联想到写文章时先自由地打草稿,再回过头逐句核实事实,两件事情如果混在一起做,往往顾此失彼,分开做反而效率更高。
实验结果:速度和成功率双赢
理论说完了,数据说话。
论文在 MultiDex 数据集上做了细致的对比实验,这个数据集包含来自 ContactDB 和 YCB 两个物体库的十个物体,测试了三种经典机械手:Barrett 三指手、Allegro 四指手、还有更复杂的 Shadow 五指仿人手。
| 方法 | 是否数据驱动 | 训练是否与物体无关 | 平均成功率 | 效率(秒/个) |
| DFC | 否 | 是 | 79.32% | 大于1800秒 |
| GenDexGrasp(完整版) | 是 | 否 | 70.96% | 约13.6秒 |
| DRO-Grasp(预训练版) | 是 | 否 | 72.47% | 约1.0秒 |
| GOAG(不含力封闭检验) | 是 | 是 | 84.07% | **0.12秒** |
| **GOAG(完整版)** | 是 | 是 | **86.93%** | 0.19秒 |
这张表里有几个数字值得细品。GOAG 完整版的平均成功率是 86.93%,是表里所有方法中最高的,而且它是唯一一个在训练阶段完全没用过物体数据的方法。DFC 这个传统分析法虽然成功率也不低,达到 79.32%,但它每生成一个抓取要超过 1800 秒,这个速度差距是致命的,意味着如果你想批量生成上百个抓取候选,DFC 得跑上大半天,GOAG 只需要几十秒。
还有一个细节特别有意思:去掉力封闭检验这一步之后,GOAG 的成功率依然有 84.07%,只比完整版低了不到 3 个百分点。这说明模型本身已经在生成阶段学到了相当扎实的抓取力学规律,力封闭检验更像是锦上添花的保险丝,而不是救命稻草。这也从侧面印证了论文的核心假设,单纯从机械手自身的几何和运动学出发,确实能学到具有普适性的抓取知识。
再看效率这一列,DRO-Grasp 单个抓取生成速度看起来很快,但论文指出这是因为它每个抓取都要独立跑一次优化,生成的抓取数量一多,总耗时是线性增长的。GOAG 采用的是一次性对一批候选抓取做统一的向量化优化,批量生成上百个抓取时反而更有优势,这也是为什么表里 GOAG 在三种手上都稳定在 0.1 到 0.2 秒这个区间,几乎不随生成数量的增加而明显变慢。
论文还做了一个更大规模的泛化测试,把训练好的 Shadow 手模型,拿去测试五个完全不同的抓取数据集,包括 DexGraspNet、UniDexGrasp、MultiDex、真实机器人采集的 RealDex,以及从人手动作重定向过来的 DexGRAB。
| 方法 | 是否针对每个数据集单独训练 | 五个数据集平均成功率 |
| UniDexGrasp | 是 | 25.42% |
| GraspTTA | 是 | 19.52% |
| SceneDiffuser | 是 | 37.10% |
| UGG | 是 | 44.72% |
| **DexGrasp Anything(DGA)** | 是 | **58.48%** |
| GOAG | 否,只训练一次 | 53.97% |
这张表的关键不在于 GOAG 拿了第一,它排在第二,比专门为每个数据集单独调过参的 DexGrasp Anything 低了大约 4.5 个百分点。真正值得琢磨的是"是否针对每个数据集单独训练"这一列:表里除了 GOAG,所有对手都是针对每一个测试数据集重新训练一遍模型,而 GOAG 从头到尾只在 Shadow 手的运动学上训练了一次,拿着这一份模型去闯五个完全不同的数据集。
这就好比五个人参加一场跨领域知识竞赛,其他四个人每换一个赛道就提前突击复习那个赛道的题库,只有一个人全程没复习任何具体题目,凭着基本功硬闯下来,最后成绩只比复习过的人差一点点。如果不做这种"一次训练、到处使用"的设计,那你每来一个新场景就得重新准备一整套针对性的训练数据,这在现实世界里几乎不可能持续,因为真实世界里物体的种类是无穷的,不可能穷举完再逐一喂给模型。
真实机器人上的验证
仿真结果好看是一回事,真机器人上能不能用是另一回事。
论文团队用了一只 Allegro 左手,装在一台七自由度的机械臂末端,对着 YCB 数据集里的真实物体做实机测试,成功抓取了十一件不同的物体,包括牙膏盒、清洁剂瓶、木棍等日常用品。论文里的配图显示了机械臂实际抓取的场景,以及对应的仿真复现画面并排展示,从图上能看到抓取姿态在虚实之间基本一致,说明这套从纯机械手几何学出来的策略,确实能扛得住真实世界里传感器噪声和物体表面不规则形状带来的干扰。
写在后面
读完这篇论文,最触动我的其实不是那个 86.93% 的成功率数字,而是那个 1400 个 GPU 小时对 1 个 GPU 小时的对比。这个差距太夸张了,以至于让人重新思考一个问题:我们是不是习惯性地把"更多数据、更贵的训练"等同于"更好的方法",而忽略了换一个问题定义方式,原本需要海量数据才能解决的事,可能根本不需要那么多数据。
另一个让我意外的细节是,去掉力封闭检验之后模型成功率只掉了不到 3 个点。这说明生成模型在训练阶段学到的东西,已经隐含了相当程度的物理规律,不需要额外的显式约束来兜底。这多少颠覆了我之前的一个默认预期,总以为纯粹靠数据分布学出来的生成模型,天生缺乏物理常识,得靠后处理硬性修正才能用。
论文里没细说的一点是,这套方法对于那些体积超出机械手工作空间的大物体效果会打折扣,采样策略需要专门适配。这大概是这条思路接下来最值得深挖的方向:一只手能学会抓握自己够得着的一切,那够不着的那部分世界,又该怎么办?
Q&A
Q1:GOAG是什么?
A:GOAG是一种物体无关的机械手抓取规划方法,核心思路是只用机械手自身的运动学和几何数据训练模型,完全不依赖物体的抓取数据集,从而在遇到全新物体时也能生成有效抓取。
Q2:GOAG相比传统方法效率高在哪里?
A:GOAG训练数据生成只需约1个GPU小时,而此前GenDexGrasp类方法需要1400个GPU小时;在生成大批量抓取时,GOAG单个抓取平均耗时0.1到0.2秒,明显快于需要逐个独立优化的方法。
Q3:GOAG在没见过物体训练数据的情况下效果如何?
A:在MultiDex数据集测试中,GOAG平均成功率达到86.93%,高于多个专门针对该数据集训练的方法;在跨五个数据集的泛化测试中,GOAG只训练一次就取得53.97%的平均成功率,接近专门为每个数据集单独训练的最优方法。

2026-08-25 02:35:04
上一个
