一、机械臂抓取,到底在做什么?
如果让一个人抓杯子,我们通常不会觉得这有多难。因为人眼看一眼,手伸过去,微调一下姿势,就能拿起来。
但对机械臂来说,“抓杯子”其实要分成很多步骤:
- 先看见物体
- 判断物体在哪里、朝向如何
- 决定从哪里抓、怎么抓
- 规划机械臂怎么运动过去
- 真正闭合夹爪,把它拿起来
所以,一个完整的机械臂抓取系统,通常是这样一条链路:
视觉感知 → 位姿估计 → 抓取位姿生成 → 路径规划 → 执行抓取
如果再说直白一点:
- 视觉感知:我看到了什么?
- 位姿估计:东西具体在哪里?是正着放还是斜着放?
- 抓取位姿生成:夹爪应该从哪个方向伸过去?
- 路径规划:机械臂怎么动过去才不会撞到别的东西?
- 执行控制:抓的时候是否稳定,需不需要实时调整?
这也是为什么“机械臂抓取”看起来像一个小任务,实际上却是机器人、计算机视觉和机器学习的交叉热点。
二、机械臂抓取的三种主要形式
机械臂抓取大致可以分成三类:
- 2D 平面抓取
- 6DoF 抓取
- 灵巧手 / 多指抓取
这三类的难度是逐步上升的。
1. 2D 平面抓取:最容易入门的一类
这是最经典、最简单的一种抓取设定。
通常假设:
- 相机从上往下看
- 物体放在桌面上
- 夹爪也是从上往下抓
这时一个抓取动作,常常可以表示成:
(x,y,w,h,θ)
它的含义分别是:
- x,y:抓取中心在图像中的位置
- w,h:抓取矩形的宽和高
- θ:抓取角度
你可以把它理解为:
在图片上画一个旋转矩形,这个矩形就表示“夹爪应该在这里、以这个角度夹下去”。
为什么它简单?
因为它基本还是在二维图像平面上做学习,很多方法都可以直接借用目标检测思路:
- 输入:RGB 或 RGB-D 图像
- 网络:2D 卷积网络
- 输出:抓取矩形和抓取得分
它的局限也很明显
它只适合比较规整的桌面场景。
一旦物体侧着放、堆叠、遮挡,或者机械臂要从斜方向抓,它就不够用了。
2. 6DoF 抓取:真正进入三维世界
相比 2D 抓取,6DoF 抓取更接近真实机器人应用。
这里的 “6DoF” 指的是物体或夹爪在空间中的六个自由度:
- 3个平移自由度:前后、左右、上下
- 3个旋转自由度:绕三个坐标轴旋转
对于两指夹爪,常见的抓取表示为:
G=(R,t,w)
其中:
- R:旋转,表示夹爪朝向
- t:平移,表示夹爪位置
- w:夹爪开口宽度
如果说 2D 抓取是在图片上画一个矩形,
那么 6DoF 抓取更像是在三维空间中放置一个“虚拟夹爪”,告诉机械臂:
- 这个夹爪应该摆成什么方向
- 应该移动到空间中的哪个位置
- 张开多大去夹
为什么 6DoF 更难?
因为它需要理解场景的三维几何结构,比如:
- 桌子在哪里
- 物体表面朝向如何
- 抓取时会不会碰撞
- 能不能从某个方向插进去
所以 6DoF 抓取方法往往要处理:
- 点云
- 深度图
- 三维重建
- 旋转表示
- 碰撞检测
3. 灵巧手 / 多指抓取:更像人的手
如果用的是两指夹爪,抓取参数通常是 (R,t,w)(R,t,w)。
但如果换成多指灵巧手,事情就复杂得多。
因为除了手掌位置和朝向,还要决定每根手指怎么弯曲。
这时抓取表示一般写成:
G=(R,t,q)
其中:
- R,t:手掌的空间位姿
- q:手指关节角
这里的 q 可以看成是一组数字,表示每个手指关节弯曲多少。
为什么灵巧手抓取更难?
因为它不仅要“拿住”,还要考虑:
- 接触点在哪里
- 各手指之间怎么配合
- 是否满足稳定抓持
- 是否会发生穿模或碰撞
- 后续是否还能进行精细操作
所以多指抓取常常还会涉及:
- 接触建模
- 人手演示到机器人手的重定向
- 轨迹生成
- 控制策略学习
三、机械臂抓取背后的核心数学,其实没那么可怕
很多人一看到机器人抓取,就会想到大量公式、矩阵、优化,感觉门槛很高。
其实最核心的数学,可以先抓住下面几个概念。
1. 坐标变换:物体到底“相对谁”在动?
机器人视觉里,一个最常见的问题就是:
物体在相机眼里看到的位置,怎么变成机械臂能理解的位置?
这就涉及坐标变换。最常见的形式是:
pcam=Rpobj+t
意思是:
- pobj:物体坐标系中的一个点
- R:旋转矩阵
- t:平移向量
- pcam:这个点在相机坐标系中的位置
怎么理解?
可以把它想象成:
- 先把物体“转一转”
- 再把物体“平移一下”
这样就能把物体从“自己的坐标系”搬到“相机坐标系”下。
在抓取中,这特别重要,因为:
- 视觉算法通常得到的是相机坐标系下的结果
- 机械臂执行时需要的是机器人基坐标系下的结果
所以还要再做一步相机系 → 机器人系的转换。
2. PnP:从 2D 图像点恢复 3D 位姿
在位姿估计中,一个非常经典的方法叫PnP,全称是:
Perspective-n-Point
它解决的问题是:
已知一些物体上的 3D 点,以及这些点在图像上的 2D 位置,能不能反推出物体在相机前的姿态?
比如一个长方体有 8 个角点:
- 你知道它们在物体模型里的三维坐标
- 你也能在图像里找到对应的像素位置
那么就可以通过 PnP 求出物体的位姿 R,tR,t。
通俗理解
这有点像你拿着一张照片,看见了一个盒子的几个角,
然后根据这些角的位置,反推出这个盒子在空间中是怎么摆放的。
工程上常怎么做?
一般是:
- 网络先预测关键点
- 再用 PnP 解位姿
- 为了抗噪声,还会结合RANSAC
RANSAC 的作用很简单:
如果有些关键点预测错了,它能帮你尽量忽略这些错误点。
3. ICP:把两个点云对齐
另一个经典方法叫ICP,全称:
Iterative Closest Point
它常用于点云配准,也常出现在抓取和位姿精修中。
它做什么?
假设你有:
- 一个物体模型点云
- 一个相机观测到的点云
ICP 的目标就是不断迭代地把这两个点云对齐。
基本过程
- 给每个点找最近邻
- 根据这些对应关系求最优刚体变换
- 更新位置
- 重复直到收敛
通俗理解
就像你有两堆形状相同但位置不同的散点,
你不断挪动其中一堆,让它尽量和另一堆重合。
它的局限
ICP 很依赖初始位姿。
如果一开始差得太远,它可能会“对错地方”。
所以在实际系统里,它更适合:
- 已经有一个比较粗的初始估计
- 然后再进行精细对齐
四、位姿估计:抓取前的“看清楚”
很多抓取系统的第一步,其实不是直接输出抓取动作,而是先做物体位姿估计。
1. 什么是 6D 位姿估计?
“6D 位姿”就是:
- 3维位置
- 3维姿态
也就是一个物体在空间中:
- 在哪
- 朝哪边
位姿估计大致可以分成三类:
Instance-level(实例级)
针对一个已知物体,比如“这个特定杯子”。
Category-level(类别级)
针对一类物体,比如“任何杯子”。
Unseen Object(未见物体)
面对训练时没见过的新物体,也希望估计其姿态。
2. 为什么抓取需要位姿估计?
因为机械臂抓的不只是“这个区域”,而是“这个物体”。
比如抓杯子:
- 杯口朝上还是朝下?
- 把手在哪一边?
- 杯子是不是倾斜放着?
这些都会影响抓取方向。
3. 几个代表性位姿估计方法
PoseCNN
一个经典 RGB-only 位姿估计方法。
它的思路大致是:
- 先提取图像特征
- 做分割
- 预测物体中心
- 再回归旋转和平移
它还有一个比较有代表性的设计:
让每个像素都去预测“物体中心在哪个方向”,最后通过投票得到中心位置。
这在遮挡场景下会比较稳。
DenseFusion
这是 RGB-D 位姿估计里的代表方法。
它做的事情是:
- 用 CNN 提取 RGB 特征
- 用 PointNet 提取点云特征
- 在像素层面把两者融合起来
- 再预测位姿
简单说,就是把“颜色纹理信息”和“几何深度信息”结合起来。
为什么它强?
因为很多时候:
- 光看 RGB,容易被纹理迷惑
- 光看深度,缺少语义细节
融合之后效果通常更稳。
NOCS
这是类别级位姿估计的代表。
它的核心思想是:
把同一类物体,比如不同的杯子,都映射到一个归一化坐标空间。
这样即使杯子的具体形状有差别,也能在一个统一框架下估计位姿和尺寸。
FoundationPose
这是较新的方向,偏向基础模型 / 通用模型。
它有两个特点:
- 可以给 CAD 模型
- 也可以只给参考图像
因此更适合处理新物体和实际机器人场景。
五、6DoF 抓取:当前最核心的研究方向
如果说 2D 抓取是入门,
那么6DoF 抓取就是现在机械臂抓取研究最重要的一条主线。
1. 一个典型的 6DoF 抓取流程
一个常见 pipeline 是:
第一步:场景表示
输入一般是:
- 点云
- RGB-D
- 多视图图像
- 或更复杂的三维表示,如 NeRF、3DGS
第二步:中间表示
很多方法不会直接输出抓取,而是先预测一些中间信息,例如:
- graspness:哪些点“看起来可抓”
- affordance:哪些区域“适合抓”
- segmentation:物体分割
- reconstruction:补全物体几何
第三步:抓取生成与评分
预测候选抓取位姿 (R,t,w),并给每个抓取打分。
第四步:精修
对候选抓取进一步优化,提高成功率。
2. 代表方法一:6DoF GraspNet
这是比较早期的代表作之一。
它的思路很符合直觉:
(1)先采样一批候选抓取
这一步不是直接猜一个唯一答案,而是“多想几个可能的抓法”。
它用了VAE(变分自编码器)来生成候选抓取。
VAE 是什么?
可以把它理解成:
学习“好的抓取通常长什么样”,然后从这个分布里采样。
为什么要这么做?
因为一个物体往往不止一种抓法。
比如抓杯子:
- 可以抓杯身
- 可以抓把手附近
- 也可能从侧面抓
所以抓取是多解问题,VAE 比单纯回归一个结果更自然。
(2)再评估这些抓取好不好
这一步由一个grasp evaluator完成。
它的作用很像一个考官:
- 输入:一个候选抓取
- 输出:这个抓取成功的概率有多大
(3)最后做迭代精修
如果某个抓取已经还不错了,就再往更好的方向调一点。
从数学上看,就是希望:
P(s=1∣g+Δg)>P(s=1∣g)
意思是:
如果我们对当前抓取 g 做一点小调整 Δg,希望调整后的抓取成功概率更高。
通俗理解
这就像你手去拿杯子时,会在快碰到前做一点微调。
3. 代表方法二:GraspNet-1Billion Baseline
这是围绕大规模数据集GraspNet-1Billion的经典基线方法。
它把问题分成几个模块:
PointNet++
先从点云里提特征。
Approach Net
先决定“从哪个方向接近物体”。
这个非常关键,因为夹爪抓取不是随便靠近都行:
- 方向不对会撞到桌子
- 方向不对会被周围物体挡住
Operation Net
在方向确定后,再去预测更具体的抓取参数,比如:
- 夹爪角度
- 插入深度
- 开口宽度
Tolerance Net
评估这个抓取对误差是否敏感。
比如:
- 如果夹爪稍微偏了一点,这个抓取还会不会成功?
- 如果深度图有一点噪声,这个抓取会不会立刻失败?
- 如果机械臂执行时有轻微误差,这个抓取是否仍然稳定?
一个“好抓取”不应该只是理论上刚刚好,而应该对这些误差有一定容忍度。
这就是Tolerance Net的意义:它不是只问“能不能抓”,而是进一步问“这个抓取稳不稳”。
4. 代表方法三:GSNet —— 先找“哪里看起来能抓”
如果说前面的方法是在“生成很多抓取候选,再筛选”,
那么GSNet的一个很重要的想法是:
与其在整个场景中盲目搜索,不如先判断哪些区域“看起来就适合抓”。
这就引出了一个很关键的概念:graspness。
什么是 graspness?
可以把它理解为:
点云中每个点的“可抓程度”。
如果一个区域:
- 表面几何比较适合夹爪接触
- 周围空间足够让夹爪插入
- 不容易发生碰撞
那么这个区域的 graspness 就高。
直观理解
你可以想象人在抓东西时,也不会对整个场景里每个地方都同样感兴趣。
比如看到一个杯子,我们会更自然地关注:
- 杯身两侧
- 杯把附近
- 上缘或中部某些容易夹住的位置
GSNet 就是在模仿这种“先找可抓区域,再细化动作”的思路。
它的好处
这样做的优点是:
- 更快:不用在全空间暴力搜索
- 更准:先缩小范围,再做精细抓取预测
- 更适合杂乱场景:尤其是物体堆叠、遮挡时
所以 GSNet 在很多 6DoF 抓取任务里非常有代表性。
5. 代表方法四:AnyGrasp —— 把“时间”也考虑进去
很多抓取方法只看一帧图像或一帧点云。
但在真实场景里,抓取常常不是静止的:
- 物体可能在动
- 机械臂自己在动
- 相机视角也可能变化
- 料箱抓取中场景一直在变化
这时,仅靠“单帧感知”往往不够。
AnyGrasp就是在这方面往前走了一步:它加入了时间信息。
它解决什么问题?
一句话概括:
不只看当前这一眼,而是把前后几帧的信息结合起来,得到更稳定的抓取判断。
为什么时间信息有用?
因为单帧可能有很多问题:
- 某个区域暂时被遮挡
- 某一帧深度图很噪
- 某个抓取候选看起来不错,但下一帧就发现会碰撞
如果结合多帧,就能得到更稳定的结论。
这很像人类的抓取方式
人抓东西时,也不是“看一眼就盲抓”,而是会边靠近边修正。
AnyGrasp 在某种程度上,就是让机器人也具备这种“时序稳定感知”的能力。
它适合什么场景?
- 动态抓取
- 移动物体抓取
- 杂乱场景抓取
- 实时应用
6. 代表方法五:FlexLoG —— 更灵活地接各种中间信息
前面提到,很多 6DoF 抓取方法不会直接从点云跳到抓取,而会借助中间表示,比如:
- 分割结果
- 可抓热力图
- affordance(可供性)
- graspness
- 检测框
FlexLoG的思路很实用:
既然不同系统前端输出不一样,那不如做一个“更灵活的框架”,让各种中间表示都能接进来。
什么叫“灵活”?
比如你前面有一个模块专门做:
- 目标检测
- 语义分割
- 热力图预测
- 抓取可行区域估计
那么 FlexLoG 这种方法可以把这些信息都当成“引导”,帮助后续抓取模块更精准地工作。
这意味着什么?
它代表了一种越来越明显的趋势:
抓取不再只是一个孤立任务,而是在和检测、分割、重建、可供性分析逐步融合。
这在工程上特别有价值,因为实际机器人系统往往不是单一模块,而是一整套感知系统协同工作。
六、为什么透明物体和反光物体特别难抓?
如果你做过机器人视觉,就会很快发现一个很现实的问题:
透明杯子、玻璃瓶、反光金属物体,往往特别难处理。
原因很简单:
- 普通 RGB 图像能看到,但没有明确深度
- 深度相机打到透明/反光表面时,深度常常失真
- 点云会缺失、破碎、噪声很大
而抓取恰恰非常依赖三维几何信息。
所以透明物体抓取,一直是机械臂抓取里的难点之一。
1. ASGrasp:先把深度“补出来”
ASGrasp针对透明和高反光物体,采用了一种更现实的思路:
既然原始深度不可靠,那就先想办法把深度补全或修复,再去做抓取检测。
它用了什么输入?
除了 RGB 和普通深度,还引入了IR(红外)信息。
红外在某些场景下能提供额外的表面线索,帮助做深度补全。
核心思路
它通常分成两步:
- 场景重建 / 深度补全
- 在更可靠的点云上做抓取检测
通俗理解
这就像你先把“模糊的地图”修清楚,再规划路线。
如果地图本身就是错的,那后面抓取再聪明也很难成功。
2. GraspNeRF:先重建三维,再决定怎么抓
另一个很有代表性的方向是NeRF。
NeRF 是什么?
NeRF 全称是Neural Radiance Fields,可以简单理解成:
用神经网络去表示一个三维场景,让系统能够从多个视角“理解”这个场景的几何和外观。
虽然它最早主要火在三维重建和新视角合成领域,但后来也被引入到了抓取中。
GraspNeRF 的思路
它不是一上来就抓,而是:
- 先从多个视角拍摄物体
- 用 NeRF 重建场景表示
- 再在这个三维表示上做抓取检测
为什么这对透明/反光物体有效?
因为当深度相机直接测深度不稳定时,
多视图 RGB + NeRF 有时能构建出更鲁棒的三维结构。
它的代价是什么?
代价也很明显:
- 需要多个视角
- 速度比单帧抓取慢
- 系统更复杂
所以它更适合:
- 对透明物体要求高的场景
- 对抓取成功率要求高于实时性的应用
3. RGBGrasp:边动边看,再边抓
RGBGrasp可以看作是类似思路的延伸。
它利用机械臂运动过程中自然获得的多视图图像,在线构建 NeRF,再进行抓取。
这个思路很有意思
传统思路是:
先站定,看一眼,决定怎么抓。
而 RGBGrasp 更像:
一边移动,一边看更多角度,再不断完善三维理解,最后再抓。
这其实更接近人类行为。
人如果发现看不清一个物体,也会本能地换个角度再看。
七、仿真训练那么方便,为什么还需要 sim-to-real?
做机器人抓取,最大的现实困难之一就是数据。
真实机器人采数据很贵:
- 机械臂贵
- 时间成本高
- 标注麻烦
- 抓坏设备也有风险
所以很多方法喜欢在仿真里生成大量抓取数据。
仿真确实有巨大优势:
- 快
- 便宜
- 可控
- 标注自动化
但问题是,仿真和真实世界不一样。
这就叫sim-to-real gap(仿真到真实的差距)。
1. 差距体现在哪?
常见差距包括:
- 点云噪声不一样
- 光照不一样
- 材质不一样
- 深度缺失模式不一样
- 物理摩擦和碰撞也不完全一致
所以在仿真中学得很好,到了真实机器人上可能性能下降很多。
2. R2SGrasp:专门研究这个差距
R2SGrasp的目标就是:
不只是训练一个抓取模型,而是想办法缩小“仿真数据”和“真实数据”的分布差异。
它的思路可以通俗理解为:
- 要么把真实数据修得更像仿真数据
- 要么把仿真数据增强得更像真实世界
- 最终让模型学到的能力更容易迁移到现实中
为什么这很重要?
因为现实里很多高性能抓取系统,最后比拼的不只是模型结构,
而是谁能更好地解决“训练数据和部署环境不一致”的问题。
八、机械臂抓取都用什么数据集?
数据集是抓取研究的基础。
从课程内容来看,下面几个数据集很重要。
1. YCB
这是机器人操作领域的经典数据集,包含很多日常常见物体,比如:
- 杯子
- 盒子
- 瓶子
- 工具
- 厨房用品
YCB 的价值在于:
它比较贴近真实操作场景,因此经常出现在抓取和位姿估计研究里。
2. BOP
BOP 更偏6D 位姿估计 benchmark。
它提供了:
- RGB
- depth
- mask
- 3D 模型
- 相机参数
- 标准评测工具
如果你的抓取系统依赖先做位姿估计,那么 BOP 是非常值得关注的数据生态。
3. ACRONYM
这是一个规模很大的6DoF 抓取仿真数据集,包含海量平行夹爪抓取样本。
它适合用来学习“通用抓取先验”,尤其是基于仿真的大规模训练。
4. GraspNet-1Billion
这是 6DoF 抓取领域非常有代表性的大型 benchmark。
从名字就能看出来,它最大的特点是:
抓取标注规模极大。
它推动了 6DoF 抓取从“各做各的数据集”走向“更统一的标准评测”。
5. DexYCB / DexGrabNet
这两个更偏向多指灵巧手抓取:
- DexYCB:真实世界的人手抓取数据
- DexGrabNet:大规模仿真灵巧手抓取数据
如果研究多指手、接触建模、人手到机器人手的重定向,这类数据集会很重要。
九、抓取效果怎么评估?
抓取不是只有“看起来像能抓”就行,必须有评测指标。
1. Success Rate(成功率)
这是最直观的指标:
机器人真正执行后,抓起来了吗?
优点:
- 直接反映真实效果
缺点:
- 需要真实机器人实验
- 成本高
- 批量评测慢
2. AP(Average Precision)
在很多抓取 benchmark 中,会把抓取看作一种“检测任务”:
- 预测很多抓取候选
- 每个候选有一个分数
- 根据物理可行性判断真假阳性
- 最后算 AP
为什么抓取也能用 AP?
因为很多抓取方法不是输出一个唯一抓取,而是输出很多候选抓取。
这和目标检测很像:
- 目标检测输出很多框
- 抓取检测输出很多抓取位姿
这里的“真阳性”怎么定义?
不同于目标检测只看 IoU,抓取还要看:
- 是否碰撞
- 是否满足力闭合
- 在给定摩擦系数下是否可行
也就是说,抓取评测往往会引入更多物理约束。
3. Coverage Rate(覆盖率)
覆盖率可以理解为:
方法能否为场景中的物体找到足够多、足够全面的可行抓取。
如果一个方法只会抓很少一类姿态,那泛化能力通常不够。
4. Completion Rate(完成率)
这个指标在bin-picking / clutter场景里很常见。
它关注的是:
在一堆杂乱物体里,机器人能不能持续完成任务,比如把箱子清空、把物体逐个拣出来。
这时评价的就不只是单次抓取,而是整个任务流程。
十、如果从工程角度看,一个抓取系统该怎么搭?
如果你不是做纯算法研究,而是想真正做一个机械臂抓取系统,可以把整个流程想成下面这几层。
第1层:感知层
输入通常包括:
- RGB 图像
- 深度图
- 点云
- 多视图图像
目标是得到:
- 物体检测结果
- 分割结果
- 三维场景表示
- 位姿估计或可抓区域
第2层:抓取生成层
根据感知结果,生成抓取候选:
- 2D 抓取矩形
- 6DoF 抓取位姿
- 多指手关节配置
同时对候选抓取打分,筛掉低质量抓取。
第3层:抓取评估与优化
进一步检查:
- 是否碰撞
- 是否可达
- 是否稳定
- 是否适合当前任务
必要时进行局部精修。
第4层:运动规划层
把抓取位姿转换成机器人运动轨迹:
- 先到 pre-grasp 位姿
- 再接近
- 再闭合夹爪
- 再抬起
这里往往会涉及:
- 笛卡尔空间路径
- 逆运动学(IK)
- 关节轨迹插值
- 避障
第5层:执行控制层
真正控制机械臂运动并抓取,有时还会加:
- 力控
- 视觉伺服
- 触觉反馈
- 失败恢复策略
十一、机械臂抓取的发展趋势,正在往哪走?
?