机器人视觉引导定位简介

上下料、装配、码垛、分拣这四类工序,机器人的作业精度往往卡在同一个地方——不知道工件在哪、是什么姿态。视觉引导定位就是用相机测出工件的 6D 位姿(X/Y/Z 三个位置 + 偏航/俯仰/横滚三个姿态角),再通过手眼标定把像素坐标换算成机器人坐标,引导抓放。本文按工程交付顺序讲清四件事:立项先问四个数(来料偏差、姿态种类、精度、节拍)、标定与信号链怎么搭(九点标定、eye-to-hand/eye-in-hand、OpenCV 代码)、2D 还是 3D 怎么选(四种 3D 相机对照)、两本账与一次成功率怎么验收(误差链 RSS 合成、节拍预算、99% 成功率、失败归因),并冷静评估 VLA 大模型当前能做什么。
本文目录
-
四类工序,卡点都在"工件在哪、什么姿态"
-
视觉引导到底在解什么:六个自由度
-
一条信号链:像素是怎么变成机器人坐标的
-
手眼标定怎么做(含九点标定与 OpenCV 代码)
-
2D 还是 3D:一张选型决策树
-
两本账:精度误差链与节拍时间预算
-
找工件与无序抓取:逐层算法栈
-
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)
- 装标定针
:尖点固定在夹具上,与吸盘/夹爪实际 TCP 处于同一位置和高度。
- 走 9 个点
:末端在视野(与真实作业区域一致、高度一致)内走 9 个点,逐点记录机器人坐标和对应像素圆心坐标。
- 拟合与回代
:最小二乘拟合仿射矩阵;任取一个点回代,残差应小于定位精度要求的 1/3(例如要求 ±0.1mm,回代残差应在 ±0.03mm 内)。
- 固化
:变换矩阵随程序固化。换镜头、动相机、修夹具、换夹具——重标,没有例外。
先做内参,再谈手眼手眼标定的精度受限于相机内参。先用棋盘格把相机内参标定好、重投影误差压到 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 的工序;打光与点云质量决定上限。
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 大模型现阶段更适合当离线工具——生成抓取候选、辅助换型调试、自动写异常报告、处理长尾指令,再由小模型执行高可靠闭环。直接让大模型端到端接管产线节拍,风险和成本都还不划算。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)