2、常见坐标系:世界坐标系、机器人基坐标系、工具坐标系、相机坐标系
做机器人或者自动驾驶的,天天跟坐标系打交道。说白了,坐标变换就是不同坐标系之间的“翻译”工作。你想想看,机器人要抓个杯子,相机看到了杯子在哪,但机器人得用自己的“手”去抓,这中间就得把相机看到的坐标,翻译成机器人手臂能理解的坐标。
我个人习惯把坐标系分成四类:世界坐标系、机器人基坐标系、工具坐标系、相机坐标系。这四类搞明白了,日志排查时你就能快速定位问题出在哪个环节。
2.1 世界坐标系(World Frame)
世界坐标系,你可以理解为整个场景的“绝对参考系”。它固定在地面上,所有其他坐标系都相对于它来定义。
特点:
- 固定不动,不随机器人运动而改变
- 通常定义在机器人安装底座的中心,或者房间的某个角落
- 单位一般是米(m)
我在项目中遇到过:有一次调试移动机器人,发现定位数据总是跳变。查了半天,原来是世界坐标系的原点定义在了机器人初始位置,但机器人一移动,原点也跟着跑了。嗯,这其实就变成了“移动坐标系”,不是真正的世界坐标系了。
避坑指南:世界坐标系一定要选一个物理上固定的点。比如工厂地面上的某个标记点,或者建筑墙角。别偷懒用机器人启动时的位置。
2.2 机器人基坐标系(Base Frame)
机器人基坐标系,固定在机器人底座上。它是机器人自身的“根坐标系”。所有关节的运动学计算,最终都要回到这个坐标系。
特点:
- Z轴通常竖直向上(符合机器人行业惯例)
- 原点在机器人底座安装面的中心
- 机器人出厂时,这个坐标系就定死了
为什么重要?因为机器人控制器内部的所有运动学正解、逆解,都是基于基坐标系算的。如果你给机器人发一个目标位姿,它默认就是在基坐标系下的。
我的小技巧:日志里看到机器人末端位姿时,先确认它是相对于哪个坐标系的。很多新手直接拿基坐标系下的位姿去跟相机数据对比,结果对不上。我建议你养成习惯:日志里每个位姿数据,都带上坐标系标签。
2.3 工具坐标系(Tool Frame)
工具坐标系,定义在机器人末端执行器上。比如焊枪的尖端、夹爪的中心、吸盘的中心点。
特点:
- 随机器人末端运动而运动
- 原点通常在工具的工作点(TCP,Tool Center Point)
- Z轴方向一般指向工具的工作方向
我曾经:遇到过一个很隐蔽的bug。机器人抓取零件时,位置总是偏几毫米。查日志发现,工具坐标系的TCP标定数据里,Z轴偏移写成了正数,但实际应该是负数。就这么一个符号错误,折腾了我一整天。
警告:工具坐标系标定一定要做“四点法”或“六点法”验证。别相信一次标定就完事。我见过太多因为工具磨损、更换后忘记重新标定导致的坐标变换错误。
2.4 相机坐标系(Camera Frame)
相机坐标系,定义在相机的光学中心。它是视觉系统自己的“小世界”。
特点:
- Z轴指向相机前方(沿着光轴方向)
- X轴向右,Y轴向下(图像坐标系的方向)
- 单位也是米,但相机内部计算时常用像素
为什么容易出错?因为相机坐标系跟机器人坐标系的方向往往不一致。相机Z轴朝前,机器人Z轴朝上。你想想看,直接把相机测到的坐标发给机器人,那肯定乱套。
核心要点:相机坐标系到机器人基坐标系的变换,就是“手眼标定”要解决的问题。日志里如果看到相机数据直接用了,没经过变换矩阵,那十有八九是错的。
2.5 四个坐标系的关系图
下面这张图,我画了四个坐标系之间的典型关系。你排查日志时,可以对照这张图,看看数据流走到哪一步断了。
这张图里,T_world_base 是世界到基坐标系的变换,T_base_tool 是基到工具的变换,T_base_cam 是基到相机的变换。日志里你看到的数据,最终都要能串联成一条完整的变换链。
2.6 日志排查时的常见错误
根据我的经验,日志里跟坐标系相关的错误,主要有这么几类:
| 错误类型 | 日志表现 | 可能原因 |
|---|---|---|
| 坐标系混淆 | 位姿数据数值异常大或小 | 把相机坐标系下的数据当成了基坐标系下的 |
| 变换矩阵缺失 | 数据直接透传,没有经过矩阵乘法 | 忘了做手眼标定,或者标定结果没加载 |
| 符号错误 | 位置偏差正好是某个轴的反方向 | 变换矩阵里的平移向量符号写反了 |
| 单位不一致 | 数值差1000倍 | 相机输出毫米,机器人用米,没做单位转换 |
我的排查习惯:拿到日志后,先看数据有没有经过变换矩阵。如果看到相机原始数据直接赋值给了机器人目标位姿,那基本可以断定问题出在这里。我会在代码里加一行打印,把变换前后的数据都输出,一对比就清楚了。
嗯,这四个坐标系,你搞清楚了,日志排查时就能快速定位是哪个环节出了问题。别小看这些基础概念,我见过太多工程师在坐标变换上栽跟头。记住一句话:数据流到哪里,坐标系就要跟到哪里。