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

各位同学,咱们今天聊聊运动控制里最基础、也最绕不开的东西——坐标系和运动学。

说实话,我见过不少工程师,算法调得挺溜,但一碰到坐标系变换就懵了。嗯,这其实很正常。我自己刚入行那会儿,也在这上面栽过跟头。有一次调试六轴机器人,死活走不准直线,折腾了两天,最后发现是正逆运动学里一个符号搞反了。从那以后,我就养成了一个习惯:先花半小时把坐标系理清楚,再动手写代码。

1.1 关节坐标系与笛卡尔坐标系

先说说这两个坐标系到底是个啥。

关节坐标系,说白了就是每个电机轴自己的角度或位置。比如一个六轴机器人,关节坐标系就是 J1、J2、J3、J4、J5、J6 这六个角度值。你想想看,每个电机转多少度,这就是关节空间的事。

笛卡尔坐标系呢,就是我们熟悉的 XYZ 直角坐标,再加上绕三个轴的旋转(Rx、Ry、Rz)。它描述的是末端执行器在空间里的位置和姿态。

为什么要区分这两个?

我举个例子。你在示教器上让机器人末端走一条直线,你输入的是笛卡尔坐标。但机器人内部怎么执行?它得把笛卡尔坐标换算成每个关节的角度,然后让电机转过去。这就是两个坐标系之间的桥梁。

核心区别一句话总结:

  • 关节坐标系:电机角度,控制简单,但路径不直观
  • 笛卡尔坐标系:空间位置,路径直观,但计算复杂

1.2 正运动学与逆运动学

好,坐标系搞清楚了,接下来就是怎么在两个空间之间来回切换。

正运动学:已知关节角度,求末端位姿。

这个相对简单。你给每个关节一个角度,通过几何关系或者矩阵乘法,就能算出末端在哪儿。我在项目中一般用齐次变换矩阵连乘,一步到位。

逆运动学:已知末端位姿,求关节角度。

这个就有点意思了。它通常不是唯一的解,甚至可能无解。比如一个六轴机器人,同一个末端位置,可能有八组关节角度都能达到。你想想看,选哪一组?

我个人的习惯是:

  • 优先选关节运动量最小的那组解
  • 避开奇异点附近的解
  • 考虑关节限位,别让电机撞到硬限位

避坑指南:

我曾经在一个项目中,逆运动学算出来的角度明明在限位内,但实际跑起来却撞到了机械限位。后来发现,是我忽略了关节的软限位和硬限位之间的缓冲区域。嗯,这里要注意,算出来的角度一定要留 3-5 度的安全余量。

1.3 齐次变换矩阵

说到坐标系变换,就绕不开齐次变换矩阵。这东西说白了就是一个 4x4 的矩阵,把旋转和平移打包在一起处理。

它的标准形式长这样:

| R11  R12  R13  Tx |
| R21  R22  R23  Ty |
| R31  R32  R33  Tz |
|  0    0    0    1  |

左上角 3x3 是旋转矩阵,右上角 3x1 是平移向量。最后一行固定是 [0 0 0 1]。

为什么用 4x4 而不是 3x4?

因为矩阵乘法要求维度匹配。用 4x4 的好处是,你可以把多个变换连乘在一起,一次算出最终结果。比如一个六轴机器人,从基座到末端,就是六个齐次变换矩阵的乘积。

实用技巧:

我建议你在代码里把齐次变换矩阵封装成一个类或者结构体。这样写正运动学的时候,代码会非常干净。我自己常用的接口就四个:

  • 平移矩阵:trans(x, y, z)
  • 绕X轴旋转:rotX(theta)
  • 绕Y轴旋转:rotY(theta)
  • 绕Z轴旋转:rotZ(theta)

然后正运动学就是一连串的矩阵乘法,清晰又好调试。

1.4 知识体系总览

下面这张图,是我自己总结的本章知识结构。你把它记在脑子里,后面学起来会轻松很多。

坐标系与运动学基础 - 知识体系 坐标系 关节坐标系 笛卡尔坐标系 运动学 正运动学 逆运动学 数学工具:齐次变换矩阵 应用:机器人轨迹规划、位姿插补、碰撞检测

1.5 实战中的坐标系选择

讲完理论,咱们聊聊实际项目中怎么选。

我个人总结了一个简单的原则:

场景 推荐坐标系 原因
单轴运动 关节坐标系 直接控制电机,效率高
直线插补 笛卡尔坐标系 路径直观,精度可控
圆弧插补 笛卡尔坐标系 便于描述圆弧参数
多轴协同 混合使用 关节空间规划,笛卡尔空间插补

你想想看,如果做直线插补还用关节坐标系,那路径会是什么样?每个关节单独走,末端走的根本不是直线,而是弧线。这就是为什么笛卡尔坐标系在轨迹规划里这么重要。

本章核心要点:

  1. 关节坐标系和笛卡尔坐标系是运动控制的两大基石
  2. 正运动学简单,逆运动学复杂,需要处理多解和奇异点
  3. 齐次变换矩阵是坐标系变换的通用工具,务必熟练掌握
  4. 实际项目中,根据场景灵活选择坐标系

好了,第一章就到这里。坐标系和运动学这东西,光看理论是不够的。我建议你找个机器人仿真软件,或者自己写个小程序,把正逆运动学跑一遍。亲手算一算,比看十遍书都管用。


专注资料整理