三维旋转矩阵的左乘与右乘
在三维旋转、机器人学、计算机图形学和视觉SLAM等领域,3x3旋转矩阵是描述刚体方向的核心数学工具。然而,一个常见且关键的困惑点在于:旋转矩阵的左乘和右乘有什么区别? 理解这一区别对于正确进行坐标变换、姿态估计和运动学计算至关重要。本文将深入解析其概念、计算公式、几何含义及实际应用。
1. 基础:旋转矩阵与向量变换
一个3x3的旋转矩阵 R\mathbf{R}R 属于特殊正交群 SO(3),满足 RTR=I\mathbf{R}^T\mathbf{R} = \mathbf{I}RTR=I 且 det(R)=1\det(\mathbf{R}) = 1det(R)=1。
向量的左乘变换(标准形式)
当我们谈论“用旋转矩阵旋转一个向量”时,通常指的是左乘。设有一个三维列向量 v=[vx,vy,vz]T∈R3\mathbf{v} = [v_x, v_y, v_z]^T \in \mathbb{R}^3v=[vx,vy,vz]T∈R3 和一个旋转矩阵 R\mathbf{R}R,旋转后的向量 v′\mathbf{v}'v′ 计算公式为:
v′=Rv \mathbf{v}' = \mathbf{R} \mathbf{v} v′=Rv
这是一个标准的主动变换,其几何意义是:在一个固定的世界坐标系下,将向量 v\mathbf{v}v 旋转到了新的位置 v′\mathbf{v}'v′。向量在空间中的实际位置发生了改变,但描述它的坐标系是固定不变的。
计算示例:
假设有一个绕Z轴旋转 θ\thetaθ 角的矩阵 Rz(θ)\mathbf{R}_z(\theta)Rz(θ):
Rz(θ)=(cosθ−sinθ0sinθcosθ0001) \mathbf{R}_z(\theta) = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} Rz(θ)=cosθsinθ0−sinθcosθ0001
旋转向量 v=[1,0,0]T\mathbf{v} = [1, 0, 0]^Tv=[1,0,0]T 的结果为:
v′=Rz(90∘)v=(0−10100001)(100)=(010) \mathbf{v}' = \mathbf{R}_z(90^\circ) \mathbf{v} = \begin{pmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} 1 \\ 0 \\ 0 \end{pmatrix} = \begin{pmatrix} 0 \\ 1 \\ 0 \end{pmatrix} v′=Rz(90∘)v=010−100001100=010
2. 核心困惑点:旋转矩阵的串联与“右乘”
单纯的“向量右乘矩阵”(vR\mathbf{v} \mathbf{R}vR)在数学上是不成立的,因为维度不匹配(3x1矩阵无法右乘3x3矩阵)。“右乘”的真正含义体现在多个旋转矩阵的串联顺序上,这对应了两种截然不同的几何解释。
2.1 左乘串联:固定坐标系下的连续旋转
当我们需要进行一系列连续的旋转时,如果所有这些旋转都是相对于同一个固定的世界坐标系的轴来执行的,那么我们使用左乘串联。
计算规则:最终的旋转矩阵是各个旋转矩阵的从右到左的乘法。
Rfinal=Rn⋯R2R1 \mathbf{R}_{final} = \mathbf{R}_n \cdots \mathbf{R}_2 \mathbf{R}_1 Rfinal=Rn⋯R2R1
几何意义:先执行 R1\mathbf{R}_1R1,再执行 R2\mathbf{R}_2R2,…,最后执行 Rn\mathbf{R}_nRn。每一次旋转的参考轴都是最初的那个固定坐标系的轴。
应用示例(无人机姿态描述):
一架无人机先绕世界坐标系的Z轴偏航(Yaw)α\alphaα,再绕世界坐标系的Y轴俯仰(Pitch)β\betaβ。其总旋转矩阵为:
Rworld=Ry(β)Rz(α) \mathbf{R}_{world} = \mathbf{R}_y(\beta) \mathbf{R}_z(\alpha) Rworld=Ry(β)Rz(α)
2.2 右乘串联:局部坐标系下的连续旋转
当连续旋转是相对于物体自身当前的、运动着的坐标系的轴来执行时,我们使用右乘串联。
计算规则:最终的旋转矩阵是各个旋转矩阵的从左到右的乘法。
Rfinal=R1R2⋯Rn \mathbf{R}_{final} = \mathbf{R}_1 \mathbf{R}_2 \cdots \mathbf{R}_n Rfinal=R1R2⋯Rn
几何意义:先执行 R1\mathbf{R}_1R1,再执行 R2\mathbf{R}_2R2,…,最后执行 Rn\mathbf{R}_nRn。每一次旋转的参考轴,都是在上一次旋转之后得到的新的物体局部坐标系的轴。
应用示例(机械臂关节运动):
一个机械臂先绕自身的基座关节Z轴旋转 α\alphaα,然后绕其新的第二个关节的Y轴旋转 β\betaβ。其总旋转矩阵为:
Rlocal=Rz(α)Ry(β) \mathbf{R}_{local} = \mathbf{R}_z(\alpha) \mathbf{R}_y(\beta) Rlocal=Rz(α)Ry(β)
2.3 对比实验:为何顺序如此重要?
让我们用一个具体的例子来展示其巨大差异。
- Rz(90∘)\mathbf{R}_z(90^\circ)Rz(90∘): 绕Z轴旋转90度。
- Ry(90∘)\mathbf{R}_y(90^\circ)Ry(90∘): 绕Y轴旋转90度。
- 初始向量 v=[1,0,0]T\mathbf{v} = [1, 0, 0]^Tv=[1,0,0]T。
固定系(左乘):
Rfixed=Ry(90∘)Rz(90∘)
\mathbf{R}_{fixed} = \mathbf{R}_y(90^\circ) \mathbf{R}_z(90^\circ)
Rfixed=Ry(90∘)Rz(90∘)
vfixed′=Rfixedv=(001100010)(100)=(010)
\mathbf{v}'_{fixed} = \mathbf{R}_{fixed} \mathbf{v} = \begin{pmatrix} 0 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{pmatrix} \begin{pmatrix} 1 \\ 0 \\ 0 \end{pmatrix} = \begin{pmatrix} 0 \\ 1 \\ 0 \end{pmatrix}
vfixed′=Rfixedv=010001100100=010
局部系(右乘):
Rlocal=Rz(90∘)Ry(90∘)
\mathbf{R}_{local} = \mathbf{R}_z(90^\circ) \mathbf{R}_y(90^\circ)
Rlocal=Rz(90∘)Ry(90∘)
vlocal′=Rlocalv=(0−10001−100)(100)=(00−1)
\mathbf{v}'_{local} = \mathbf{R}_{local} \mathbf{v} = \begin{pmatrix} 0 & -1 & 0 \\ 0 & 0 & 1 \\ -1 & 0 & 0 \end{pmatrix} \begin{pmatrix} 1 \\ 0 \\ 0 \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \\ -1 \end{pmatrix}
vlocal′=Rlocalv=00−1−100010100=00−1
结果 (010)\begin{pmatrix} 0 \\ 1 \\ 0 \end{pmatrix}010 与 (00−1)\begin{pmatrix} 0 \\ 0 \\ -1 \end{pmatrix}00−1 完全不同!这清晰地证明了固定系旋转和局部系旋转是两种本质不同的物理过程。
3. 另一种视角:坐标系变换与“右乘”向量
在坐标系变换的语境下,我们确实会遇到一种形式上的“向量右乘”。
被动变换与行向量
假设旋转矩阵 BAR{}^A_B\mathbf{R}BAR 描述了坐标系 {B} 相对于 {A} 的姿态。我们想知道同一个向量 v\mathbf{v}v 在 {B} 系中的坐标 Bv{}^B\mathbf{v}Bv 与其在 {A} 系中的坐标 Av{}^A\mathbf{v}Av 之间的关系。
标准形式(列向量左乘):
Av=BAR Bv
{}^A\mathbf{v} = {}^A_B\mathbf{R} \ {}^B\mathbf{v}
Av=BAR Bv
如果我们将向量表示为行向量,并对上述公式两边取转置,利用 RT=R−1\mathbf{R}^T = \mathbf{R}^{-1}RT=R−1,可以得到:
Avrow=Bvrow BART {}^A\mathbf{v}_{row} = {}^B\mathbf{v}_{row} \ {}^A_B\mathbf{R}^T Avrow=Bvrow BART
这个公式在形式上变成了行向量右乘旋转矩阵的转置。其几何意义是被动变换:向量在空间中的实际位置不变,我们只是改变了观察(描述)它的坐标系。
4. 实际应用与总结
左乘一致性与右乘一致性
在构建复杂的坐标系系统(如机器人D-H模型或SLAM中的姿态图)时,必须选定并遵循一套统一的乘法规则,这被称为一致性。
- 左乘一致性:整个系统的变换推导都遵循左乘规则,变换链的串联是从右到左。
- 右乘一致性:整个系统的变换推导都遵循右乘规则,变换链的串联是从左到右。
混合使用规则是许多错误的主要根源。
应用场景总结
场景 | 推荐用法 | 几何解释 |
---|---|---|
无人机/飞船姿态控制 | 左乘串联 (R_final = Ry * Rz ) | 易于理解,所有旋转都相对于固定的大地坐标系。 |
机械臂逆运动学 | 右乘串联 (R_final = R1 * R2 ) | 天然符合关节链结构,每个关节运动都相对于其父关节。 |
三维建模软件 | 通常提供两种模式(Local/Parent),内部可能统一为一种乘法。 | 为用户提供直观选择,但底层实现需保持一致。 |
坐标系变换 | 列向量左乘 (ᴬv = ᴬ_BR * ᴮv ) | 标准、无歧义的公式,被大多数数学库采用。 |
关键结论
- 向量旋转用左乘:v′=Rv\mathbf{v}' = \mathbf{R}\mathbf{v}v′=Rv 是唯一标准。
- 固定系旋转用左乘串联:
R_final = R_last ... R_first
。 - 局部系旋转用右乘串联:
R_final = R_first ... R_last
。 - 理解本质:左乘与右乘的差异源于旋转所参考的坐标系是固定的还是运动的这一根本区别。
- 保持一致性:在一个项目或系统中,选定一种乘法规则并始终坚持下去。
希望这篇博客能帮助你彻底理解旋转矩阵左乘与右乘的奥秘,从而在未来的工程和科研实践中游刃有余。