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 知识体系总览
下面这张图是我自己画的,把刚体运动描述的核心逻辑串起来了。你顺着箭头看,就能明白各个概念之间的关系。
2.6 实战中的选择建议
说了这么多,到底用哪个?我个人的经验是:
| 场景 | 推荐方式 | 原因 |
|---|---|---|
| 数学推导、理论分析 | 旋转矩阵 | 性质清晰,没有奇点 |
| 人机交互、姿态设定 | 欧拉角 | 直观,三个数就能看懂 |
| 坐标系变换链 | 齐次变换矩阵 | 统一处理平移和旋转,代码简洁 |
| 插值、平滑运动 | 四元数(后续章节讲) | 避免万向锁,插值平滑 |
我的建议:刚开始做 Stewart 平台时,先用齐次变换矩阵把整个运动学模型搭起来。等跑通了,再根据具体需求优化姿态表示方式。别一开始就追求「最优解」,先跑起来再说。
好了,这一章的内容就到这儿。旋转矩阵、欧拉角、齐次变换矩阵,这三兄弟你搞明白了,Stewart 平台的运动学基础就算打牢了。下一章我们就要用这些工具去解平台的正解和逆解——那才是真正有意思的地方。