3、刚体运动学基础:旋转矩阵、欧拉角、四元数、平移与旋转的复合

各位同学,今天我们来啃一块硬骨头——刚体运动学。说实话,我刚入行那会儿,被旋转矩阵和四元数绕得晕头转向。后来在调试一个六轴机械臂时,因为欧拉角万向锁的问题,差点把电机烧了。从那以后,我彻底明白了:搞机器人,绕不开这些数学工具。

刚体运动学,说白了就是描述一个物体在空间里怎么动。它包含两个基本动作:平移旋转。平移好理解,就是从一个点挪到另一个点。旋转嘛,花样就多了。今天我们就来聊聊旋转的三种主流表示法,以及如何把它们和平移组合起来。

核心概念:刚体运动 = 平移 + 旋转。旋转表示法有三种:旋转矩阵、欧拉角、四元数。各有优劣,看场景选。

3.1 旋转矩阵:最直观,但最啰嗦

旋转矩阵是一个3x3的正交矩阵,行列式为+1。它把一个向量从一个坐标系映射到另一个坐标系。比如,一个点P在坐标系{A}中的坐标是AP,在坐标系{B}中的坐标是BP,那么:

BP = BRA · AP

其中BRA就是旋转矩阵。它的每一列,其实就是坐标系{A}的基向量在坐标系{B}中的投影。

我个人习惯用旋转矩阵做理论推导,因为它数学性质好,组合方便。但缺点也很明显:9个参数,冗余。而且你想想看,每次更新姿态都要维护9个数,计算量不小。

小技巧:验证一个矩阵是不是合法的旋转矩阵,检查两件事:1) 矩阵的转置等于它的逆;2) 行列式为+1。我在项目中经常用这个来排查数据异常。

3.2 欧拉角:直观,但有个坑

欧拉角用三个角度来描述旋转,比如绕X轴转α,绕Y轴转β,绕Z轴转γ。常见的顺序有ZYX、XYZ等。每个顺序对应不同的旋转分解方式。

欧拉角的好处是直观,三个数,好理解。你在遥控器上看到的俯仰角、偏航角、翻滚角,就是欧拉角的一种应用。

但这里有个大坑——万向锁。当第二个旋转角达到±90°时,第一个和第三个旋转轴会重合,导致丢失一个自由度。我曾经在调试一个云台时,就因为没处理好万向锁,云台在某个角度突然乱转。嗯,那场面,挺尴尬的。

避坑指南:如果你用欧拉角做插值或控制,一定要考虑万向锁。我建议在需要连续旋转的场景下,尽量别用欧拉角。实在要用,记得限制第二个角度的范围,或者切换到四元数。

3.3 四元数:高效,但抽象

四元数是一个超复数,形式为 q = w + xi + yj + zk,其中w是实部,x、y、z是虚部。它用四个参数表示旋转,没有奇异性,插值平滑。

为什么用四元数?因为它避免了万向锁,而且计算效率高。两个四元数的乘法比两个旋转矩阵的乘法快得多。在机器人实时控制中,这点性能差异很关键。

我记得第一次接触四元数时,完全搞不懂它和旋转的关系。后来我换了个角度理解:四元数其实是在描述一个旋转轴和一个旋转角度。轴由虚部(x,y,z)的方向决定,角度由实部w决定。这样一想,就清晰多了。

// 四元数转旋转矩阵示例(C++风格伪代码)
// 输入:四元数 q = (w, x, y, z)
// 输出:3x3旋转矩阵 R

R[0][0] = 1 - 2*y*y - 2*z*z;
R[0][1] = 2*x*y - 2*z*w;
R[0][2] = 2*x*z + 2*y*w;

R[1][0] = 2*x*y + 2*z*w;
R[1][1] = 1 - 2*x*x - 2*z*z;
R[1][2] = 2*y*z - 2*x*w;

R[2][0] = 2*x*z - 2*y*w;
R[2][1] = 2*y*z + 2*x*w;
R[2][2] = 1 - 2*x*x - 2*y*y;

个人经验:在IMU姿态解算中,我几乎只用四元数。因为它没有奇异性,而且可以方便地进行姿态预测和更新。但要注意,四元数需要归一化,否则数值误差会累积。

3.4 平移与旋转的复合:齐次变换矩阵

好了,旋转讲完了,平移也简单。但实际中,刚体运动往往是旋转和平移同时发生的。比如机械臂的末端执行器,既要转到某个角度,又要移到某个位置。

这时候,我们需要一个工具把旋转和平移统一起来——齐次变换矩阵。它是一个4x4的矩阵,左上角3x3是旋转矩阵,右上角3x1是平移向量,最后一行是[0 0 0 1]。

T = | R   t |
    | 0   1 |

其中R是3x3旋转矩阵,t是3x1平移向量。用齐次坐标表示点,就可以把旋转和平移合并成一次矩阵乘法:

BP̃ = BTA · A

这里的P̃是齐次坐标,就是在普通坐标后面加一个1。比如三维点(x,y,z)变成(x,y,z,1)。

为什么用齐次变换矩阵?因为它可以把多个变换串联起来。比如从基座到末端,中间经过多个关节,每个关节都有一个变换矩阵。把它们乘起来,就得到末端相对于基座的位姿。这就是机器人运动学正解的核心思想。

关键点:齐次变换矩阵的乘法顺序很重要。左乘表示相对于固定坐标系变换,右乘表示相对于当前坐标系变换。我在做运动学标定时,经常因为搞混顺序而出错。记住:先旋转后平移,还是先平移后旋转,结果不一样。

3.5 三种旋转表示法的对比

为了让你更直观地理解,我整理了一个表格:

表示法 参数数量 奇异性 计算效率 直观性 适用场景
旋转矩阵 9 理论推导、坐标变换
欧拉角 3 有(万向锁) 人机交互、姿态显示
四元数 4 实时控制、姿态插值

你想想看,如果只是给用户看个姿态角度,用欧拉角最方便。但如果是做运动控制,我建议用四元数。至于旋转矩阵,更多用在理论推导和坐标变换中。

3.6 知识体系结构图

下面这张图展示了本章的知识脉络,帮你理清思路:

刚体运动学基础 刚体运动 平移 旋转 旋转矩阵 欧拉角 四元数 齐次变换矩阵(平移+旋转) 应用:运动学正解、姿态控制、坐标变换

从图中可以看到,刚体运动学的基础就是平移和旋转。旋转有三种表示法,各有优劣。最后通过齐次变换矩阵,把平移和旋转统一起来,应用到实际机器人控制中。

我的建议:初学者先掌握旋转矩阵,因为它最直观,数学性质清晰。然后理解欧拉角,注意万向锁。最后攻克四元数,这是工程实践中的利器。别急,一步步来。

好了,这一章的内容就到这里。旋转矩阵、欧拉角、四元数,还有齐次变换矩阵,都是机器人运动控制的基石。你在项目中遇到什么问题,欢迎随时交流。


公众号:蓝海资料掘金营,微信deep3321