旋转的左乘与右乘

知乎同款

引言

如果不明确旋转的定义和物理意义,那么本篇文章是没有意义的。本人曾在一本书籍上见到关于绕z轴旋转θ角的两种不同的旋转表示,也了解旋转在不同领域,甚至同一领域的不同应用场景都有不同的物理意义。
旋转的表示有很多种:旋转矩阵,欧拉角,四元数,轴角,李群与李代数。
旋转的应用场景也有很多种:惯性导航,机器人学(机械臂运动学,无人机姿态估计,SLAM等)。
本文将以旋转矩阵为载体,说明旋转(旋转矩阵)左乘与右乘的不同情况。

本文背景

我们首先给出绕x,y,z轴旋转的旋转矩阵表示:
R x ( θ ) = [ 1 0 0 0 cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ ] \boldsymbol{R}_{x}(\theta)=\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos \theta & -\sin \theta \\ 0 & \sin \theta & \cos \theta \end{array}\right] Rx(θ)=1000cosθsinθ0sinθcosθ
R y ( γ ) = [ cos ⁡ γ 0 sin ⁡ γ 0 1 0 − sin ⁡ γ 0 cos ⁡ γ ] \boldsymbol{R}_{y}(\gamma)=\left[\begin{array}{ccc} \cos \gamma & 0 & \sin \gamma \\ 0 & 1 & 0 \\ -\sin \gamma & 0 & \cos \gamma \end{array}\right] Ry(γ)=cosγ0sinγ010sinγ0cosγ
R z ( α ) = [ cos ⁡ α − sin ⁡ α 0 sin ⁡ α cos ⁡ α 0 0 0 1 ] \boldsymbol{R}_{z}(\alpha)=\left[\begin{array}{ccc} \cos \alpha & -\sin \alpha & 0 \\ \sin \alpha & \cos \alpha & 0 \\ 0 & 0 & 1 \end{array}\right] Rz(α)=cosαsinα0sinαcosα0001
其中,旋转角的正方向由右手螺旋定则给定。注意,绕Y轴旋转的旋转矩阵,-sin在下方。
其实,关于上面三个矩阵,不同书,不同库函数(甚至matlab的不同函数,makehgtform与angle2dcm)都不尽相同,我们之所以如此规定,是出于其物理意义。

以z轴旋转为例:

第一种物理意义,坐标系的旋转,其应用场景有SLAM,机械臂运动学等。

旋转的左乘与右乘_第1张图片

如上图所示, P P P点不变,坐标系 O − x y z O-x y z Oxyz 旋转 α \alpha α,得到新的坐标系 O − x ′ y ′ z ′ O-x^{\prime} y^{\prime} z^{\prime} Oxyz,在新坐标系下, P P P点的坐标变为 P ′ P^{\prime} P,则有:
P = R z ( α ) P ′ P=\boldsymbol{R}_{z}(\alpha) P^{\prime} P=Rz(α)P

第二种物理意义,向量的旋转,其应用场景有机器人的姿态估计等。
旋转的左乘与右乘_第2张图片

如上图所示,坐标系 O − x y z O-x y z Oxyz不变, P ′ P^{\prime} P 点旋转 α \alpha α,得到新的点 P P P(我也想反过来,但用的教材上的图,没办法),则有:
P = R z ( α ) P ′ P=\boldsymbol{R}_{z}(\alpha) P^{\prime} P=Rz(α)P
没错,对比上面两个式子,这种旋转矩阵的规定,使得这两种物理意义是不冲突的,因此,我们选用上述的旋转矩阵规定。

坐标系旋转中的右乘——相对于自身坐标系旋转

为了简化,我们并不以绕x,y,z轴旋转表示旋转矩阵。记坐标系0,1,2。坐标系1相对于坐标系0的旋转矩阵,记为 R 1 0 R_1^0 R10,;坐标系2相对于坐标系1的旋转矩阵,记为 R 2 1 R_2^1 R21;坐标系2相对于坐标系0的旋转矩阵,记为 R 2 0 R_2^0 R20。点p在坐标系0,1,2中的坐标分别为 p 0 , p 1 , p 2 p^0, p^1, p^2 p0,p1,p2
其中,相对于哪个坐标系旋转,就是绕哪个坐标系的轴旋转。则根据上小节,第一个物理意义,有以下关系式:
p 1 = R 2 1 p 2 (1) p^{1}=R_{2}^{1} p^{2} \tag{1} p1=R21p2(1)
p 0 = R 1 0 p 1 (2) p^{0}=R_{1}^{0} p^{1} \tag{2} p0=R10p1(2)
p 0 = R 2 0 p 2 (3) p^{0}=R_{2}^{0} p^{2} \tag{3} p0=R20p2(3)
由上述1,2,3式可得:
R 2 0 = R 1 0 R 2 1 (4) \boldsymbol{R}_{2}^{0}=\boldsymbol{R}_{1}^{0} \boldsymbol{R}_{2}^{1} \tag{4} R20=R10R21(4)
即证明了相对自身坐标系下,旋转矩阵按顺序右乘。

坐标系旋转中的左乘——相对于固定坐标系旋转

在推导像4式那样的关系之前,我们先推导同一个旋转在不同坐标系下有什么关系。假设0系坐标系下有两点 M , N M, N M,N,其在1系的坐标 M ˉ , N ˉ \bar M, \bar N Mˉ,Nˉ,类比上述的符号定义,则有以下关系式:
M = R n m N (5) M = R_{n}^{m} N \tag{5} M=RnmN(5)
M ˉ = R ˉ n m N ˉ (6) \bar M=\bar R_{n}^{m} \bar N \tag{6} Mˉ=RˉnmNˉ(6)
M = R 1 0 M ˉ (7) M = R_{1}^{0} \bar M \tag{7} M=R10Mˉ(7)
N = R 1 0 N ˉ (8) N = R_{1}^{0} \bar N \tag{8} N=R10Nˉ(8)
将7,8式代入5式得,
R 1 0 M ˉ = R n m R 1 0 N ˉ (9) R_{1}^{0} \bar M = R_{n}^{m} R_{1}^{0} \bar N \tag{9} R10Mˉ=RnmR10Nˉ(9)
由9式即可得到我们想要的关系式,
R n m = R 1 0 R ˉ n m R 0 1 (10) R_{n}^{m} = R_{1}^{0} \bar R_{n}^{m} R_{0}^{1} \tag{10} Rnm=R10RˉnmR01(10)

好了有了上面的结论,我们开始进入正文。记坐标系0,1,2(上面说的0,1系只是为了表述两个不同的坐标系,与这里的不同),其中记固定坐标系为0系。另外,因为旋转是个“事实”,旋转矩阵只不过是描述这个“事实”的工具,因此我们如下表述:坐标系1相对于坐标系0的旋转,在固定坐标系下的旋转矩阵,记为 R ˉ 1 0 \bar R_1^0 Rˉ10;坐标系2相对于坐标系1的旋转矩阵,在固定坐标系下的旋转,记为 R ˉ 2 1 \bar R_2^1 Rˉ21;坐标系2相对于坐标系0的旋转,在固定坐标系下的旋转矩阵,记为 R ˉ 2 0 \bar R_2^0 Rˉ20

由公式10及0系为固定坐标系的定义可知,
R ˉ 1 0 = R 1 0 (11) \bar R_1^0 = R_1^0 \tag{11} Rˉ10=R10(11)
R ˉ 2 0 = R 2 0 (12) \bar R_2^0 = R_2^0 \tag{12} Rˉ20=R20(12)
R ˉ 2 1 = R 1 0 R 2 1 R 0 1 (13) \bar R_2^1 = R_{1}^{0} R_2^1 R_{0}^{1} \tag{13} Rˉ21=R10R21R01(13)
为了读者理解,特此对公式13进行解释,此时的 R 2 1 R_2^1 R21是相对于1系的旋转,就相当于 R ˉ n m \bar R_{n}^{m} Rˉnm, R ˉ 2 1 \bar R_2^1 Rˉ21是相对于固定坐标系(0系)的旋转,就相当于 R n m R_{n}^{m} Rnm,而1系相对于0系的旋转矩阵为 R 1 0 R_{1}^{0} R10

将公式11-13代入公式4,可得
R ˉ 2 0 = R 1 0 R 0 1 R ˉ 2 1 R 1 0 = R ˉ 2 1 R ˉ 1 0 (14) \bar R_2^0 = R_1^0 R_0^1 \bar R_2^1 R_{1}^{0} = \bar R_2^1 \bar R_{1}^{0} \tag{14} Rˉ20=R10R01Rˉ21R10=Rˉ21Rˉ10(14)
即证明了在固定坐标系下,旋转矩阵按顺序左乘。

向量旋转中的左乘

在固定坐标系下,有一点 p 0 p_0 p0, 先通过旋转矩阵 R 0 1 R_0^1 R01,将其旋转到 p 1 p_1 p1,再通过旋转矩阵 R 1 2 R_1^2 R12,将其旋转到 p 2 p_2 p2。同样对于 p 0 p_0 p0,可以通过旋转矩阵 R 0 2 R_0^2 R02,一步将其旋转到 p 2 p_2 p2。则有以下公式:
p 1 = R 0 1 p 0 (15) p_1 = R_0^1 p_0 \tag{15} p1=R01p0(15)
p 2 = R 1 2 p 1 (16) p_2 = R_1^2 p_1 \tag{16} p2=R12p1(16)
p 2 = R 0 2 p 0 (17) p_2 = R_0^2 p_0 \tag{17} p2=R02p0(17)
易得:
R 0 2 = R 1 2 R 0 1 (18) R_0^2 = R_1^2 R_0^1 \tag{18} R02=R12R01(18)

向量旋转中的右乘

把18式两边取个逆就好。等式成立的代价是旋转矩阵的物理意义,或者说描述也改变了。向量旋转中的右乘这一节本没必要,甚至会引起人误解。但这里还是留出来,是因为误解总会发生的,还不如提前搞明白。

在处理旋转问题上,一定要弄清楚其物理意义,是坐标系旋转还是向量,是哪个点到哪个点;符号规定也要统一,上标代表什么,下标又代表什么,要与物理意义联系起来。(至少自己不糊涂吧)

旋转小知识

  1. 绕x,y,z轴的旋转顺序有几种?
  • 12种,以先绕x轴为例,有xyz,xzy,xzx,xyx。
  1. 为什么旋转表示那么多?
  • 头脑风暴开始…欧拉角很直观,但是不连续的,有奇异点;四元数连续,且可以通过机体坐标系的角速度更新,但需要归一化,不适合用于优化;轴角实际上属于李代数;而李代数既连续,也无约束,适合优化;旋转矩阵属于李群;说到群,其实旋转矩阵也可以由基变换得到(矩阵论里的了)。

你可能感兴趣的:(robot,slam,机器人,旋转)