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 知识体系总览

说了这么多,我画了一张图,帮你把今天的内容串起来。这张图展示了从“物理世界”到“数学表达”的完整映射关系。

运动学基础(上):知识体系结构图 物理世界 并联机构动平台 → 刚体运动(位置 + 姿态) 数学抽象 位置向量 (x, y, z) 姿态描述 齐次变换矩阵 (4x4) 姿态描述方法(三选一) 旋转矩阵 (3x3) 直观,但参数冗余 欧拉角 (α, β, γ) 有万向锁风险 四元数 (w, x, y, z) 无奇点,适合控制 应用:运动学正解 / 逆解 / 雅可比矩阵

2.5 实战中的选择建议

好了,理论讲完了。咱们来点实际的。在并联机构控制中,到底该用哪种方法?

应用场景 推荐方法 理由
运动学建模与推导 旋转矩阵 公式推导清晰,便于理解几何关系
人机交互 / 示教 欧拉角 符合人类直觉,方便手动输入角度
实时控制 / 轨迹规划 四元数 无奇点,插值平滑,计算效率高
坐标变换 / 数据传递 齐次变换矩阵 统一封装位置和姿态,接口清晰
一个小技巧: 我在写控制代码时,会定义一个统一的“姿态”结构体,里面同时包含四元数和欧拉角。内部运算全用四元数,但提供一个转换函数,随时可以输出欧拉角给调试界面看。这样两全其美。

嗯,今天的内容就到这里。运动学基础是后续所有控制算法的基石。你花时间把它搞透,后面学动力学、学鲁棒控制,就会顺畅很多。


专注资料整理