3. 坐标系与变换:世界坐标系、工具坐标系、用户坐标系,齐次变换矩阵(旋转+平移)
坐标系这东西,说白了就是给机器人一个「空间感」。没有坐标系,你告诉它「往右走 10 厘米」,它根本不知道「右」是哪个方向。我刚开始接触运动控制时,总觉得坐标系是个纯理论概念,直到有一次调试六轴机械臂,因为工具坐标系没标定,夹爪直接怼到了工件上……嗯,从那以后我再也不敢小看坐标系了。
3.1 为什么需要多个坐标系?
你想想看,一个机器人系统里,有底座、有关节、有末端执行器,还有工作台上的工件。如果只用一套坐标系描述所有东西,计算会变得非常混乱。比如:
- 世界坐标系:固定在机器人底座或车间地面,是全局参考。
- 工具坐标系:固定在机器人末端(比如焊枪尖、夹爪中心),描述工具的位置和姿态。
- 用户坐标系:由用户自定义,通常贴在工作台或工件上,方便编程。
我个人习惯把世界坐标系当作「绝对原点」,其他坐标系都是相对于它定义的。这样,无论机器人怎么动,我都能知道工具相对于工件的精确位置。
核心概念:坐标系变换的本质,就是把一个点在一个坐标系下的坐标,转换到另一个坐标系下。这个转换靠的就是齐次变换矩阵。
3.2 齐次变换矩阵:旋转 + 平移
齐次变换矩阵是一个 4×4 的方阵,它把旋转和平移打包在一起。为什么是 4×4?因为 3×3 的旋转矩阵只能处理旋转,平移需要单独加一个向量。齐次坐标(加一个 1 变成 4 维向量)让旋转和平移可以统一用矩阵乘法完成。
它的标准形式长这样:
| R11 R12 R13 Tx |
| R21 R22 R23 Ty |
| R31 R32 R33 Tz |
| 0 0 0 1 |
左上角 3×3 是旋转矩阵 R,右上角 3×1 是平移向量 T。最后一行固定是 [0 0 0 1],这是齐次坐标的约定。
3.3 旋转矩阵的三种基本形式
旋转矩阵是正交矩阵,行列式为 +1。绕 X、Y、Z 轴旋转 θ 角的基本矩阵如下:
| 旋转轴 | 旋转矩阵 R(θ) |
|---|---|
| 绕 X 轴 |
|
| 绕 Y 轴 |
|
| 绕 Z 轴 |
|
我的经验:实际项目中很少直接手算旋转矩阵,都是用工具库(比如 Eigen、ROS 的 tf2)自动生成。但你必须理解它的几何意义——每一列代表旋转后新坐标系的基向量在原坐标系下的投影。
3.4 齐次变换的链式法则
假设你有两个坐标系:{A} 和 {B}。已知 {B} 相对于 {A} 的变换矩阵为 ATB,那么 {B} 中的点 BP 转换到 {A} 中的坐标就是:
AP = ATB · BP
如果还有第三个坐标系 {C},那么:
ATC = ATB · BTC
这就是链式法则。我调试机器人时,经常用这个法则把工具坐标系、用户坐标系串联到世界坐标系下。比如:
- 世界 → 机器人底座(固定)
- 机器人底座 → 机器人末端(由运动学计算)
- 机器人末端 → 工具(标定得到)
- 世界 → 工件(用户坐标系)
最终,工具相对于工件的位姿就是这些矩阵的乘积。
3.5 逆变换:从目标回到原点
有时候我们需要反过来求——已知 ATB,想求 BTA。逆变换矩阵可以直接计算:
BTA = (ATB)-1 =
| RT -RT·T |
| 0 0 0 1 |
其中 RT 是旋转矩阵的转置(因为旋转矩阵是正交矩阵,逆等于转置),-RT·T 是平移部分的逆变换。
避坑指南:我曾经在项目中直接用矩阵求逆函数算变换矩阵,结果因为浮点误差导致旋转矩阵不再正交,后续计算全偏了。建议用上面的解析公式,或者对求逆结果做正交化处理。
3.6 知识体系总览
下面这张图把本章的核心逻辑串起来了。你可以看到,世界坐标系是根,工具坐标系和用户坐标系都通过齐次变换矩阵与它关联。链式法则让我们可以在任意坐标系之间跳转。
3.7 实际项目中的应用
我记得有一次做焊接机器人离线编程,工件放在一个倾斜的夹具上。如果直接用世界坐标系编程,每条焊缝都要算半天。后来我定义了一个用户坐标系,让 Z 轴垂直于工件表面。这样一来,焊缝轨迹就变成了简单的直线或圆弧,代码量减少 70%。
具体步骤是:
- 在工件上选三个点(原点、X 轴方向点、XY 平面内一点)
- 用这三个点构造用户坐标系相对于世界坐标系的变换矩阵
- 所有轨迹点都在用户坐标系下描述
- 运行时通过齐次变换矩阵自动转换到世界坐标系
小技巧:标定工具坐标系时,可以用「四点法」——让工具尖点从四个不同方向触碰同一个固定点,然后解算工具中心点(TCP)相对于机器人法兰盘的偏移。我一般至少测六组数据,用最小二乘法拟合,精度能到 0.1mm 以内。
3.8 常见误区与避坑
- 旋转顺序:绕 X→Y→Z 和绕 Z→Y→X 结果完全不同。我习惯用 ZYX 欧拉角(先绕 Z,再绕 Y,最后绕 X),因为跟大多数工业机器人的关节配置一致。
- 矩阵乘法顺序:左乘和右乘意义不同。左乘是相对于固定坐标系变换,右乘是相对于当前坐标系变换。搞反了,机器人会跑到天上去。
- 单位问题:平移向量的单位必须统一。我见过有人把毫米和米混在一起,结果机器人差点撞墙。
血的教训:有一次我在现场调试,工具坐标系标定完后忘了保存,断电重启后机器人直接按默认坐标系运动,夹爪把旁边的传感器撞碎了。从那以后,我每次标定完都会把变换矩阵备份到非易失存储区,并且上电后做一次校验。