二、运动学基础:刚体运动描述、齐次变换矩阵、正运动学与逆运动学基础
各位同学,今天我们来聊聊运动学基础。这部分内容,说白了就是机器人怎么动、怎么算位置、怎么规划轨迹的数学根基。我做了这么多年机器人,可以负责任地告诉你——这块基础打不牢,后面做轨迹规划、避障、抓取,全都会出问题。
嗯,咱们先从最核心的概念开始。
2.1 刚体运动描述
什么叫刚体?就是不会变形的物体。你想想看,机器人的连杆、关节、末端执行器,在运动过程中我们假设它们不会变形——这就是刚体假设。实际项目中,虽然连杆会有微小形变,但做运动学分析时,我们一律按刚体处理。
刚体在空间中的运动,说白了就是两件事:位置和姿态。位置好理解,就是它在哪;姿态呢,就是它朝哪个方向。
我个人习惯用一个例子来理解:你手里拿着一支笔,笔尖的位置是位置,笔杆的朝向就是姿态。两者合起来,就叫位姿。
核心概念:刚体在三维空间中的自由度是6——3个平移自由度(x, y, z)+ 3个旋转自由度(roll, pitch, yaw)。
描述姿态的方式有好几种:欧拉角、旋转矩阵、四元数。我在项目中遇到过一个问题——用欧拉角做插值时出现了万向锁,导致机器人末端突然反转。那次排查花了我整整两天。后来我建议团队统一用四元数做姿态插值,再也没出过类似问题。
2.2 齐次变换矩阵
好,接下来是重头戏——齐次变换矩阵。这东西,你以后写运动学代码、做轨迹规划,天天都要跟它打交道。
为什么要用齐次变换矩阵?因为我们需要把旋转和平移统一到一个数学框架里。你想想看,如果旋转用矩阵、平移用向量,每次变换都要分开算,多麻烦?齐次变换矩阵把两者合并成一个4×4矩阵,简洁又高效。
它的形式是这样的:
| R t |
| 0 1 |
其中R是3×3旋转矩阵,t是3×1平移向量。最后一行是[0 0 0 1]。
我记得刚入行时,有个老工程师跟我说:「小张,齐次变换矩阵就是机器人的通用语言。」当时不太理解,后来做项目多了才明白——无论你是做正运动学、逆运动学,还是轨迹插值,最后都要落到齐次变换矩阵上。
我的小技巧:写代码时,我习惯把齐次变换矩阵封装成一个类,包含乘法、求逆、从欧拉角构造等方法。这样后面做正运动学链式计算时,代码会非常干净。
齐次变换矩阵的乘法,对应的是坐标系的连续变换。比如从基座到关节1,再到关节2,最后到末端,就是一连串矩阵相乘:
T_末端 = T_01 * T_12 * T_23 * ... * T_(n-1)n
这个链式法则,就是正运动学的核心。
2.3 正运动学
正运动学,说白了就是:已知关节角度,求末端位姿。
这就像你知道了手臂每个关节弯了多少度,然后问手在哪、朝哪个方向。这是个确定性问题——给定输入,输出唯一。
以六轴工业机器人为例,正运动学计算流程是这样的:
- 建立各关节的坐标系(DH参数法)
- 写出相邻关节间的齐次变换矩阵
- 将所有矩阵连乘,得到末端相对于基座的变换矩阵
我在项目中遇到过一件事:有个同事写正运动学代码,算出来的末端位置总是差几毫米。查了半天,发现是DH参数里一个角度符号搞反了。嗯,这种错误很隐蔽,但后果很严重——轨迹全偏了。
避坑指南:我曾经因为DH参数定义不一致,导致正运动学结果和实际机器人对不上。后来我养成了一个习惯——每次写正运动学代码前,先把DH参数表画出来,和机械图纸逐一核对。别嫌麻烦,这一步省不了。
2.4 逆运动学
逆运动学就更有意思了。它是正运动学的反问题:已知末端位姿,求关节角度。
你想想看,这比正运动学难在哪?正运动学是「给什么出什么」,唯一确定。逆运动学呢?同一个末端位姿,可能有多个关节角度解,甚至可能无解。
为什么会这样?因为机器人的关节构型决定了它的工作空间。末端在可达范围内,可能有2个、4个甚至8个解;在范围外,就无解。
常见的逆运动学求解方法有:
- 解析法:对特定构型(如6轴机器人满足Pieper准则)可以推导出封闭解。速度快,适合实时控制。
- 数值法:用迭代方式求解,通用性强但速度慢。适合离线规划。
我个人习惯优先用解析法。为什么?因为实时性要求高的场景,比如焊接、喷涂,数值法那点延迟可能就导致轨迹抖动。但解析法也有局限——不是所有机器人都有解析解。
经验之谈:做轨迹规划时,逆运动学多解问题要特别小心。我一般会加一个「最优解选择」策略——比如选关节角度变化最小的那个解,这样运动更平滑,能耗也更低。
2.5 知识体系总览
下面这张图,是我自己总结的运动学基础知识体系。你可以把它当作本章的「地图」——学完后再回来看,应该会更清晰。
2.6 本章小结
好了,这一章的内容就这些。总结一下:
- 刚体运动描述,核心是位置+姿态,自由度是6
- 齐次变换矩阵,把旋转和平移统一成4×4矩阵,是运动学的通用语言
- 正运动学,已知关节角求末端位姿,唯一确定
- 逆运动学,已知末端位姿求关节角,可能多解或无解
这些内容看起来是纯理论,但实际做轨迹规划时,每一步都离不开它们。我建议你学完这章后,自己动手写一个简单的正运动学代码——哪怕只是一个2连杆机械臂。写一遍,比看十遍都管用。
可可精品资料库