2. 运动学基础:刚体运动描述、旋转矩阵、欧拉角、齐次变换矩阵

各位同学,咱们今天聊点硬核的——刚体运动描述。说实话,我刚入行那会儿,觉得这东西就是一堆数学公式堆砌,没啥意思。直到有一次做六自由度平台的控制算法,发现平台死活转不到我想要的角度……嗯,从那以后,我老老实实把旋转矩阵和欧拉角的关系捋了一遍。

说白了,Stewart平台的核心就是控制上平台相对于下平台的位置和姿态。位置好办,三个坐标(x, y, z)就搞定了。但姿态呢?怎么描述一个刚体在空间里「转」了多少?这就是我们今天要啃的骨头。

2.1 刚体运动的两种描述

刚体运动,说白了就是「平移+旋转」。平移简单,三个数搞定。旋转呢?我见过很多新手一上来就问:「老师,旋转到底用欧拉角还是四元数?」我的回答是:先搞懂旋转矩阵,其他的都是它的变种。

刚体在三维空间中的位姿,可以用一个位置向量 p 和一个旋转矩阵 R 来表示。位置向量描述「在哪」,旋转矩阵描述「朝向」。这两者合起来,就是一个刚体的完整状态。

核心公式:刚体上任意一点 P 在基坐标系中的坐标,等于旋转矩阵乘以该点在体坐标系中的坐标,再加上体坐标系原点在基坐标系中的位置。

P_base = R * P_body + p_origin

我在做平台标定时,经常用这个公式反推传感器的安装误差。你想想看,如果已知两个坐标系下同一个点的坐标,就能把旋转矩阵和位置解出来——这就是手眼标定的基本原理。

2.2 旋转矩阵:绕坐标轴的旋转

旋转矩阵是一个 3x3 的正交矩阵,行列式为 +1。什么意思呢?就是它只负责「转」,不负责「拉长」或「压缩」向量。我习惯把它理解成:一个向量乘以旋转矩阵,长度不变,方向变了。

最基本的旋转是绕坐标轴转。绕 X 轴、Y 轴、Z 轴的旋转矩阵长这样:

# 绕 X 轴旋转角度 θ
R_x(θ) = [[1,      0,       0],
          [0,  cos(θ), -sin(θ)],
          [0,  sin(θ),  cos(θ)]]

# 绕 Y 轴旋转角度 θ
R_y(θ) = [[ cos(θ), 0, sin(θ)],
          [      0, 1,      0],
          [-sin(θ), 0, cos(θ)]]

# 绕 Z 轴旋转角度 θ
R_z(θ) = [[cos(θ), -sin(θ), 0],
          [sin(θ),  cos(θ), 0],
          [     0,       0, 1]]

注意看符号!我当年就栽在这个坑里——绕 Y 轴的旋转矩阵,左下角是负号,右上角是正号,跟绕 X 和 Z 轴正好相反。为什么?因为右手坐标系下,Y 轴的方向跟另外两个轴不同。你拿右手比划一下就能明白。

我的小技巧:记不住符号?用右手定则。拇指指向旋转轴正方向,四指弯曲的方向就是正角度方向。然后看哪个分量被「挤」到负方向去了,那个位置就是负号。

2.3 欧拉角:直观但容易踩坑

旋转矩阵虽然数学上漂亮,但人看着头疼。12个数字,谁能一眼看出转了多大角度?所以工程上更常用欧拉角——三个角度,直观多了。

欧拉角的核心思想是:任何旋转都可以分解为三次绕坐标轴的旋转。常见的顺序有 ZYX(偏航-俯仰-横滚)和 ZXZ 等。Stewart 平台里,我一般用 ZYX 顺序,也就是先绕 Z 轴转(偏航),再绕 Y 轴转(俯仰),最后绕 X 轴转(横滚)。

对应的旋转矩阵就是三个基本旋转矩阵的乘积:

R = R_z(yaw) * R_y(pitch) * R_x(roll)

注意顺序!矩阵乘法不满足交换律,先转和后转结果完全不同。我曾经在调试时把顺序搞反了,平台直接往反方向猛转,吓得我赶紧按了急停……

避坑指南:欧拉角有个著名的「万向锁」问题。当俯仰角接近 ±90° 时,偏航和横滚会变得无法区分,自由度丢失一个。我建议在 Stewart 平台的运动范围限制中,把俯仰角控制在 ±80° 以内,避开这个奇点。

2.4 齐次变换矩阵:把平移和旋转统一起来

前面我们用了两个东西描述位姿:旋转矩阵 R 和位置向量 p。能不能把它们合并成一个东西?当然可以——齐次变换矩阵 T 就是干这个的。

齐次变换矩阵是一个 4x4 的矩阵:

T = [[R(3x3), p(3x1)],
     [0 0 0,     1   ]]

这样一来,刚体上任意一点的坐标变换就变成了一个矩阵乘法:

[P_base]   = T * [P_body]
[  1   ]         [  1   ]

为什么要加个 1?说白了就是为了把平移也塞进矩阵乘法里。没有这个「齐次坐标」,平移就得单独加,没法统一处理。

我在做 Stewart 平台的正解和逆解时,全部用齐次变换矩阵来传递位姿。代码写起来特别清爽,一个矩阵搞定所有坐标系变换。

2.5 知识体系总览

下面这张图是我自己画的,把刚体运动描述的核心逻辑串起来了。你顺着箭头看,就能明白各个概念之间的关系。

刚体运动描述知识体系 刚体位姿 (6自由度) 位置 (x, y, z) 姿态 (旋转描述) 旋转矩阵 (3x3) 欧拉角 (偏航/俯仰/横滚) 齐次变换矩阵 (4x4) 应用:Stewart平台正解/逆解、坐标系变换

2.6 实战中的选择建议

说了这么多,到底用哪个?我个人的经验是:

场景 推荐方式 原因
数学推导、理论分析 旋转矩阵 性质清晰,没有奇点
人机交互、姿态设定 欧拉角 直观,三个数就能看懂
坐标系变换链 齐次变换矩阵 统一处理平移和旋转,代码简洁
插值、平滑运动 四元数(后续章节讲) 避免万向锁,插值平滑

我的建议:刚开始做 Stewart 平台时,先用齐次变换矩阵把整个运动学模型搭起来。等跑通了,再根据具体需求优化姿态表示方式。别一开始就追求「最优解」,先跑起来再说。

好了,这一章的内容就到这儿。旋转矩阵、欧拉角、齐次变换矩阵,这三兄弟你搞明白了,Stewart 平台的运动学基础就算打牢了。下一章我们就要用这些工具去解平台的正解和逆解——那才是真正有意思的地方。


专注资料整理