机器人视觉引导定位头图:六轴工业机械臂末端夹爪悬停在金属工件上方,工业相机投射青蓝色扫描光带与点云网格,工件表面浮现三维坐标轴线与检测框

上下料、装配、码垛、分拣这四类工序,机器人的作业精度往往卡在同一个地方——不知道工件在哪、是什么姿态。视觉引导定位就是用相机测出工件的 6D 位姿(X/Y/Z 三个位置 + 偏航/俯仰/横滚三个姿态角),再通过手眼标定把像素坐标换算成机器人坐标,引导抓放。本文按工程交付顺序讲清四件事:立项先问四个数(来料偏差、姿态种类、精度、节拍)、标定与信号链怎么搭(九点标定、eye-to-hand/eye-in-hand、OpenCV 代码)、2D 还是 3D 怎么选(四种 3D 相机对照)、两本账与一次成功率怎么验收(误差链 RSS 合成、节拍预算、99% 成功率、失败归因),并冷静评估 VLA 大模型当前能做什么。

本文目录

  1. 四类工序,卡点都在"工件在哪、什么姿态"

  2. 视觉引导到底在解什么:六个自由度

  3. 一条信号链:像素是怎么变成机器人坐标的

  4. 手眼标定怎么做(含九点标定与 OpenCV 代码)

  5. 2D 还是 3D:一张选型决策树

  6. 两本账:精度误差链与节拍时间预算

  7. 找工件与无序抓取:逐层算法栈

  8. VLA 大模型现在能上产线吗

01四类工序,卡点都在"工件在哪、什么姿态"

示教编程的机器人,本质上是在一遍遍重复同一组关节坐标。它能把动作做到很高的重复精度,却有一个先天盲区:它默认工件每次都出现在同一个位置、同一个姿态。现实产线里,来料有公差、料筐有堆叠、托盘有偏斜、传送带有停位误差——偏差一旦超出夹爪的容差,就会空抓、撞夹、装歪。

视觉引导定位解决的就是这件事:给机器人装一双"眼睛",让它先看清楚工件此刻的位置和姿态,再决定怎么抓。它不是替代机器人,而是把"来料偏差"从靠人盯、靠治具硬约束的活,变成系统能自动补偿的活。

工序

来料特点

视觉要做的事

典型精度

维度

上下料

有夹具/料仓,姿态大体可控

位置偏差补偿,补 X、Y 和平面角,Z 用平面假设兜底

±0.1mm 级

2D 为主

精密装配

孔位对插、锁附,需防呆

高精度对位,装错比装不上更麻烦,常要近距精定位

±0.05mm 级

2D 近距 / 3D 局部

码垛

单层有序,整垛偏斜

垛型规划、偏斜纠正,定位精度要求不高

±1mm 级

2D 即可

分拣/无序抓取

料筐里堆叠、翻转、任意姿态

分割单体、解满 6D 位姿、规划抓取点、防碰撞

姿态全解算

3D 必选

立项先给四个数,方案才有解不要一上来就谈算法、谈相机型号。先把工序里的"找位置"环节单独拎出来,量化四个数:① 来料偏差有多大;② 姿态变化有几种;③ 精度要多少;④ 节拍几秒。这四个数定了,后面相机选型、标定方式、算法路线、算力配置全都跟着定。四个数对不上,先改治具,再谈视觉。

02视觉引导到底在解什么:六个自由度

视觉引导的完整目标是六自由度(6 DoF)位姿。很多人以为"定位"就是给一个坐标点,其实对抓取来说,机器人开工需要六个数,少一个都可能抓空。

类别

自由度

符号

回答的问题

平移(位置)

沿 X 轴

X

物体在哪——空间三维坐标

沿 Y 轴

Y

沿 Z 轴

Z

旋转(姿态)

绕 X(俯仰)

Rx

物体朝向哪边,进而决定哪个面可抓

绕 Y(偏航)

Ry

绕 Z(横滚)

Rz

这六个数一次答完三问:物体在哪(X/Y/Z)、朝向哪边(三个姿态角)、哪个面可抓(朝向定了,可抓面才定得下来)。位姿是抓取规划的前提,三问缺一,夹爪该从哪个方向、以什么开合角度下去就无从算起。

2D 视觉:一次"降维"
  • 把 Z 当常数、忽略两个倾角

  • 只解 X、Y + 平面旋转角

  • 模板匹配 / 特征定位就够用

  • 前提:工件姿态真被约束在一个平面上

3D 视觉:六个自由度解满
  • 输出点云,恢复真实 Z 和倾斜

  • 点云配准 / 6D 位姿估计

  • 处理翻面、堆叠、任意姿态

  • 一旦工件翻面、倾斜,降维假设就失效

先问一句:这六个数里,哪几个在现场是稳的?选型的本质不是"上不上 3D",而是判断这六个自由度中哪些已经被治具、料仓、重力"约束住了"。被约束住的自由度不用算,系统只需要解那些真正会变的。这正是后面 2D/3D 分界线的由来。

03一条信号链:像素是怎么变成机器人坐标的

一条完整的视觉引导链路,从光进入镜头到机器人动作,中间经过五个环节。理解这条链,关键是看清坐标系在每一步如何被转换,以及标定为什么是地基。

视觉引导信号链与坐标系变换(自制信息图)

① 成像与打光采图/点云打光决定上限② 目标定位把工件从背景分出来③ 位姿解算6D:X Y ZRx Ry Rz④ 坐标转换手眼矩阵 T像素→机器人⑤ 通信抓取到 TCP状态机时序(u,v) 像素坐标前景/点云(Xc,Yc,Zc) 相机系(Xb,Yb,Zb) 基座系关节/末端指令手眼标定是地基(贯穿成像与坐标转换)相机内参(去畸变)+ 手眼外参(AX=B / 九点仿射 / 3D 标定):没有它,像素坐标无法变成机器人坐标eye-to-hand 眼在手外· 相机固定在机架/上方,看全局,不随臂动· 不占机器人负载,标定简单、视野大· 适合:大视野分拣、码垛、上下料求:相机→机器人基座 的变换eye-in-hand 眼在手上· 相机装在末端法兰,随臂运动· 能凑近看、精度高、可绕开遮挡· 适合:精密装配、局部精定位求:相机→末端(TCP) 的变换;换夹具要重标中间的"目标定位 + 位姿解算"是精度心脏,两端的"标定 + 通信时序"决定项目能不能稳

什么是 TCPTCP(Tool Center Point,工具中心点)是机器人末端工具上定义的工作点——吸盘中心、夹爪指尖或焊枪尖端。视觉给出的工件位姿,最终要换算成"TCP 该以什么姿态到达哪个点",机器人控制器据此做运动规划。标定针的尖点必须与实际工具的 TCP 对齐到同一高度,否则标得再准也是系统性偏差。

04手眼标定怎么做(含九点标定与代码)

手眼标定的本质是建立像素坐标系与机器人坐标系之间的数学关系。二维平面抓取用九点标定(仿射变换),三维空间抓取用 3D 手眼标定(解 AX=X B 刚性方程)。OpenCV、Halcon 都提供现成函数,理解原理比手推公式更重要。

九点标定:平面仿射变换

平面像素坐标到机器人平面坐标是一个仿射变换(线性旋转/缩放 + 平移),含 6 个未知数,写成矩阵就是 T·X=Y。理论上 3 组不共线的点就能解出 6 个方程,工程上用 9 个点甚至更多,是冗余设计——通过最小二乘把单点抖动、识别误差平均掉,多点是用来压误差的。这也是为什么九点标定成为工业最常用的二维手眼方法,资料中也常写为 4 点法、9 点法、N 点法。

nine_point_calib.py · 2D 手眼

# 九点标定:像素坐标 (u,v) -> 机器人坐标 (x,y) 的仿射变换import numpy as np, cv2# 9 组对应点:标定针走到视野内 9 个位置,分别记录pixel = np.array([[u1,v1],[u2,v2], ..., [u9,v9]], dtype=np.float32)  # 相机识别的圆心robot = np.array([[x1,y1],[x2,y2], ..., [x9,y9]], dtype=np.float32)  # 示教器读到的坐标# 最小二乘拟合 2x3 仿射矩阵(多点冗余,压误差)M, inliers = cv2.estimateAffine2D(pixel, robot)# 上线:检测到目标像素坐标后,换算成机器人坐标uv = np.array([[[u, v]]], dtype=np.float32) xy = cv2.transform(uv, M)[0, 0]# 3D 手眼则用刚性变换(旋转+平移),OpenCV 对应:# cv2.calibrateHandEye(R_g2b, t_g2b, R_t2c, t_t2c,#                       method=cv2.CALIB_HAND_EYE_PARK)
  1. 装标定针

    :尖点固定在夹具上,与吸盘/夹爪实际 TCP 处于同一位置和高度。

  2. 走 9 个点

    :末端在视野(与真实作业区域一致、高度一致)内走 9 个点,逐点记录机器人坐标和对应像素圆心坐标。

  3. 拟合与回代

    :最小二乘拟合仿射矩阵;任取一个点回代,残差应小于定位精度要求的 1/3(例如要求 ±0.1mm,回代残差应在 ±0.03mm 内)。

  4. 固化

    :变换矩阵随程序固化。换镜头、动相机、修夹具、换夹具——重标,没有例外。

先做内参,再谈手眼手眼标定的精度受限于相机内参。先用棋盘格把相机内参标定好、重投影误差压到 0.5 像素以内,再做手眼。常见症状里:某一轴始终有固定偏置多是平移没解准,视野边缘误差变大多是旋转或镜头畸变没处理好。

通信:协议简单,翻车全在时序

视觉系统和机器人之间通常走 TCP 收发一串坐标,协议本身很简单,真正的现场问题都在状态机上。坐标报文一般是 x,y,z,rx,ry,rz,score 加一个成功标志位。

触发-应答时序(状态机)

# 机器人侧:到位后触发,再按结果分支(超时/漏拍/重拍必须有分支)机器人运动到拍照位  ->  发送 TRIGGER视觉:采图 -> 定位 -> 位姿解算 -> 坐标转换 视觉回传:x,y,z,rx,ry,rz,ok# ok=0 表示未找到/置信度低机器人:ok=1 -> 按位姿抓放         ok=0 / 超时 -> 重拍 N 次,仍失败则抛异常、不清空来料

机器人什么时候触发拍照、拍完等多久、坐标没到或 ok=0 超时往哪走——这三个分支没在状态机里画清楚,现场表现就是偶发漏抓、偶发空抓,而且复现不了,能查一整天。调不出来的项目,八成不是算法,是标定和这两端的时序。

052D 还是 3D:一张选型决策树

把前面的判断收敛成一句话:选型的分界线只有一条——工件是否单层、平面、姿态可控。是,2D 加九点标定全套搞定,成本最低;不是,有堆叠、翻转、任意姿态,就上 3D。

视觉引导选型决策树(自制信息图)

先给四个数:来料偏差 / 姿态种类 / 精度 / 节拍数值定了,相机与算法路线跟着定工件是否单层、平面、姿态被约束?是 · 2D2D 视觉(降维)Z 当常数、忽略两倾角,只解 X/Y + 平面角九点标定 + 模板匹配/特征定位适用:上下料、码垛、防呆装配能用治具约束时,治具比 3D 相机便宜一个数量级否 · 3D3D 视觉(解满 6DoF)点云分割 → 6D 位姿 → 抓取规划 → 防碰撞适用:无序抓取、分拣、任意姿态装配结构光近距亚毫米、一帧成像小件精密/无序抓取,怕强光线激光微米级、抗环境光逐行扫描、慢,静态高精度ToF快、远、抗环境光精度厘米~毫米,大件粗定位双目成本低、户外可用依赖纹理,码垛/大视野分界线不是技术高低,而是工件姿态有没有被约束

维度

2D 视觉引导

3D 视觉引导

输出

X、Y + 平面旋转角(3 自由度)

X/Y/Z + 三姿态角(6 自由度)

数据

灰度/彩色图

深度图 / 点云

标定

九点标定(仿射)

3D 手眼标定(刚性 [R|t])

前提

姿态被约束在平面,Z 已知或恒定

存在高度变化、倾斜、翻面

成本/算力

低,普通工业相机即可

高,需 3D 相机与点云算力

典型

上下料、码垛、平面防呆

无序抓取、混线分拣、空间装配

别为了"先进"上 3D。2D 与 3D 的分界线不是技术高低,而是工件姿态有没有被约束——约束得住用 2D,约束不住才上 3D。能靠治具把姿态约束住的工序,加治具比加 3D 相机便宜一个数量级。

四种 3D 相机怎么挑

方案

成像原理

典型精度

速度/帧率

环境光

适用场景

结构光

投影编码/条纹/散斑图案,按变形算深度

亚毫米(0.01~0.05mm 级)

快照型可一帧成像,较快

怕强光/户外

小件精密、手机玻璃/引脚、无序抓取静态近距

线激光

激光线扫,侧拍线位移按三角法测高

微米级(0.01mm 级)

需逐行扫描,慢

抗环境光好

3C 检测、焊缝跟踪、尺寸测量等静态高精度

ToF

发射光脉冲,按飞行时间直接测距

厘米~毫米(约 1~5mm)

快、可实时

抗环境光好

大件粗定位、物流分拣、整车/体积扫描、远距离

双目

两台相机按视差三角测距

毫米级,依赖纹理

户外可用

成本低、无主动光源

仓库码垛、箱体定位、室外大场景

注:精度为工程经验典型区间,随工作距离、视场、工件材质与标定质量变化较大,正式选型以厂商在同距离、同材质样品上的实测为准。

无序抓取工位:3D 相机向料筐中堆叠的金属零件投射结构光与点云,零件被检测框标记,机械臂真空吸盘正吸起一个工件

料筐里堆叠、翻转、任意姿态,是唯一绕不开 3D 的工序;打光与点云质量决定上限。

06两本账:精度误差链与节拍时间预算

视觉引导项目能不能验收,不靠演示效果,靠选型阶段就把两本账算清楚。账算不清,后期全是扯皮。

第一本账:精度是一条误差链,不是相机一个数

末端定位误差由多个独立环节贡献,按均方根(RSS,平方和开根)合成,而不是简单相加。典型各环节误差:

误差环节

典型值(示例)

说明

相机/视觉测量

±0.02mm

分辨率、算法、标定内参

手眼标定

±0.05mm

取点、拟合、安装误差,常是大头

机器人重复定位

±0.02mm

机械臂自身重复精度,不可忽略

标定块/工装

±0.01mm

基准件制造公差

RSS 合成

≈ ±0.06mm

√(0.02²+0.05²+0.02²+0.01²) ≈ 0.058

对客户承诺(留余量)

±0.1mm 稳妥线

再叠加来料、温漂、长期漂移

标书里只承诺"相机 ±0.02mm"是在给验收挖坑那一项往往只算了相机本身,没算机器人重复定位和手眼标定。把系统末端精度当成相机精度承诺,等现场把机器人和标定误差叠上去,必然达不到。正确做法是把整条误差链列出来、按 RSS 合成、再留工程余量,承诺一个系统级、可复现的数。

第二本账:节拍是一个时间预算

以 2 秒一个节拍为例,把时间花在哪个环节预先分配好,并且一定要留缓冲:

环节

耗时(示例)

超时怎么压

图像采集

0.15s

硬触发、与机器人动作并行(藏进节拍)

视觉处理

0.30s

ROI 裁剪、降采样、模型量化、GPU/NPU

通信握手

0.05s

状态机、固定报文、超时重拍

机器人抓放

1.30s

轨迹平滑、并行调度、运动中拍照

合计

1.80s

—

缓冲

0.20s

留给来料抖动与偶发重拍的"活命钱"

两头挤,别挤缓冲视觉处理超了,用 ROI 裁剪和降采样压;机器人侧靠轨迹平滑、并行调度挤——最有效的是机器人抓放上一个工件的同时,相机已经拍下一个,采集时间直接被藏进节拍。但无论怎么挤,都不要把缓冲挤没,它是来料抖动和偶发重拍时的安全余量。

07找工件与无序抓取:逐层算法栈

"找工件"已经分出两条路

路线

代表

优势

软肋

适用

几何模板匹配

形状/边缘模板、灰度匹配

又快又稳,毫秒级,无需训练数据,结果可解释

怕遮挡、形变、姿态大变化

固定工装、形态稳定的规则件

检测模型

YOLO 类小模型(量化后)

抗杂乱、可识别多品类,侧端几十毫秒一帧,换品重训约一天

怕域偏移,换光源/换背景可能掉点,需数据与算力

多品类混线、形变、背景杂乱

混线产线常见的工程做法是"模型粗定位 + 模板精对位":检测模型先在复杂画面里把工件类别和大致区域找出来,再在该 ROI 内用几何模板做亚像素级精对位。各干各擅长的,比一条路走到黑稳定得多。

无序抓取的技术栈,正在被逐层"模型化"

无序抓取(bin picking)是视觉引导里最难的场景:料筐里工件互相遮挡、贴靠、翻转,传统规则很容易失效。它的技术栈是一层叠一层,而每一层都长出了学习类方法:

层级

传统做法

"模型派"做法

点云分割

平面/欧氏聚类,靠几何阈值

PointNet 系点云网络,对混装、贴靠工件更鲁棒

6D 位姿估计

CAD 模型点云配准(ICP/模板匹配)

学习类网络直接从点云回归位姿,有遮挡也能估

抓取规划

按吸附面/几何规则算抓取点

GraspNet 类抓取位姿生成网络,直接输出可行抓取点,免 CAD、未见物体也能给候选

防碰撞

包络体/几何干涉校验

学习式碰撞校验,兼顾抓取顺序(先挪开遮挡件)

基准数据很好看,但要分清"实验室"和"产线"学术与官方基准里,抓取网络成绩相当高:6-DOF GraspNet 在多类常见物体上约 88% 成功率;AnyGrasp 在 300 多个未见物体清筐任务中报告约 93.3% 成功率、单臂吞吐超 900 次/小时(MPPH)。但这些是受控基准或理想条件。产线面对的是反光、黑色、油膜、料筐边界、连续节拍,模型派真正省的是换型调试时间,付出的是数据采集和算力——两边都是真金白银,选型时要按自己的工件算这笔账。

料筐混抓的三只拦路虎
  • 堆叠/贴靠

    :分割难、抓取点被遮挡、易连带

  • 反光件

    :结构光过曝、点云破洞

  • 黑色件

    :吸光、回波弱、点云稀疏

对应的工程动作
  • 偏振/多角度打光、HDR、多帧融合

  • 反光/黑色件换成像方案或喷粉/贴标(评估代价)

  • 给打光、曝光、点云补全预留足够调试周期

08VLA 大模型现在能上产线吗

这两年 VLA(Vision-Language-Action,视觉-语言-动作)模型很热,演示里已经能"一句话让机器人去抓某个东西"。但要冷静看它的工程位置。

它确实在快速进步
  • 轻量化:SmolVLA 约 450M、TinyVLA 推理快约 20 倍,可在消费级/边缘硬件跑

  • 边缘落地:Agile-VLA 在 Jetson Orin Nano 上做感知 10Hz / 控制 50Hz 异步,复杂件约 90.5%

  • 商业落地:国内已有轻量 VLA 以约 30 天完成产线适配部署,相较传统 3~6 个月大幅缩短

但产线可靠性仍有差距
  • 大模型在未见任务真机上的成功率,仍明显低于结构化/演示场景(部分公开评测新机任务约 38%)

  • 失败常不在"手",而在"眼"——把名词绑定到正确图像区域(抓错对象)

  • 7×24 连续生产要的是确定性、可归因、可复现

当前合理分工:小模型管可靠,大模型管泛化产线上 7×24 小时跑的主力,仍是确定性的小模型、规则与状态机;VLA 大模型现阶段更适合当离线工具——生成抓取候选、辅助换型调试、自动写异常报告、处理长尾指令,再由小模型执行高可靠闭环。直接让大模型端到端接管产线节拍,风险和成本都还不划算。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐