1、标定基础:手眼标定的定义、为什么需要标定、标定的数学本质(AX=XB)
1.1 手眼标定到底在干什么?
说白了,手眼标定就是给机器人装上一双「看得准」的眼睛。
你想想看,机器人要抓个杯子,它的机械臂知道自己的位置,它的相机也看到了杯子在哪。但问题是——相机看到的坐标和机械臂自己的坐标,根本不在同一个坐标系里。这就好比你的眼睛说「杯子在右边」,但你的手却往左边伸,肯定抓不到。
手眼标定要解决的,就是算出相机和机械臂之间的那个固定变换关系。有了这个关系,相机看到的每个点,都能换算成机械臂能理解的位置。
核心定义:手眼标定是通过数学方法,求解相机坐标系与机器人末端(或基座)坐标系之间的刚体变换矩阵(旋转 + 平移),从而实现视觉引导下的精准定位。
1.2 为什么非标不可?
我刚开始做机器人项目时,觉得标定这步可有可无。直到有一次,一个焊接机器人死活焊不准,误差差了 2 毫米。查了三天,最后发现是相机装歪了 0.5 度——就这 0.5 度,在 1 米外就偏了将近 9 毫米。
从那以后,我再也不敢跳过标定了。
具体来说,不标定会出这些问题:
- 视觉引导抓取失败——相机说「在这」,机械臂抓过去是空的
- 装配精度不达标——0.1mm 的装配公差,手眼误差直接吃掉一大半
- 换相机或换臂就得重来——没有标定参数,每次拆装都是噩梦
- 多机器人协同乱套——各自为政,谁也找不到谁
我的经验:在项目启动阶段就把标定流程固定下来,哪怕只是用棋盘格做个粗略标定,也比「先跑起来再说」强十倍。后期返工的成本,往往是前期标定的 5-10 倍。
1.3 数学本质:AX = XB
好,现在聊点硬核的。手眼标定的数学本质,就是解一个方程:AX = XB。
这个方程看着简单,但背后有讲究。我来拆解一下:
- A:机器人末端从位置 1 移动到位置 2 的变换矩阵(机器人自己告诉你的)
- B:相机从位置 1 看到标定板,到位置 2 看到标定板的变换矩阵(相机算出来的)
- X:我们要找的手眼变换矩阵(相机到末端的固定关系)
为什么是 AX = XB?
你想想看,机器人动一下,末端走了 A 这段路,相机也走了 B 这段路。但相机是装在末端上的,所以这两段路之间,必须通过 X 这个固定关系连起来。说白了就是:从末端出发,经过 X 到相机,再走 B 回来,和直接走 A 再经过 X,结果应该一样。
数学表达:
A · X = X · B
其中:
A = [R_A t_A; 0 1] (4x4 齐次变换矩阵)
B = [R_B t_B; 0 1] (4x4 齐次变换矩阵)
X = [R_X t_X; 0 1] (4x4 齐次变换矩阵,待求)
这个方程可以拆成旋转和平移两部分:
| 部分 | 方程 | 说明 |
|---|---|---|
| 旋转 | R_A · R_X = R_X · R_B | 先解旋转矩阵,通常用四元数或轴角表示 |
| 平移 | (R_A - I) · t_X = R_X · t_B - t_A | 旋转解出来后,平移就是线性方程组 |
注意:当 R_A 接近单位矩阵(即机器人几乎没旋转)时,(R_A - I) 接近零矩阵,平移部分会变成病态方程。我遇到过有人只平移不旋转地采集数据,结果标定出来的平移量差了十几毫米。所以采集数据时,一定要让机器人做不同姿态的旋转。
1.4 两种经典手眼关系
根据相机装在哪,手眼标定分两种:
| 类型 | 相机位置 | 方程形式 | 典型场景 |
|---|---|---|---|
| Eye-in-Hand | 相机装在机械臂末端 | AX = XB | 抓取、装配、焊接 |
| Eye-to-Hand | 相机固定在工作台上方 | AX = XB(形式相同,但 X 含义不同) | 检测、定位、码垛 |
两种情况的 X 含义不一样:
- Eye-in-Hand:X 是 相机 → 末端 的变换
- Eye-to-Hand:X 是 相机 → 机器人基座 的变换
但数学上,它们都归结为 AX = XB 这个形式。只是采集数据的方式略有不同。
1.5 一张图看懂手眼标定
下面这张图展示了 Eye-in-Hand 的核心逻辑:
1.6 标定的基本流程
不管用哪种方法,手眼标定的步骤大致相同:
- 准备标定板——棋盘格或圆点阵列,尺寸要提前量准
- 采集数据——让机器人带着相机(或标定板)走十几个不同的位姿
- 记录 A 和 B——A 从机器人控制器读,B 从相机图像算
- 求解 X——用 Tsai 法、Park 法或非线性优化
- 验证精度——用没参与标定的数据做重投影误差检查
避坑指南:我曾经采集了 20 组数据,结果标定出来误差很大。后来发现,其中有 8 组数据的机器人姿态几乎一样——旋转角度差不到 5 度。这导致方程组的条件数很差。后来我规定:相邻两组数据的旋转角度差至少 30 度,平移距离差至少 50mm。标定精度一下子就上去了。
1.7 标定精度能到多少?
这个问题我经常被问到。说实话,没有标准答案,但可以参考以下经验值:
| 标定条件 | 旋转误差 | 平移误差 | 适用场景 |
|---|---|---|---|
| 粗略标定(单一位姿) | 1° ~ 3° | 5 ~ 10 mm | 视觉粗略定位 |
| 常规标定(10-15 组位姿) | 0.1° ~ 0.5° | 0.5 ~ 2 mm | 一般抓取、码垛 |
| 精细标定(20+ 组位姿 + 优化) | 0.01° ~ 0.05° | 0.1 ~ 0.5 mm | 精密装配、焊接 |
嗯,这里要注意:标定精度不光取决于算法,还取决于机器人本身的定位精度。如果你的机器人重复定位精度是 ±0.1mm,但定位精度只有 ±1mm,那标定结果再好也救不了你。
一句话总结:手眼标定就是解 AX=XB,但真正做好标定,需要理解数据采集的坑、方程求解的数值稳定性,以及机器人本身的硬件限制。后面几章,我会把这些坑一个一个填上。