群(Group)是一种集合加上一种运算的代数结构。我们把集合记作 A A A,运算记作 ⋅ \cdot ⋅, 那么群可以记作 G = ( A , ⋅ ) G = (A, ·) G=(A,⋅)。群要求这个运算满足以下几个条件:
定义参考坐标系(fix frame)为 { S } \{S\} {S},定义body frame为 { b } \{b\} {b}, { b } \{b\} {b}在fixed frame { S } \{S\} {S}下经过一定的旋转,对应的旋转矩阵为 R R R,
坐标系 { b } \{b\} {b}的三个坐标轴,即基, x ^ b , y ^ b , z ^ b \hat{x}_{b},\hat{y}_{b},\hat{z}_{b} x^b,y^b,z^b,同时 R = [ x ^ b , y ^ b , z ^ b ] R=[\hat{x}_{b},\hat{y}_{b},\hat{z}_{b}] R=[x^b,y^b,z^b],满足以下条件,
det M = a T ( b × c ) = c T ( a × b ) = b T ( c × a ) \operatorname{det} M=a^{\mathrm{T}}(b \times c)=c^{\mathrm{T}}(a \times b)=b^{\mathrm{T}}(c \times a) detM=aT(b×c)=cT(a×b)=bT(c×a)
所以,我们可以得到,
d e t R = 1 det R=1 detR=1
至此,我们推导出了旋转矩阵满足的两个条件。在数学上,将满足上述两个条件的 3 × 3 3\times3 3×3的矩阵统称为special orthogonal group S O ( 3 ) SO(3) SO(3),即3维的特殊正交群,容易验证 R R R符合群的封结幺逆的性质,此外对于任意的3维列向量 x x x, y = R x y=Rx y=Rx和 x x x具有相同的长度(2范数)。
∥ y ∥ 2 = y T y = ( R x ) T R x = x T R T R x = x T x = ∥ x ∥ 2 \|y\|^{2}=y^{\mathrm{T}} y=(R x)^{\mathrm{T}} R x=x^{\mathrm{T}} R^{\mathrm{T}} R x=x^{\mathrm{T}} x=\|x\|^{2} ∥y∥2=yTy=(Rx)TRx=xTRTRx=xTx=∥x∥2
在第一种情况下,旋转矩阵的三列分别对应坐标系的三个坐标轴,即基,
考虑以上三个坐标系,其对应的描述为,
R a = [ 1 0 0 0 1 0 0 0 1 ] , R b = [ 0 − 1 0 1 0 0 0 0 1 ] , R c = [ 0 − 1 0 0 0 − 1 1 0 0 ] R_{a}=\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right], \quad R_{b}=\left[\begin{array}{ccc} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{array}\right], \quad R_{c}=\left[\begin{array}{ccc} 0 & -1 & 0 \\ 0 & 0 & -1 \\ 1 & 0 & 0 \end{array}\right] Ra=⎣⎡100010001⎦⎤,Rb=⎣⎡010−100001⎦⎤,Rc=⎣⎡001−1000−10⎦⎤
而空间中的同一点 P P P,在三个坐标系中的描述分别为,
p a = [ 1 1 0 ] , p b = [ 1 − 1 0 ] , p c = [ 0 − 1 − 1 ] p_{a}=\left[\begin{array}{l} 1 \\ 1 \\ 0 \end{array}\right], \quad p_{b}=\left[\begin{array}{c} 1 \\ -1 \\ 0 \end{array}\right], \quad p_{c}=\left[\begin{array}{c} 0 \\ -1 \\ -1 \end{array}\right] pa=⎣⎡110⎦⎤,pb=⎣⎡1−10⎦⎤,pc=⎣⎡0−1−1⎦⎤
R a p a = R b p b = R c p c = [ 1 1 0 ] R_{a}p_a=R_bp_b=R_cp_c=\left[\begin{array}{l} 1 \\ 1 \\ 0 \end{array}\right] Rapa=Rbpb=Rcpc=⎣⎡110⎦⎤
假设旋转矩阵 R a b R_{ab} Rab,描述了 { b } \{b\} {b}相对于 { a } \{a\} {a}的旋转, R b c R_{bc} Rbc描述了 { c } \{c\} {c}相对于 { b } \{b\} {b}的旋转,则 R a c R_{ac} Rac为 { c } \{c\} {c}相对于 { a } \{a\} {a}的旋转,
R a c = R a b R b c R_{ac}=R_{ab}R_{bc} Rac=RabRbc
向量 p p p在 { b } \{b\} {b}坐标系的向量为 p b p_b pb,则在 { a } \{a\} {a}坐标系下 p a p_a pa为,
R a b p b = p a R_{ab}p_b=p_a Rabpb=pa
在坐标系 { a } \{a\} {a}下旋转一个向量 p a p_a pa(同一坐标系下),会产生另外一个向量 p ′ a p\prime _a p′a,
p ′ a = R p a p\prime _a=Rp_a p′a=Rpa
而对一个坐标系乘以一个旋转矩阵,则有不同的意义,分为左乘和右乘,下面分别介绍,其中参考坐标系为 { S } \{S\} {S},body frame为 { b } \{b\} {b}, { S } \{S\} {S}绕 Z Z Z轴转90度生成 { b } \{b\} {b}, R s b R_{sb} Rsb表示 { b } \{b\} {b}在 { S } \{S\} {S}下的描述,而 R R R仅表示某一旋转矩阵(绕着 x x x转30度),下面借助matlab来进行可视化,
R_sb = rotz(90)
R = rotx(30)
R_1 = R * R_sb
tranimate(R_1)
R_sb =
0 -1 0
1 0 0
0 0 1
R =
1.0000 0 0
0 0.8660 -0.5000
0 0.5000 0.8660
R_1 =
0 -1.0000 0
0.8660 0 -0.5000
0.5000 0 0.8660
最终结果,
由上面两图可以看到, R R R左乘 R s b R_{sb} Rsb,是顺着原来 { S } \{S\} {S}中的 X X X轴旋转了30度。因此左乘, { R } \{R\} {R}是在 { S } \{S\} {S}坐标系下的描述。
R_sb = rotz(90)
R = rotx(30)
R_1 = R_sb * R
tranimate(R_1)
R_sb =
0 -1 0
1 0 0
0 0 1
R =
1.0000 0 0
0 0.8660 -0.5000
0 0.5000 0.8660
R_1 =
0 -0.8660 0.5000
1.0000 0 0
0 0.5000 0.8660
最终结果,
由上面两图可以看到, R R R右乘 R s b R_{sb} Rsb,是顺着 { b } \{b\} {b}中的 X X X轴旋转了30度。右乘, { R } \{R\} {R}是在 { b } \{b\} {b}坐标系下描述。
其实关于左乘和右乘,在前面的文章中介绍过旋转矩阵的列向量是 { b } \{b\} {b}在 { S } \{S\} {S}中的描述,右乘相当于,
[ x ^ b , y ^ b , z ^ b ] R = [ r 11 x ^ b + r 21 y ^ b + r 31 z ^ b , r 12 x ^ b + r 22 y ^ b + r 32 z ^ b , r 13 x ^ b + r 23 y ^ b + r 33 z ^ b ] \begin{bmatrix} \hat{x}_{b},\hat{y}_{b},\hat{z}_{b} \end{bmatrix}R=\begin{bmatrix} r_{11}\hat{x}_{b}+r_{21}\hat{y}_{b}+r_{31}\hat{z}_{b},r_{12}\hat{x}_{b}+r_{22}\hat{y}_{b}+r_{32}\hat{z}_{b},r_{13}\hat{x}_{b}+r_{23}\hat{y}_{b}+r_{33}\hat{z}_{b} \end{bmatrix} [x^b,y^b,z^b]R=[r11x^b+r21y^b+r31z^b,r12x^b+r22y^b+r32z^b,r13x^b+r23y^b+r33z^b]
此时,矩阵的乘积的每一列都是 { b } \{b\} {b}所对应基的线性组合,所以 { R } \{R\} {R}此时的意义肯定是在 { b } \{b\} {b}坐标系下描述。
同理,前面文章提到过,旋转矩阵的行向量是 { S } \{S\} {S}在 { b } \{b\} {b}中的描述,此时 { b } \{b\} {b}是参考坐标系,
R [ x ^ s y ^ s z ^ s ] = [ r 11 x ^ s + r 12 y ^ s + r 13 z ^ s r 21 x ^ s + r 22 y ^ s + r 23 z ^ s r 31 x ^ s + r 32 y ^ s + r 33 z ^ s ] R\begin{bmatrix} \hat{x}_{s} \\ \hat{y}_{s} \\ \hat{z}_{s} \end{bmatrix}=\begin{bmatrix} r_{11}\hat{x}_{s}+r_{12}\hat{y}_{s}+r_{13}\hat{z}_{s}\\ r_{21}\hat{x}_{s}+r_{22}\hat{y}_{s}+r_{23}\hat{z}_{s}\\ r_{31}\hat{x}_{s}+r_{32}\hat{y}_{s}+r_{33}\hat{z}_{s} \end{bmatrix} R⎣⎡x^sy^sz^s⎦⎤=⎣⎡r11x^s+r12y^s+r13z^sr21x^s+r22y^s+r23z^sr31x^s+r32y^s+r33z^s⎦⎤
此时,矩阵的乘积的每一行都是 { S } \{S\} {S}所对应基的线性组合,所以 { R } \{R\} {R}此时的意义肯定是在 { S } \{S\} {S}坐标系下描述。