第2章 坐标系与运动学基础

各位同学,欢迎来到第二章。这一章,我们要啃下机器人运动控制的「地基」——坐标系和刚体运动描述。

说实话,我见过不少工程师,算法写得飞起,结果在坐标系转换上栽了跟头。有一次调试六轴机器人,末端执行器怎么都碰不到目标点,折腾了两天,最后发现是工具坐标系标定错了0.5毫米。嗯,从那以后,我每次做项目都会先花10分钟确认坐标系。

2.1 三大坐标系:你的机器人「世界观」

机器人运动控制,说白了就是回答三个问题:我在哪?我要去哪?怎么去?坐标系就是回答这些问题的「参考系」。

2.1.1 世界坐标系(World Coordinate System)

世界坐标系是固定不动的「绝对参考系」。通常定义在机器人基座或工作空间的某个固定点。

  • 特点:静止、唯一、全局
  • 用途:描述机器人整体位置、规划全局路径
  • 我个人的习惯:把世界坐标系原点放在机器人基座中心,Z轴竖直向上。这样后续计算最直观。
避坑指南:我曾经在一个焊接项目中,把世界坐标系原点放在了工件边缘。结果每次换工件型号,所有点位都要重新标定。后来统一改到基座中心,一劳永逸。

2.1.2 工具坐标系(Tool Coordinate System, TCS)

工具坐标系附着在机器人末端执行器上。比如焊枪的尖端、夹爪的中心、摄像头的焦点。

  • 特点:随末端移动、局部参考
  • 用途:精确控制工具姿态、实现「工具中心点」(TCP)运动
  • 关键点:TCP标定精度直接影响轨迹精度

你想想看,如果焊枪尖端偏移了1毫米,焊缝可能就偏了。在精密装配中,这直接导致产品报废。

2.1.3 关节坐标系(Joint Coordinate System)

关节坐标系是每个关节自己的「小世界」。每个关节有一个独立的坐标系,描述该关节的旋转或平移。

  • 特点:每个关节独立、角度/位移值直接对应电机编码器读数
  • 用途:底层驱动、正逆运动学计算
  • 注意:关节坐标系下的运动是「非笛卡尔」的,末端轨迹是弧线
我的经验:调试初期,我习惯先用关节坐标系手动移动机器人。因为关节值直接对应电机位置,不容易出现奇异点问题。等路径确认了,再切换到世界坐标系做精细调整。

2.2 刚体运动描述:平移、旋转与齐次变换

坐标系定义好了,接下来要解决的是:如何描述一个刚体从位置A到位置B的运动?

刚体运动包含两部分:平移(位置变化)和旋转(姿态变化)。

2.2.1 平移变换

平移就是「挪个地方」。在三维空间中,平移向量 t = [dx, dy, dz]^T 表示沿X、Y、Z轴分别移动的距离。

// 平移示例:点P从(1,2,3)平移到(4,6,8)
// 平移向量 t = [3, 4, 5]^T
P_new = P_old + t
// 结果:P_new = (1+3, 2+4, 3+5) = (4, 6, 8)

平移很简单,但要注意:平移不改变物体的朝向。你端着咖啡平移,咖啡不会洒——前提是平移过程中没有旋转。

2.2.2 旋转变换

旋转就复杂多了。描述三维旋转,常见的有三种方式:

表示方法 优点 缺点 我的使用场景
旋转矩阵 R (3x3) 直观、易于组合 9个参数,有冗余 理论推导、坐标变换
欧拉角 (α, β, γ) 参数少、物理意义明确 存在万向锁问题 人机交互界面显示
四元数 (q0, q1, q2, q3) 无奇点、插值平滑 不够直观 轨迹插补、姿态平滑
万向锁警告:我曾经用欧拉角做姿态插补,结果在某个中间姿态,机器人突然「抽搐」了一下。查了半天,发现是欧拉角遇到了万向锁——两个旋转轴重合了。从那以后,内部计算我全部改用四元数。

旋转矩阵的基本形式(绕Z轴旋转θ角):

R_z(θ) = [cosθ  -sinθ  0]
         [sinθ   cosθ  0]
         [0      0     1]

绕X轴和Y轴的旋转矩阵类似,只是把cos和sin放在对应位置。

2.2.3 齐次变换矩阵

平移和旋转分开处理太麻烦。能不能用一个矩阵同时搞定?齐次变换矩阵就是干这个的。

齐次变换矩阵 T 是4x4矩阵:

T = [R   t]
    [0   1]

其中:
R: 3x3 旋转矩阵
t: 3x1 平移向量
0: 1x3 零向量
1: 标量 1

使用齐次坐标,一个点 P = [x, y, z, 1]^T,变换后:

P' = T * P

一次矩阵乘法,同时完成旋转和平移。是不是很优雅?

核心思想:齐次变换矩阵把「旋转+平移」封装成一个操作。在机器人运动学中,从基座到末端的整个运动链,就是一系列齐次变换矩阵的乘积。

2.3 坐标系变换的「链式法则」

实际机器人系统中,坐标系是层层嵌套的:

  • 世界坐标系 → 机器人基座坐标系
  • 机器人基座坐标系 → 关节1坐标系
  • 关节1坐标系 → 关节2坐标系
  • ...
  • 关节6坐标系 → 工具坐标系

从世界坐标系到工具坐标系的变换,就是这些矩阵的乘积:

T_world_to_tool = T_world_to_base * T_base_to_j1 * T_j1_to_j2 * ... * T_j6_to_tool

这就是机器人正运动学的数学基础。每个 T 矩阵描述了相邻坐标系之间的相对位姿。

调试技巧:我写运动学代码时,会先打印每个关节的变换矩阵,然后手动验证乘积结果。比如让所有关节归零,检查末端位置是否在理论值附近。这一步能发现90%的坐标系定义错误。

2.4 本章知识体系

下面这张图,是我自己总结的坐标系与运动学基础的知识结构。建议你保存下来,每次做项目前看一眼。

坐标系与运动学基础 - 知识体系 三大坐标系 世界坐标系 工具坐标系 关节坐标系 刚体运动描述 平移变换 旋转变换 齐次变换矩阵 旋转表示方法 旋转矩阵 (3x3) 欧拉角 (α,β,γ) 四元数 (q0,q1,q2,q3) 应用:正运动学链式法则 T_world_to_tool = T1 * T2 * T3 * ... * Tn

2.5 本章小结

这一章的内容,是后续所有轨迹插补算法的基础。你想想看,如果连坐标系都没搞清楚,后面做路径规划、速度规划、加速度规划,那不都是空中楼阁吗?

我个人建议你花时间把齐次变换矩阵的乘法练熟。刚开始可能会觉得矩阵运算很枯燥,但当你看到机器人按照你的计算精确运动时,那种成就感——嗯,值得。

下一章,我们会进入正运动学,把今天学的坐标系变换应用到实际的机器人结构上。到时候你会发现,今天打下的基础,会帮你省下大量调试时间。


专注资料整理