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 的核心逻辑:

手眼标定核心逻辑(Eye-in-Hand) 机器人基座 机械臂末端 相机 标定板 A(已知) X(待求) B(已知) 核心方程:A · X = X · B A:机器人末端运动(从机器人控制器读取) B:相机观测到的标定板运动(通过视觉算法计算) X:手眼变换矩阵(我们需要求解的目标) 采集多组位姿数据 构建 AX=XB 方程组 求解 X(旋转+平移)

1.6 标定的基本流程

不管用哪种方法,手眼标定的步骤大致相同:

  1. 准备标定板——棋盘格或圆点阵列,尺寸要提前量准
  2. 采集数据——让机器人带着相机(或标定板)走十几个不同的位姿
  3. 记录 A 和 B——A 从机器人控制器读,B 从相机图像算
  4. 求解 X——用 Tsai 法、Park 法或非线性优化
  5. 验证精度——用没参与标定的数据做重投影误差检查

避坑指南:我曾经采集了 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,但真正做好标定,需要理解数据采集的坑、方程求解的数值稳定性,以及机器人本身的硬件限制。后面几章,我会把这些坑一个一个填上。