手眼标定解决的是“相机坐标系”和“机器人坐标系”之间的刚体位姿关系。
N点标定通常解决的是“图像像素坐标”和“某个工作平面上的实际坐标”之间的平面映射关系:用多个已知点建立 2D 像素到 2D 实际坐标的变换。
Cognex 的校准工具就明确区分了手眼标定与N点标定:
手眼标定用于建立视觉系统与机器人坐标系的空间关系;
N Point/Calibrate/CalibrateAdvanced 则用于建立图像坐标到实际坐标的 2D 变换。
你可以把它们理解成:
手眼标定:解决“机器人怎么去到视觉看到的位置”
N点标定:解决“相机里这个点,换算成工件平面上到底是多少 mm”
一、手眼标定到底在标什么
手眼标定的核心,是求出机器人与相机之间的空间变换关系。
HALCON 的手眼标定说明得很直接:它利用相机看到的标定板位姿和机器人上报的工具位姿,求出变换链两端缺失的位姿关系;对于固定相机(eye-to-hand)和相机装在机械臂末端(eye-in-hand)两种结构,最终求出的坐标关系并不一样。Cognex 也明确说,手眼标定的目的,是建立视觉系统与机器人坐标系之间的空间关系,从而把视觉结果转换成机器人可用的位姿。
所以手眼标定通常是 3D 位姿问题,至少概念上包含:
X、Y、Z 平移
Rx、Ry、Rz 旋转
也就是说,它求的是一个六自由度刚体变换。
二、N点标定到底在标什么
“N点标定”多数情况下,不是在求机器人和相机之间的 3D 关系,而是在求一个平面坐标变换。Cognex 的 Calibrate/CalibrateAdvanced/N Point 文档都属于这一类:它们要求输入若干个“图像中的像素点”和对应的“真实世界坐标点”,然后计算一个 2D 变换,把像素坐标映射到实际坐标;N Point 工具支持 2 到 16 个输入点,CalibrateAdvanced 支持 1 到 32 对点,目的都是建立这种 2D 映射。
所以现场常说的“九点标定、十二点标定”都属于N点标定,很多时候只是:
在治具或平台上取 9 个点 / 12 个点
已知每个点的真实 XY 坐标
相机依次识别这些点
建立像素到工作平面 XY 的映射关系
它本质还是 N 点平面标定,只不过这次用了 12 个点。“12”不是理论上必须的数字,而是工程上为了让拟合更稳、覆盖视野更均匀、压低畸变误差而选的点数。
Cognex 的文档也明确说明,多点高级标定比少点基础标定精度更高,格点标定通常精度最高。
三、两者最根本的区别
1. 目标不同
手眼标定的目标,是建立机器人坐标系 相机坐标系的空间关系。
N点标定的目标,是建立像素坐标 工作平面坐标的映射关系。
2. 维度不同
手眼标定本质上是 3D 位姿变换。
N点标定通常是 2D 平面映射。
3. 依赖数据不同
手眼标定需要:
多个机器人位姿
每个位姿下相机观测到的标定板位姿
而且这些姿态要分布合理。Cognex 明确提到手眼标定需要采集多个机器人姿态,并且这些姿态在视野内要有足够分布。
N点标定需要:
多个已知真实坐标点
每个点对应的图像像素位置,它不一定要求机器人参与。
4. 结果用途不同
手眼标定结果直接用于:
视觉引导抓取
机器人去到视觉算出的目标位姿
N点标定结果通常用于:
测量
平面定位
把图像检测结果换算成平台上的 XY 坐标。
<b>四、为什么现场会把它们混在一起
因为在很多 2D 抓取项目里,流程看起来很像:
相机拍到目标
算出目标图像坐标
转成平台/机器人可用坐标
机器人去抓
如果项目很简单,而且抓取发生在固定高度的平面上,很多人会直接用一个多点平面标定,把像素 XY 直接映射到机器人工作平面 XY。
这样在应用层看起来,也能实现“视觉引导抓取”。但这并不等于它做了严格意义上的手眼标定;它更像是一个平面近似解。一旦目标高度变化、相机角度变化、机械臂姿态变化明显,这种平面点标定就会暴露误差,而真正的手眼标定才是更完整的方法。
这个区别和 HALCON、Cognex 对手眼标定与 2D 标定的分开定义是一致的。
五、什么时候只做N点标定就够了
下面这些场景,通常N点平面标定就够:
相机固定不动
工件始终在同一个平面
抓取高度基本固定
只关心 XY,不关心 Z 和空间姿态
做的是 2D 平面搬运、平面点胶、平面贴装、固定高度取放
这类场景,本质上就是在一个已知平面内做像素到实际坐标的换算。Cognex的 2D 标定工具就是为这种“把图像结果输出为实际单位坐标”而设计的。
六、什么时候必须做手眼标定
下面这些场景,通常要上真正的手眼标定:
相机装在机械臂末端(eye-in-hand)
需要机器人根据视觉结果在空间中运动
目标高度不固定
需要 Z、角度、姿态
不是单纯的固定平面抓取
要做更高精度的视觉引导机器人
因为这时你需要的是机器人和视觉之间完整的空间变换,而不是单一平面的映射。Cognex 和 HALCON 都把这类场景明确归到 hand-eye calibration。
七、两者在设备里经常是“同时存在”的
这点很关键:很多项目不是二选一,而是两者一起用。
典型做法是:
先做相机自身标定 / 畸变校正
再做手眼标定,建立机器人和相机的关系
还可能再做局部工作平面标定,进一步补偿某个工位平面的误差
也就是说,手眼标定负责“大坐标关系”,N点标定负责“局部工作面修正”或“平面换算”。这和 Cognex 把手眼标定、Calibrate、CalibrateGrid、CalibrateAdvanced 分成不同功能模块的做法是一致的。
八、自动化设备里可以这样理解
做设备时,最实用的区分方法是:
N点标定相当于回答:“
相机里这个点,在载具平面上是几毫米、什么 XY 位置?”
手眼标定相当于回答:
“相机看到这个目标后,机器人末端该去哪个空间位姿才能抓到它?”
前者偏测量/平面映射,后者偏机器人引导/坐标链闭合。
九、总结
只在固定平面上取 XY:先想N点标定。<b>只要机器人和相机之间要建立空间关系:就要想手眼标定。
更直白一点:
平面换算:N点标定
空间引导:手眼标定
---
往期热门文章: