2、运动学基础(一):坐标系建立与刚体运动描述
各位同学,欢迎来到运动学基础的第一讲。说实话,很多刚入行的工程师觉得运动学就是一堆数学公式,离实际编程很远。但我告诉你,坐标系没搞明白,后面做协同控制一定会踩坑。我自己就吃过这个亏,所以今天咱们把基础打扎实。
2.1 为什么要建立坐标系?
想象一下,你让龙门机器人去抓一个工件。如果没有坐标系,你怎么告诉它「往左10厘米,再往前5厘米」?说白了,坐标系就是机器人的「空间语言」。
在工业机器人领域,我们通常需要三个层次的坐标系:
- 世界坐标系:固定在机器人基座或车间地面的绝对参考系
- 工具坐标系:固定在机器人末端执行器(比如夹爪、焊枪)上的坐标系
- 工件坐标系:固定在被加工工件上的坐标系
这三个坐标系之间可以互相转换。嗯,这里要注意:所有运动指令最终都要换算到世界坐标系下执行。
2.2 世界坐标系(World Coordinate System)
世界坐标系是「老大」。它通常定义在机器人的安装基座上,或者车间的某个固定位置。我习惯把世界坐标系的原点设在龙门机器人的几何中心,这样正负方向的运动对称,调试起来方便。
对于龙门机器人,世界坐标系一般这样定义:
- X轴:龙门横梁方向(左右运动)
- Y轴:龙门纵梁方向(前后运动)
- Z轴:垂直方向(上下运动)
你想想看,这其实就是笛卡尔坐标系。但要注意,世界坐标系一旦建立,就不要轻易改动。我曾经在一个项目中,因为现场布局调整,把世界坐标系挪了位置,结果所有示教点都要重新标定,那叫一个痛苦。
2.3 工具坐标系(Tool Coordinate System)
工具坐标系是「干活的手」。它固定在机器人末端,原点通常在工具中心点(TCP,Tool Center Point)。
为什么要单独定义工具坐标系?举个例子:
你换了一个不同长度的夹爪,如果直接用世界坐标系编程,所有点位都要重新算。但如果你定义了工具坐标系,只需要更新TCP的偏移量,程序不用改。这就是「一次编程,多工具复用」的思路。
核心概念:TCP(工具中心点)
TCP是工具坐标系的原点,也是机器人实际执行动作的点。比如焊接机器人的TCP在焊丝尖端,涂胶机器人的TCP在胶嘴出口。
标定TCP的方法有很多,我常用的是一种简单粗暴的方式:
- 把工具尖端对准一个固定尖点(比如锥形标定块)
- 从四个不同姿态去对准同一个点
- 控制器自动解算出TCP位置
我记得第一次做TCP标定时,怎么都对不准,后来发现是工具安装有松动。所以,标定前务必检查机械连接的刚性。
2.4 工件坐标系(Work Object Coordinate System)
工件坐标系是「被加工的东西」。它定义在工件上,随工件移动而移动。
为什么要用工件坐标系?你想想看,如果传送带上的工件位置有偏差,你总不能每次都重新示教所有点位吧?有了工件坐标系,你只需要测量工件的实际位置,更新坐标系偏移,所有路径自动跟着走。
在实际项目中,我通常这样处理:
- 用视觉系统识别工件位置
- 将识别结果转换为工件坐标系偏移量
- 机器人自动调整路径
说白了,工件坐标系就是让机器人「跟着工件走」的魔法。
2.5 刚体运动描述:位置与姿态
好了,坐标系建立完了,接下来要描述刚体(比如机器人末端)在空间中的运动。这需要两个信息:位置和姿态。
2.5.1 位置描述
位置很简单,就是三个坐标值 (x, y, z)。比如:
// 位置向量示例
P = [500, 200, 300] // 单位:mm
这表示在X方向500mm,Y方向200mm,Z方向300mm处。
2.5.2 姿态描述
姿态就复杂一些了。它描述的是刚体「朝哪个方向」。比如一个夹爪,它可以正着抓,也可以斜着抓,这就是姿态不同。
描述姿态的方法有很多,今天我们先讲最基础的——旋转矩阵。
2.6 旋转矩阵(Rotation Matrix)
旋转矩阵是一个3×3的矩阵,它描述了从一个坐标系到另一个坐标系的旋转关系。
比如,绕Z轴旋转θ角度的旋转矩阵是:
Rz(θ) = [cosθ -sinθ 0]
[sinθ cosθ 0]
[0 0 1]
绕X轴和Y轴的类似,我就不列了,大家查手册就行。
为什么要用矩阵?因为矩阵可以「串联」。你想让机器人先绕X轴转30°,再绕Y轴转45°,直接把两个旋转矩阵相乘就行:
R = Ry(45°) * Rx(30°)
注意顺序!矩阵乘法不满足交换律,先转后转结果不一样。我见过太多新手在这里翻车了。
个人经验: 调试时如果发现机器人姿态不对,先检查旋转顺序。我一般会在代码里把每一步的旋转矩阵打印出来,肉眼检查一遍。
2.7 完整位姿描述
位置+姿态 = 位姿。通常用一个4×4的齐次变换矩阵来表示:
T = [R P]
[0 1]
其中R是3×3旋转矩阵,P是3×1位置向量。最后一行是[0 0 0 1],这是齐次坐标的固定格式。
举个例子,一个完整的位姿可能是:
T = [0.866 -0.5 0 500]
[0.5 0.866 0 200]
[0 0 1 300]
[0 0 0 1 ]
这表示:位置在(500, 200, 300),并且绕Z轴旋转了30°。
2.8 本章知识体系
下面我用一张图来总结本章的核心逻辑:
2.9 避坑指南
我曾经踩过的坑:
- 坐标系单位不统一:有的用mm,有的用m,结果机器人撞了。建议全项目统一用mm。
- 旋转矩阵顺序搞反:先绕X再绕Y,和先绕Y再绕X,结果完全不同。一定要确认控制器的默认顺序。
- TCP标定不准:工具稍微松动一点,末端误差可能放大到几毫米。定期重新标定是必要的。
好了,这一章的内容就到这里。坐标系和旋转矩阵是运动学的「地基」,后面讲正逆解、轨迹规划都离不开它们。建议你动手画一画坐标系,写一写旋转矩阵的乘法,光看是记不住的。