2. 坐标系基础
做机械臂视觉引导,说白了就是让机器人知道「东西在哪儿,我的手在哪儿」。
我刚开始带项目那会儿,总觉得坐标系这玩意儿太理论,直接调参数不就完了?结果第一次联调,机器人抓了个寂寞——爪子直接怼到了工件侧面。后来才明白,坐标系没对齐,后面全是白干。
这一章,咱们把四个核心坐标系和手眼标定彻底捋清楚。
1. 四个核心坐标系
机械臂系统里,坐标系就是「参考基准」。你想想看,没有基准,机器人怎么知道往哪儿走?
| 坐标系 | 定义 | 典型位置 | 我常用的记忆方式 |
|---|---|---|---|
| 基坐标系 | 固定在机器人底座,是整条臂的参考 | 底座安装面中心 | 「机器人的世界原点」 |
| 工具坐标系 | 定义在末端执行器(夹爪、吸盘)上 | 夹爪中心或吸盘中心 | 「手在哪儿,指尖在哪儿」 |
| 相机坐标系 | 以相机光心为原点,Z轴沿光轴方向 | 相机内部光心 | 「眼睛看到的坐标系」 |
| 工件坐标系 | 定义在目标工件上,随工件移动 | 工件特征点(如中心孔) | 「目标在哪儿」 |
关键认知:所有运动指令最终都要换算到基坐标系下执行。相机看到的是像素坐标,机器人要的是基坐标系下的XYZ。中间的桥梁,就是手眼标定。
2. 坐标系变换:从像素到机器人
一个典型的变换链条长这样:
像素坐标 (u,v)
↓ 相机内参
相机坐标系 (Xc, Yc, Zc)
↓ 相机到工具(手眼标定)
工具坐标系 (Xt, Yt, Zt)
↓ 工具到基座(机器人正运动学)
基坐标系 (Xb, Yb, Zb)
每一步都是一个4x4的齐次变换矩阵。我记得第一次手写这个矩阵时,把旋转和平移顺序搞反了,结果机器人画了个大圆弧……嗯,从那以后我再也不敢手算旋转矩阵了,老老实实用库函数。
我的习惯:用 numpy 或 scipy.spatial.transform 处理旋转矩阵。别自己写三角函数,容易翻车。
3. 手眼标定:Eye-in-Hand vs Eye-to-Hand
手眼标定解决的是「相机坐标系」和「机器人坐标系」之间的变换关系。两种主流配置:
- Eye-in-Hand(眼在手上):相机装在机器人末端,跟着爪子走。适合近距离、高精度抓取。
- Eye-to-Hand(眼在手外):相机固定在工作台上方,看全局。适合大范围、多目标场景。
我个人的经验是:如果抓取精度要求<0.5mm,优先用Eye-in-Hand。因为相机离工件近,透视误差小。但要注意,标定板也得跟着换位置,操作起来麻烦一点。
3.1 标定方程
两种配置的标定方程不一样:
| 配置 | 标定方程 | 求解目标 |
|---|---|---|
| Eye-in-Hand | AX = XB | 相机到工具(X) |
| Eye-to-Hand | AX = XB | 相机到基座(X) |
你没看错,方程形式一样,都是AX=XB。但A和B的含义不同。Eye-in-Hand里,A是机器人末端位姿变化,B是相机看到的标定板位姿变化。Eye-to-Hand则反过来。
我曾经踩过的坑:标定过程中,机器人运动范围太小(比如只转了10度),导致方程病态,解出来的矩阵误差巨大。建议至少采集15-20组位姿,且覆盖不同角度(俯仰、偏航各±30°以上)。
4. 手眼标定实操流程
以Eye-in-Hand为例,标准步骤:
- 固定标定板:放在工作台上,确保相机视野内清晰可见。
- 记录机器人位姿:移动机械臂到N个不同位置,记录每个位置的末端位姿(从控制器读出)。
- 记录标定板位姿:在每个位置,用相机拍下标定板,解算出标定板在相机坐标系下的位姿。
- 构建方程:用AX=XB求解工具到相机的变换矩阵。
- 验证:用一组未参与标定的数据验证,重投影误差应<1像素。
验证方法:让机器人末端对准标定板上的某个特征点,用标定结果反算该点在基坐标系下的坐标,与机器人实际读数对比。偏差在1-2mm以内算合格。
5. 知识结构总览
下面这张图,把本章的核心逻辑串起来了:
6. 避坑指南
- 标定板别用反光材质:我试过亚克力板,反光导致角点检测飘移,标定结果直接废了。用磨砂陶瓷或氧化铝板。
- 机器人精度影响标定:如果机器人本身重复定位精度差(比如±0.1mm以上),标定结果上限就被锁死了。先确认机器人精度。
- 相机分辨率别太低:200万像素以下,远距离标定误差会放大。我一般用500万像素工业相机。
- 标定后别动相机:哪怕松了一颗螺丝,标定就失效了。固定好后打螺纹胶。
一个小技巧:标定完成后,在机器人工作空间内随机取5个点,用视觉引导抓取一次。如果每次都准,那标定基本没问题。如果某个方向偏了,检查那个方向上的标定位姿覆盖是否足够。
坐标系和手眼标定,是视觉引导的「地基」。地基没打好,上层算法再漂亮也白搭。我见过太多项目死在标定这一步——不是精度不够,就是标定后松动。嗯,花半天时间把标定做扎实,后面能省一周的调试时间。