[具身智能-1149]:机器人手眼标定(Hand-Eye Calibration):手眼标定矩阵(X,Y,Z的映射关系)

机器人手眼标定(Hand-Eye Calibration)

一句话:手眼标定就是算出 "机器人的手(末端执行器)" 和 "机器人的眼(相机)" 之间的坐标变换关系,让机器人知道 "相机看到的物体,在机器人坐标系里的什么位置"。


一、什么是手眼标定

通俗理解

机器人有一个机械臂(手),上面或旁边装了一个相机(眼)。相机看到一个物体,知道它在 "相机画面里的坐标",但机器人要去抓它,需要知道它在 "机器人底座坐标系里的坐标"。

手眼标定就是求这两个坐标系之间的转换矩阵。

plaintext

相机看到物体 → 物体在相机坐标系的位置
                    ↓  手眼标定矩阵 X
              物体在机器人坐标系的位置
                    ↓
              机器人运动过去抓取

没有手眼标定,相机和机器人就是 "各说各话"—— 相机说 "物体在我左边 10cm",机器人不知道 "你的左边" 对应 "我的哪个方向"。


二、背景:为什么需要手眼标定

问题的由来

  1. 相机和机器人是两个独立的设备

    • 相机有自己的坐标系(以相机光心为原点);
    • 机器人有自己的坐标系(以底座为原点);
    • 两者出厂时没有绑定,不知道彼此的相对位置。
  2. 安装存在误差

    • 相机装在机械臂上,螺丝孔有公差、安装有倾斜;
    • 你以为相机 "正对着" 末端,实际上偏了几度、偏了几毫米;
    • 这些误差如果不标定,抓取就会偏。
  3. 视觉伺服的前提

    • 机器人要根据相机看到的物体位置来运动(视觉伺服);
    • 必须知道相机和末端的精确关系,否则控制会出错。

一个直观的例子

你戴了一副偏了的眼镜,看到的东西都偏左 10 度。你伸手去拿杯子,手会伸到杯子左边 —— 因为你的 "眼睛(相机)" 和 "手(机器人)" 之间的关系不对。

手眼标定就是 "测出眼镜偏了多少,然后补偿回来"。


三、两种安装方式

手眼标定分两种,标定方法不同:

1. Eye-in-Hand(眼在手上)

  • 相机装在机器人末端,跟着手臂一起动;
  • 标定的是:末端坐标系 → 相机坐标系的变换;
  • 特点:相机随手臂运动,视野随手臂变化;
  • 典型场景:机械臂抓取、装配、视觉伺服。

plaintext

机器人底座
    │
    └── 机械臂
          └── 末端法兰
                └── 相机(跟着手臂动)

2. Eye-to-Hand(眼在手外)

  • 相机固定在工作空间旁边,不跟着手臂动;
  • 标定的是:机器人底座坐标系 → 相机坐标系的变换;
  • 特点:相机视野固定,看整个工作区域;
  • 典型场景:传送带分拣、固定工位抓取。

plaintext

相机(固定不动,俯瞰工作区)
    │
    ▼
  工作区
    │
    └── 机械臂

亚博小车如果装了摄像头做视觉跟随,属于类似 eye-to-hand 的思路(相机和底盘固定,标定相机和底盘的关系)。


四、核心数学原理:AX = XB

手眼标定的核心方程是:

\(AX = XB\)

其中:

  • A:机器人末端的运动(从位姿 1 到位姿 2 的变换);
  • B:相机的运动(从位姿 1 到位姿 2 的变换,通过标定板算出);
  • X:手眼变换矩阵(我们要求的未知量);
  • 方程含义:机器人动了多少 = 相机动了多少,中间通过 X 联系起来

通俗理解

  • 让机器人带着相机动几次(eye-in-hand),或者让相机看机器人末端动几次(eye-to-hand);
  • 每动一次,记录:
    • 机器人末端的位姿变化 A(从机器人控制器读取);
    • 相机的位姿变化 B(通过标定板在相机中的位置变化算出);
  • 多组 (A, B) 数据,解方程 AX = XB,求出 X。

为什么要动多次?因为一次运动数据不够,方程有无穷多解。通常需要 10~20 组不同姿态的数据,才能稳定求解。

常用求解算法

表格

算法特点
Tsai-Lenz经典方法,旋转和平移分步求解,最常用
Park-Martin另一种经典方法,类似思路
Horaud对偶四元数法,数值稳定性好
迭代优化用多组数据做非线性优化,精度更高

五、标定流程(实操步骤)

以 eye-in-hand 为例:

准备工作

  1. 相机内参标定:先标定相机的焦距、主点、畸变(用棋盘格 / 标定板);

    手眼标定是 "外参" 标定,前提是相机内参已知。

  2. 准备标定板:棋盘格、AprilTag、ArUco 标记都可以;
  3. 固定标定板:把标定板放在工作空间里,固定不动。

标定步骤

plaintext

第1步:机器人移动到姿态1 → 记录末端位姿 T1 → 相机拍标定板 → 算出相机位姿 C1
第2步:机器人移动到姿态2 → 记录末端位姿 T2 → 相机拍标定板 → 算出相机位姿 C2
第3步:机器人移动到姿态3 → ...
...
第N步:收集10~20组 (Ti, Ci)

数据处理

  1. 计算相邻位姿之间的运动:A = T2 × T1⁻¹,B = C2 × C1⁻¹;
  2. 得到多组 (A, B);
  3. 代入 AX = XB,用 Tsai-Lenz 等算法求解 X;
  4. 得到手眼变换矩阵 X(4×4 齐次变换矩阵,包含旋转和平移)。

验证

  • 把标定结果代入,用相机看一个已知位置的物体,算出机器人坐标;
  • 让机器人去抓,看误差多大;
  • 误差大就重新标定,或者增加标定姿态数量。

六、ROS2 中的常用工具

表格

工具用途
easy_handeye最常用的手眼标定包,支持 eye-in-hand 和 eye-to-hand,图形界面,集成了 Tsai-Lenz 算法
visp_hand2eye_calibration基于 ViSP 库的标定工具
camera_calibration相机内参标定(手眼标定的前置步骤)
MoveIt CalibrationMoveIt 集成的标定工具

easy_handeye 是 ROS/ROS2 社区最主流的方案,有 rqt 面板,操作直观。


七、标定的关键技巧(影响精度)

  1. 姿态要分散:不要只在一个小范围动,要让机器人末端在不同位置、不同角度都有采样;

    • 旋转角度要大(至少覆盖 ±30°);
    • 平移范围要广;
    • 姿态之间差异越大,求解越稳定。
  2. 标定板要清晰

    • 标定板占画面 1/3 ~ 1/2;
    • 不要过曝、不要模糊;
    • 标定板要固定,不能动。
  3. 重复精度

    • 同一姿态多拍几次,看结果是否一致;
    • 机器人重复定位精度差(如步进电机臂),标定精度也会差。
  4. 载荷一致性

    • 标定时末端装什么,工作时就装什么(装了相机和工具的重量会让机械臂变形);
    • 重力导致的变形会影响标定精度。

八、常见问题

表格

问题原因解决
标定结果每次都不一样姿态太少或太集中增加到 15~20 组,姿态分散
抓取偏差大相机内参不准先重新标定相机内参
旋转误差大姿态中旋转量不足增加不同角度的姿态
eye-to-hand 标定失败机器人末端没有标记物在末端贴 AprilTag / 标定板
标定后用一段时间又不准机械臂松动 / 相机移位重新标定,检查安装紧固

九、和之前知识的联系

  • 相机内参标定解决 "相机自己的参数"(焦距、畸变),是手眼标定的前提;
  • 三角测距 / 双目:解决 "相机看到的物体有多远",是 3D 感知;
  • 手眼标定:解决 "相机看到的物体,在机器人坐标系里在哪",是视觉和机器人的桥梁;
  • 激光雷达标定(外参):类似手眼标定,求激光雷达和机器人底盘的坐标变换,只是把 "相机" 换成 "激光雷达"。

本质上,所有多传感器系统都需要 "外参标定"—— 手眼标定是相机 + 机械臂的外参标定,激光雷达 + 底盘也是外参标定,原理相通,都是求两个坐标系之间的变换矩阵。


十、一句话总结

手眼标定就是求 "机器人的手" 和 "相机的眼" 之间的坐标变换矩阵,让相机看到的物体位置能转换成机器人能执行的运动指令。核心方程是 AX=XB,通过让机器人动多次、记录末端和相机的位姿变化来求解。它是视觉伺服、机械臂抓取、视觉引导的基础前提 —— 没有它,相机和机器人就是 "鸡同鸭讲"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文火冰糖的硅基工坊

你的鼓励是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值