1. 手眼标定基础:从“眼睛”到“手”的坐标对话

各位工程师朋友,咱们直接进入正题。手眼标定,说白了就是让机器人的“眼睛”(相机)和“手”(机械臂)能对上话。你想想看,相机看到工件在某个位置,机械臂要过去抓,这两者用的坐标系根本不一样——相机有自己的像素坐标系,机械臂有自己的基坐标系。没有标定,机器人就是个“睁眼瞎”。

我最早接触这个课题是在一个3C装配项目里。当时相机明明拍到了螺丝孔,机械臂就是怼不进去。折腾了两天,最后发现是手眼关系矩阵算错了0.5毫米。嗯,从那以后,我再也不敢小看这一步。

1.1 什么是手眼标定?

手眼标定,就是求解相机坐标系与机械臂末端(或基座)坐标系之间的空间变换关系。这个关系用一个4×4的齐次变换矩阵表示,包含旋转和平移。

数学上,我们要求解的是这样一个方程:

相机坐标系 → 机器人坐标系
P_robot = T_cam2robot × P_camera

其中 T_cam2robot 就是我们标定要得到的矩阵。有了它,相机看到的每个点都能换算成机械臂能理解的坐标。

核心本质:手眼标定 = 求解两个刚体坐标系之间的6自由度空间变换(3个旋转自由度 + 3个平移自由度)。

1.2 Eye-in-Hand 与 Eye-to-Hand 的区别

这两种配置,我估计很多新手容易搞混。咱们用一张表说清楚:

对比项 Eye-in-Hand(眼在手上) Eye-to-Hand(眼在手外)
相机安装位置 固定在机械臂末端 固定在工作空间上方或侧面
相机与机械臂关系 相机随机械臂移动 相机固定不动
标定目标 相机坐标系 → 机械臂末端坐标系 相机坐标系 → 机械臂基座坐标系
典型应用 小范围高精度抓取、焊缝跟踪 大范围定位、码垛、装配
标定复杂度 需要多个位姿,计算量稍大 相对简单,一次标定长期使用

Eye-in-Hand 的好处是相机离工件近,精度高,但每次机械臂动,视野就变了。我做过一个手机中框抓取项目,用的就是这种配置。当时遇到的问题是:机械臂在不同姿态下,标定板的成像质量差异很大,导致标定结果不稳定。

Eye-to-Hand 则相反,相机视野固定,适合看全局。但相机离得远,像素当量(每个像素代表的实际尺寸)会变大,精度受限制。我记得有个汽车零部件项目,客户非要Eye-to-Hand,结果因为视野太大,0.1毫米的定位精度死活达不到,最后被迫加了第二个相机。

我的建议:如果工件尺寸小(< 200mm)且精度要求高(< 0.1mm),优先选Eye-in-Hand。如果工件大、工作范围广,或者需要同时看多个工件,选Eye-to-Hand更省事。

1.3 标定的核心目标

手眼标定的核心目标,用一句话概括就是:让机器人能准确抓取相机看到的物体。

拆开来看,有四个具体目标:

  1. 空间对齐:建立相机与机器人之间的坐标映射关系
  2. 误差最小化:将重投影误差或位置误差控制在允许范围内(通常< 0.5mm)
  3. 稳定性:标定结果在不同位姿、不同光照下可重复
  4. 鲁棒性:对标定板姿态、噪声、畸变有一定的容忍度

我曾经在一个项目中踩过坑:标定结果在实验室里精度0.2mm,一到产线上就变成1.5mm。后来发现是产线振动导致相机支架发生了微小位移。所以,稳定性有时候比精度本身更难搞。

1.4 数学本质:AX = XB 问题

这里稍微深入一点。手眼标定的数学本质,是一个经典的 AX = XB 问题。

什么意思呢?

  • A:机械臂从位姿1到位姿2的变换矩阵(已知,从机器人控制器读取)
  • B:相机从位姿1到位姿2的变换矩阵(已知,通过标定板图像计算)
  • X:手眼变换矩阵(未知,我们要解的)

方程就是:A × X = X × B

这个方程的解,就是我们要的手眼关系。为什么是这种形式?因为机械臂移动前后,相机与机械臂之间的相对关系是不变的——这就是约束条件。

注意:AX = XB 方程至少需要3组非共面的位姿数据才能求解。我见过有人只拍2组数据就标定,结果矩阵奇异,标定结果完全不能用。一般建议采集10-15组不同姿态的数据,然后做优化求解。

1.5 知识体系总览

下面这张图,把本章的核心逻辑串起来了。你可以把它当作后续学习的路线图:

手眼标定知识体系总览 手眼标定 配置类型 核心目标 数学本质 Eye-in-Hand Eye-to-Hand 空间对齐 误差最小化 AX = XB 方程 A:机械臂运动 B:相机运动 X:手眼矩阵 标定流程:采集多组位姿 → 求解AX=XB → 优化 → 验证精度 至少3组非共面数据,建议10-15组,重投影误差 < 0.5像素

1.6 标定前的准备工作

在进入实际标定之前,有几个基础条件必须满足。我见过太多人上来就标,结果数据一塌糊涂:

  • 相机内参必须先标定好:畸变系数、焦距、主点坐标。内参不准,手眼标定就是空中楼阁
  • 机械臂运动学参数要准确:尤其是末端执行器的安装偏差,最好先用工具标定一下TCP
  • 标定板要平整、精度够:陶瓷板优于玻璃板,玻璃板优于打印纸。我习惯用7×7的陶瓷圆点标定板
  • 光照要均匀:避免反光、阴影,否则特征点提取会出偏差

一个小技巧:正式标定前,先用手动模式让机械臂走几个位姿,观察标定板在图像中的位置。确保标定板始终在视野中央区域,不要跑到边缘——边缘畸变大会引入额外误差。

1.7 本章小结

手眼标定,本质上就是给机器人的“眼睛”和“手”做一次坐标对齐。Eye-in-Hand和Eye-to-Hand各有适用场景,选型时要根据精度、视野、工作范围综合判断。数学上,它归结为AX=XB问题,需要多组位姿数据来求解。