2. 坐标系与刚体变换基础
说实话,做视觉抓取这几年,我见过太多人一上来就调模型、调参数,结果机器人抓得歪七扭八。为什么?坐标系没搞明白。你想想看,相机看到的是像素坐标,机器人动的是关节角度,这两者之间差了十万八千里。今天我们就把这个基础打牢。
2.1 四个核心坐标系
在视觉引导抓取中,我们通常要跟四个坐标系打交道。我个人习惯把它们分成两组:一组是“世界里的”,一组是“机器人里的”。
| 坐标系 | 符号 | 作用 | 典型原点 |
|---|---|---|---|
| 世界坐标系 | W | 全局参考,所有物体的位置基准 | 工作台一角或地面 |
| 相机坐标系 | C | 以相机光心为原点,Z轴指向拍摄方向 | 相机光心 |
| 机器人基坐标系 | B | 机器人本体的固定参考 | 机器人底座中心 |
| 工具/末端坐标系 | E | 夹爪或吸盘的中心 | 工具末端 |
关键认知:所有坐标变换的本质,就是在这四个坐标系之间来回“翻译”。你告诉机器人“去抓那个杯子”,实际上是在做一串矩阵乘法。
2.2 刚体变换的数学本质
刚体变换,说白了就是“旋转+平移”。一个物体在空间里,要么转个角度,要么挪个位置,不会变形。数学上我们用齐次变换矩阵来表示:
# 齐次变换矩阵 T 的通用形式
T = | R t |
| 0 1 |
# 其中 R 是 3x3 旋转矩阵,t 是 3x1 平移向量
# 一个点从坐标系 A 变换到坐标系 B:
# p_B = T_A_to_B * p_A
我记得刚入行时,总觉得旋转矩阵很抽象。后来我换了个角度想:你拿一本书,先绕X轴转30度,再沿Y轴平移10厘米——这就是一个刚体变换。矩阵只是把这个过程写成了数学公式。
2.3 手眼标定的数学本质
手眼标定,是视觉引导抓取里最绕、也最关键的环节。它的数学本质是什么?一句话:求解相机坐标系与机器人末端坐标系之间的固定变换关系。
手眼系统分两种:
- Eye-to-Hand(眼在手外):相机固定安装,看机器人和工件。标定求解的是相机到机器人基座的变换。
- Eye-in-Hand(眼在手上):相机装在机器人末端,跟着动。标定求解的是相机到机器人末端的变换。
我的经验:Eye-in-Hand 更灵活,但标定精度受机器人运动精度影响。Eye-to-Hand 更稳定,但视野可能被遮挡。选哪种?看你现场工况。我做过一个项目,工件在深腔里,只能用 Eye-in-Hand。
数学上,手眼标定归结为求解一个经典方程:
# Eye-in-Hand 的 AX = XB 问题
# A: 机器人末端的两次位姿变换
# B: 相机看到的标定板两次位姿变换
# X: 待求的手眼矩阵(相机到末端的固定变换)
# 展开形式:
# T_robot1_to_robot2 * X = X * T_cam1_to_cam2
为什么会这样?你想想看:机器人动一下,末端从位姿1走到位姿2,相机看到的标定板也从位姿1变到位姿2。这两个变化之间,夹着一个不变的X。解这个方程,就是手眼标定的数学本质。
避坑指南:我曾经在一条产线上标定了三小时,结果发现机器人末端坐标系定义反了。后来我养成了一个习惯:标定前先用示教器手动走几个点,确认坐标系方向。别嫌麻烦,这一步省不了。
2.4 坐标系变换链
实际抓取时,坐标变换是一条链:
- 相机拍到工件,得到工件在相机坐标系下的坐标 p_C
- 通过手眼矩阵 X,变换到机器人末端坐标系:p_E = X * p_C
- 通过机器人运动学,变换到机器人基坐标系:p_B = T_E_to_B * p_E
- 如果定义了世界坐标系,再变换到世界坐标系:p_W = T_B_to_W * p_B
这条链上任何一个环节出错,抓取就偏了。我见过一个案例,工程师把变换顺序写反了,结果机器人每次都往工件旁边10厘米处抓——还以为是视觉算法有问题。
2.5 标定实操要点
理论说完了,聊点实际的。手眼标定怎么做?我总结了几条:
- 标定板要够大:覆盖相机视野的60%以上,太小了标定精度差。
- 姿态要多样:别只在一个平面里转,上下左右前后都要有。我一般走15-20个姿态。
- 数据要筛选:标定完看一眼重投影误差,超过0.5像素的剔除掉。
- 验证不能省:标定完拿一个已知点去验证,机器人指过去,偏差在1mm以内才算合格。
一句话总结:坐标系是视觉抓取的“语言”,刚体变换是“语法”。语言不通,什么都白搭。把这一章吃透,后面的手眼标定、抓取规划才能顺下来。