视觉定位在机器人操作中的应用:「把红色的杯子递给我」——机器人怎么定位目标

我第一次让机器人执行“把红色的杯子递给我”这个指令时,心里想的是:这也太简单了吧?杯子就在桌上,红色那么显眼,抓起来递给我不就完事了?结果机器人僵在那里,像是听到了外星语。后来我才知道,这句话对于人类是一瞬间的视觉判断,对于机器人却是一整条技术链:目标检测、语言-视觉对齐、深度感知、坐标变换、抓取规划。这篇文章我想把这根链条一节一节拆开,讲一讲机器人到底是怎么“找到”那个红色杯子的。

AI technology illustration

机器人眼里没有“杯子”,只有数字

机器人看到的不是“场景”,而是一堆像素——每个像素是三个8位整数。它不知道哪一块是“杯子”,也不知道“红色”这个概念。传统计算机视觉教给它的方式是:预先定义好一个类别清单,比如杯子、瓶子、笔,然后用目标检测器去框出这些目标。YOLO、Faster R-CNN这类模型就是这么干的。Faster R-CNN论文里的经典输出是“框”加“类别标签”,但标签必须在训练时列好。你训练过“杯子”,它看到马克杯也许能认出来,看到玻璃杯可能就瞎了——更别说“红色的杯子”这种带属性的描述了。

CLIP:让语言和图像住进同一个向量空间

2021年OpenAI发表的CLIP论文,改变了这个格局。CLIP的训练方法是:海量图片和对应的文本描述,用两个编码器分别编码,然后用对比学习把“描述匹配的图片-文本对”的向量拉近,把不匹配的推远。训练完之后,你给它一句“红色杯子”,它能在图像里找到最像这个描述的局部区域。CLIP论文摘要自己承认:“State-of-the-art computer vision systems are trained to predict a fixed set of predetermined object categories. This restricted form of supervision limits their generality and usability.”——而CLIP把“固定的类别清单”变成了“开放的自然语言”。

但CLIP有个问题:它返回的是“相似度”,不是“包围框”。你问它“红色杯子在哪里”,它只会说“这个图片和红色杯子的语义很接近”,但不会告诉你杯子的像素范围。所以实际机器人系统里,更常用的是开放词汇检测器,比如Grounding DINO。Grounding DINO把文本作为输入,直接输出文本对应物体的检测框,真正做到了“你说一个没见过的东西,我照样给你框出来”。

定位到像素还不够,还得联系到三维空间

到这里,“红色杯子”已经变成了图像上的一个框或一个掩码。但机械臂需要的是一个三维坐标。这里就涉及我当年跳进去过的大坑——坐标系。

  1. 图像上每个点,通过相机内参(焦距、主点)可以换算成一条射线。
  2. 深度相机(RGB-D)给出每个像素的深度值,于是射线上有了点,这个点在相机坐标系下的三维坐标就确定了。
  3. 相机装在机械臂上或旁边,它和机械臂基座之间的相对位姿,叫做手眼标定矩阵。把相机系下的点乘上这个矩阵,就得到机械臂基座系下的坐标。

整个过程可以用一个简洁表达式概括:P_base = T_base_camera × P_camera。这个T矩阵差一个毫米,机械臂就抓偏一个毫米。我当初第一次做实验,相机和机械臂看似都在转,实际上每个关节的误差叠起来,最后抓了个寂寞。OpenCV的标定文档值得反复看。

关于“手眼标定”的补一句

手眼标定根据相机安装位置分两种:眼在手上(eye-in-hand)和眼在手外(eye-to-hand)。眼睛在手上时,相机随机械臂移动,标定求解的矩阵是相机相对机械臂末端;眼睛在手外时,求解的是相机相对基座。无论哪种,都只需要用标定板拍照若干次,解一个AX=XB的方程。有了它,你才能把相机看到的世界“翻译”给机械臂听。

定位到点还不够,还得会“抓”

就算知道了杯子中心点的三维坐标,你怎么抓?从正上方捏住杯口?还是从侧面握杯身?这需要给机械臂一个6自由度的抓取位姿。常见做法是用抓取检测网络,比如GG-CNN,它输入是深度图,输出每个像素的抓取质量、抓取角度和抓手开口宽度。Dex-Net则是通过大规模仿真生成合成抓取数据,让网络学会在各种形状上找到可抓取的姿态。我早期项目里就栽过:目标定位全对,但抓取位姿预测出来是斜着戳杯子壁,杯子当场飞出去。视觉定位和抓取规划是两码事,但常被混在一起说。

三条技术路线:模块化、开放词汇、端到端

现在机器人视觉定位的实际解决方案大致有三条路线,各有各的擅长领域。

路线 代表方法 语言交互 三维空间 端到端程度
模块化 YOLO + 标定 + 抓取网络 弱(需预定义类别) 需显式标定
开放词汇 Grounding DINO + 深度相机 强(任意文本) 仍需标定
端到端 RT-1、PaLM-E 隐式学习

RT-1是Google Robotics做的Transformer模型,直接把历史图像、语言指令和机器人状态token化,输出离散的动作token。PaLM-E更激进,把视觉传感器数据也当成一种“语言”,和文本一起喂给一个大规模语言模型,让它直接输出机器人动作。这两个模型都试图绕开“先检测、再标定、再规划”的流水线,让整个系统自己想出“该看哪里、该往哪动”。

那么现在,机器人能可靠地找到红色杯子吗?

答案看你给它什么环境。在固定光源、固定桌面、固定几类杯子的条件下,现在的系统成功率可以做到90%以上。但换到开放环境,问题立刻变多:极端光照让颜色偏离,透明或反光材质让深度相机直接失灵,语言歧义让“红色”可以有无数种色度。更别说什么“把温馨的那只杯子递给我”这种需要背景知识的指令。

端到端模型提供了未来方向,但它们对训练数据的需求非常夸张——RT-1用了13万条专家演示,PaLM-E最大版本更是有5620亿参数。在真实工厂里,模块化架构依然占主流,因为它每一环都可校验、可调试。我个人的判断是,未来最有效的系统一定是“模块化的骨架 + 大模型的语义脑”,用大语言模型处理句子的开放性,用几何视觉模块保证空间精度。视觉定位这个问题的本质,其实不是让机器“看得比人准”,而是让机器在失去人的常识时,还能靠数学和逻辑把句子变成行动。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/690.html

(0)
上一篇 10小时前
下一篇 10小时前

相关推荐