2. 运动学基础(上):空间坐标系与变换、刚体姿态描述(欧拉角、四元数)、位置与姿态的齐次变换矩阵
各位工程师朋友,大家好。欢迎来到《并联机构鲁棒控制与抗干扰实战》的第二讲。
今天咱们聊聊运动学基础。说实话,这部分内容看起来有点“数学”,但它是整个控制系统的地基。你想想看,如果连机器人的胳膊腿在哪儿、朝哪个方向都说不清楚,那后面的控制算法再漂亮也是空中楼阁。
我个人习惯,在开始任何控制项目之前,先把运动学模型搞得明明白白。这一步省不了,也急不得。
2.1 空间坐标系:给机器人一个“家”
并联机构里,我们至少需要两个坐标系:一个是固定不动的世界坐标系(也叫基坐标系),另一个是绑在动平台上的动坐标系。
为什么要这么搞?说白了,就是要把“机器人的运动”翻译成“数学能算的数值”。
- 世界坐标系 {B}:固定在地面或机架上。所有绝对位置和姿态的参考基准。
- 动坐标系 {P}:固定在动平台上。描述动平台自身的“局部视角”。
我在项目中遇到过一个问题:有个同事把两个坐标系搞反了,结果动平台往左走,传感器读数却显示往右。嗯,这种低级错误,排查起来特别费时间。所以一开始就要把坐标系定义清楚,写在文档里,贴在墙上。
2.2 刚体姿态描述:光有位置不够
位置好办,三个坐标 (x, y, z) 就搞定了。但姿态呢?动平台是歪着的、斜着的、还是转了个圈?这就需要专门的数学工具了。
常用的有三种方法:旋转矩阵、欧拉角、四元数。我一个个说。
2.2.1 旋转矩阵
旋转矩阵是一个 3x3 的正交矩阵。它最直观,但参数多(9个),而且有约束条件(行列式为+1)。
说实话,在控制代码里我很少直接用旋转矩阵做实时运算,太占资源。但它作为理论推导的桥梁,非常有用。
// 绕Z轴旋转θ角的旋转矩阵(C语言风格伪代码)
// R_z(θ) = [cosθ, -sinθ, 0;
// sinθ, cosθ, 0;
// 0, 0, 1]
2.2.2 欧拉角
欧拉角用三个角度(比如滚转、俯仰、偏航)来描述姿态。这很符合人类的直觉。
但是!欧拉角有个著名的“万向锁”问题。当第二个角度达到 ±90° 时,第一个和第三个轴会重合,丢失一个自由度。
2.2.3 四元数
四元数是我个人最喜欢的姿态描述方式。它用一个四维向量 (w, x, y, z) 来表示旋转,没有奇点,插值平滑,计算效率高。
你可能会问:“为什么是四个数?” 嗯,你可以把它理解成“一个旋转轴 + 一个旋转角度”的紧凑表示。轴是三维的,角度是一维的,加起来就是四维。
// 四元数基本运算(Python风格)
// 定义:q = w + x*i + y*j + z*k
// 单位四元数:w^2 + x^2 + y^2 + z^2 = 1
// 两个四元数相乘(表示旋转的复合)
def quaternion_multiply(q1, q2):
w1, x1, y1, z1 = q1
w2, x2, y2, z2 = q2
w = w1*w2 - x1*x2 - y1*y2 - z1*z2
x = w1*x2 + x1*w2 + y1*z2 - z1*y2
y = w1*y2 - x1*z2 + y1*w2 + z1*x2
z = w1*z2 + x1*y2 - y1*x2 + z1*w2
return (w, x, y, z)
2.3 齐次变换矩阵:位置+姿态,一网打尽
有了位置和姿态,怎么把它们组合起来?答案就是齐次变换矩阵。
它是一个 4x4 的矩阵。左上角 3x3 是旋转矩阵(或四元数转换来的旋转矩阵),右上角 3x1 是位置向量,最后一行是 [0 0 0 1]。
// 齐次变换矩阵 T 的结构
// T = | R p |
// | 0 1 |
//
// 其中 R 是 3x3 旋转矩阵
// p 是 3x1 位置向量
// 示例:从动坐标系 {P} 到世界坐标系 {B} 的变换
// 假设动系原点在世界系中的位置为 (1, 2, 3)
// 动系相对于世界系的姿态为绕Z轴转30度
// 则变换矩阵为:
// T_BP = [cos30, -sin30, 0, 1;
// sin30, cos30, 0, 2;
// 0, 0, 1, 3;
// 0, 0, 0, 1]
有了这个矩阵,我们就可以把动平台上的任意一点,轻松地转换到世界坐标系下。反过来,也可以把世界坐标系下的指令,转换到动平台坐标系下执行。
2.4 知识体系总览
说了这么多,我画了一张图,帮你把今天的内容串起来。这张图展示了从“物理世界”到“数学表达”的完整映射关系。
2.5 实战中的选择建议
好了,理论讲完了。咱们来点实际的。在并联机构控制中,到底该用哪种方法?
| 应用场景 | 推荐方法 | 理由 |
|---|---|---|
| 运动学建模与推导 | 旋转矩阵 | 公式推导清晰,便于理解几何关系 |
| 人机交互 / 示教 | 欧拉角 | 符合人类直觉,方便手动输入角度 |
| 实时控制 / 轨迹规划 | 四元数 | 无奇点,插值平滑,计算效率高 |
| 坐标变换 / 数据传递 | 齐次变换矩阵 | 统一封装位置和姿态,接口清晰 |
嗯,今天的内容就到这里。运动学基础是后续所有控制算法的基石。你花时间把它搞透,后面学动力学、学鲁棒控制,就会顺畅很多。