一、手眼标定概述:让机器人真正“看见”世界

大家好,我是你们这门课的讲师。做了这么多年机器人视觉,我越来越觉得,手眼标定是整个系统里最容易被忽视、却又最致命的一环。说白了,它解决的是一个很朴素的问题:机器人的眼睛(相机)看到的东西,怎么告诉它的手(机械臂)去抓?

嗯,咱们今天就从最基础的概念聊起。

1.1 什么是手眼标定?

手眼标定,英文叫 Hand-Eye Calibration。它的核心任务,就是计算相机坐标系和机器人坐标系之间的空间变换关系。

你想想看,相机拍到的是一张二维图像,图像里的每个像素点,对应的是相机坐标系下的一个三维点。而机器人要抓取物体,它需要知道这个点在它自己的基坐标系下的位置。这两个坐标系之间,差了一个旋转和平移的矩阵,我们通常叫它 手眼矩阵。

核心公式:

相机坐标系下的点 Pcam,通过手眼矩阵 X,变换到机器人基坐标系下的点 Pbase:

P_base = X * P_cam

其中 X 是一个 4x4 的齐次变换矩阵,包含旋转 R 和平移 t。

根据相机安装位置的不同,手眼标定又分为两种经典模式:

  • Eye-to-Hand(眼在手外):相机固定安装在机器人外部,比如天花板上。它看着机器人和工作台。
  • Eye-in-Hand(眼在手上):相机安装在机器人末端法兰盘上,跟着机械臂一起动。
对比项 Eye-to-Hand(眼在手外) Eye-in-Hand(眼在手上)
相机位置 固定于外部支架 固定在机器人末端
视野范围 固定,覆盖整个工作区 随机械臂移动,视野变化
标定复杂度 相对简单,一次标定 稍复杂,需考虑末端姿态变化
典型应用 码垛、分拣、大范围定位 精密装配、焊缝跟踪、小空间作业

我个人习惯,在做项目选型时,如果工作空间大、物体位置相对固定,优先选 Eye-to-Hand。如果要求高精度、或者机器人需要凑近看细节,那就得上 Eye-in-Hand。

1.2 为什么需要手眼标定?

这个问题,我刚开始带项目时也问过自己。后来踩了坑才明白,没有标定,机器人的眼睛和手就是“陌生人”。

具体来说,有三大原因:

  1. 坐标系不统一:相机看到的是“相机坐标系”下的坐标,机器人动的是“基坐标系”下的坐标。没有标定,这两个坐标系就是鸡同鸭讲。
  2. 物理安装误差:你不可能把相机装得水平、垂直。哪怕偏了 0.1 度,在 1 米外的地方,误差就能放大到几毫米。这在工业现场是不可接受的。
  3. 动态补偿需求:特别是 Eye-in-Hand 模式,机械臂姿态一变,相机看到的物体位置就变了。标定矩阵能实时补偿这个变化。

避坑指南:

我曾经在一个汽车零部件抓取项目里,因为赶工期,手眼标定只做了粗略的“四点法”。结果一到实际抓取,机器人总是偏 2-3 毫米,抓不稳。后来老老实实重新做了完整的九点标定,问题才解决。所以,标定精度直接决定了抓取成功率,千万别图省事。

1.3 手眼标定的应用场景

手眼标定不是实验室里的玩具,它在工业现场无处不在。我挑几个典型的场景说说:

1.3.1 机器人抓取

这是最常见的应用。比如流水线上的工件,位置是随机的。相机拍一张,识别出工件中心,然后通过手眼矩阵换算成机器人坐标,机械臂过去抓起来。整个过程,标定矩阵就是那个“翻译官”。

1.3.2 精密装配

我做过一个手机壳装配的项目。相机装在机器人手上,先拍一个定位孔,再拍另一个,通过手眼矩阵算出两个孔之间的实际空间距离,然后引导机器人把零件装进去。这里标定精度要求很高,通常要控制在 0.1mm 以内。

1.3.3 焊缝跟踪

焊接场景下,工件可能有变形。相机实时拍摄焊缝轨迹,通过手眼矩阵把图像上的焊缝路径映射到机器人运动轨迹上,实现实时纠偏。嗯,这里对实时性要求很高,标定矩阵的计算速度也得跟上。

1.3.4 其他场景

  • 码垛/拆垛:视觉引导机器人从托盘上抓取箱子,标定保证每次抓取位置准确。
  • 检测与测量:相机检测完产品缺陷,通过手眼矩阵告诉机器人哪个位置需要打磨或涂胶。
  • AGV 与机械臂协同:移动机器人上的机械臂,需要同时标定相机与车体、相机与机械臂的关系。

1.4 手眼标定的知识体系

为了让大家有个整体印象,我画了一张图,把本章的核心知识点串起来:

手眼标定知识体系框架图 手眼标定知识体系 手眼标定 定义:坐标系变换 为什么需要? 应用场景 Eye-to-Hand Eye-in-Hand 坐标系不统一 安装误差 抓取 装配 焊接 核心目标:建立相机与机器人之间的空间变换关系 为后续的视觉引导、抓取、装配提供坐标基准

我的建议:

刚开始学手眼标定,不要急着去调算法。先把这张图里的概念搞清楚:什么是坐标系?什么是齐次变换矩阵?Eye-to-Hand 和 Eye-in-Hand 有什么区别?这些基础打牢了,后面学标定算法、写代码才会顺手。

好了,这一章的内容就到这里。手眼标定是整个视觉引导系统的基石,后面的所有章节都会基于这个基础展开。希望大家能真正理解它,而不是只会调 API。