第一章 坐标系与运动学基础
各位同学,咱们今天聊聊运动控制里最基础、也最绕不开的东西——坐标系和运动学。
说实话,我见过不少工程师,算法调得挺溜,但一碰到坐标系变换就懵了。嗯,这其实很正常。我自己刚入行那会儿,也在这上面栽过跟头。有一次调试六轴机器人,死活走不准直线,折腾了两天,最后发现是正逆运动学里一个符号搞反了。从那以后,我就养成了一个习惯:先花半小时把坐标系理清楚,再动手写代码。
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 实战中的坐标系选择
讲完理论,咱们聊聊实际项目中怎么选。
我个人总结了一个简单的原则:
| 场景 | 推荐坐标系 | 原因 |
|---|---|---|
| 单轴运动 | 关节坐标系 | 直接控制电机,效率高 |
| 直线插补 | 笛卡尔坐标系 | 路径直观,精度可控 |
| 圆弧插补 | 笛卡尔坐标系 | 便于描述圆弧参数 |
| 多轴协同 | 混合使用 | 关节空间规划,笛卡尔空间插补 |
你想想看,如果做直线插补还用关节坐标系,那路径会是什么样?每个关节单独走,末端走的根本不是直线,而是弧线。这就是为什么笛卡尔坐标系在轨迹规划里这么重要。
本章核心要点:
- 关节坐标系和笛卡尔坐标系是运动控制的两大基石
- 正运动学简单,逆运动学复杂,需要处理多解和奇异点
- 齐次变换矩阵是坐标系变换的通用工具,务必熟练掌握
- 实际项目中,根据场景灵活选择坐标系
好了,第一章就到这里。坐标系和运动学这东西,光看理论是不够的。我建议你找个机器人仿真软件,或者自己写个小程序,把正逆运动学跑一遍。亲手算一算,比看十遍书都管用。