1. 手眼标定概述:什么是手眼标定?为什么需要它?Eye-in-Hand vs Eye-to-Hand 的区别
大家好,我是老张。做机器人这行十几年了,手眼标定这事儿,几乎每个项目都会碰到。说白了,手眼标定就是给机器人装上一双「看得准」的眼睛。
你想想看,机器人本身只有关节角度和位置信息,它不知道工件在哪、螺丝孔在哪。相机能看到工件,但相机有自己的坐标系。怎么把相机看到的坐标,告诉机器人的手?这就是手眼标定要解决的问题。
1.1 什么是手眼标定?
手眼标定,核心就是求一个变换矩阵。这个矩阵能把相机坐标系下的点,转换到机器人基坐标系下。这样机器人才能准确抓取、装配、焊接。
数学上,我们要求解的是:
相机坐标系 → 机器人基坐标系 的变换关系 (通常记为 T_cam_to_base)
或者更常见的形式:
相机坐标系 → 机器人末端坐标系 的变换关系 (Eye-in-Hand 场景)
我习惯用一个比喻来理解:相机是眼睛,机器人是手。标定就是让手知道眼睛看到的「那个点」在手的什么位置。嗯,就这么简单。
AX = XB
其中 A 是机器人末端的位姿变换,B 是相机观测到的标定板位姿变换,X 就是我们要找的手眼矩阵。
1.2 为什么需要手眼标定?
没有标定,机器人就是个瞎子。我见过太多项目,相机装好了,图像处理也跑通了,结果机器人抓不准。为什么?因为坐标没对齐。
具体来说,手眼标定解决三个核心问题:
- 坐标统一:把相机看到的像素坐标,变成机器人能用的物理坐标。
- 精度保障:标定精度直接决定抓取、装配的成功率。差个 0.5mm,可能就装不进去了。
- 系统集成:没有标定,视觉系统和机器人系统就是两套独立系统,没法协同工作。
我记得有一次做 3C 装配项目,相机分辨率很高,算法也很准,但就是抓取偏移。折腾了两天,最后发现是手眼标定用的标定板尺寸写错了。你说冤不冤?
标定精度通常要求达到机器人重复定位精度的 3-5 倍。比如机器人重复精度 ±0.02mm,标定误差最好控制在 ±0.1mm 以内。
1.3 Eye-in-Hand vs Eye-to-Hand
这两种配置,我几乎每个项目都要跟客户解释一遍。其实区别很直观:
| 对比项 | Eye-in-Hand (眼在手上) | Eye-to-Hand (眼在手外) |
|---|---|---|
| 相机安装位置 | 固定在机器人末端 | 固定在工作空间上方或侧面 |
| 标定目标 | 相机到末端的变换 (T_cam_to_end) | 相机到基座的变换 (T_cam_to_base) |
| 视野特点 | 随机器人移动,视野变化 | 固定视野,覆盖工作区域 |
| 精度影响 | 受机器人运动误差影响 | 受相机安装稳定性影响 |
| 典型应用 | 抓取、焊接、装配 | 定位、检测、码垛 |
说白了,Eye-in-Hand 适合需要「凑近看」的场景,比如精密装配。Eye-to-Hand 适合「全局看」的场景,比如大范围定位。
我曾经在一个项目中,客户坚持用 Eye-to-Hand 做精密装配,结果因为视野遮挡,死活对不准。后来换成 Eye-in-Hand,问题就解决了。选型很重要。
1.4 两种配置的标定流程对比
标定流程上,两者也有明显区别:
Eye-in-Hand 标定流程
- 固定标定板在工作空间内
- 控制机器人移动多个位姿,每个位姿下相机拍摄标定板
- 记录每个位姿的机器人末端位姿 (A) 和标定板在相机下的位姿 (B)
- 求解 AX = XB
Eye-to-Hand 标定流程
- 标定板固定在机器人末端
- 控制机器人移动多个位姿,相机拍摄标定板
- 记录每个位姿的机器人末端位姿 (A) 和标定板在相机下的位姿 (B)
- 求解 AX = XB (形式略有不同)
你发现没有?数学上都是 AX = XB,但物理意义完全不同。Eye-in-Hand 的 X 是相机到末端的变换,Eye-to-Hand 的 X 是相机到基座的变换。
我曾经犯过一个错误——标定过程中机器人位姿变化太小,导致求解矩阵奇异。记住:位姿变化要足够大,旋转角度至少 30° 以上,平移距离至少 100mm 以上。
1.5 知识结构总览
下面这张图,是我自己总结的手眼标定知识体系。你可以把它当作整个课程的地图:
这张图把本章的核心内容串起来了。从定义到必要性,再到两种配置的区别,最后都归结到 AX = XB 这个核心方程上。后面的章节,我们会一步步深入每个细节。
1.6 本章小结
好了,这一章就讲这些。记住三个要点:
- 手眼标定就是求相机到机器人的坐标变换
- 没有标定,视觉系统就是摆设
- Eye-in-Hand 和 Eye-to-Hand 选型要看具体场景