群(Group)是一种集合加上一种运算的代数结构。我们把集合记作 A A A,运算记作 ⋅ \cdot ⋅, 那么群可以记作 G = ( A , ⋅ ) G = (A, ·) G=(A,⋅)。群要求这个运算满足以下几个条件:
- 封闭性: ∀ a 1 , a 2 ∈ A , a 1 ⋅ a 2 ∈ A \forall a_1, a_2 \in A, a_1\cdot a_2 \in A ∀a1,a2∈A,a1⋅a2∈A.
- 结合律: ∀ a 1 , a 2 , a 3 ∈ A , ( a 1 ⋅ a 2 ) ⋅ a 3 = a 1 ⋅ ( a 2 ⋅ a 3 ) \forall a_1, a_2, a_3 \in A, (a_1\cdot a_2)\cdot a_3 = a_1 \cdot (a_2 \cdot a_3) ∀a1,a2,a3∈A,(a1⋅a2)⋅a3=a1⋅(a2⋅a3).
- 幺元: ∃ a 0 ∈ A , s . t . ∀ a ∈ A , a 0 ⋅ a = a ⋅ a 0 = a \exists a_{0} \in A, \quad s.t. \quad \forall a \in A, \quad a_{0} \cdot a=a \cdot a_{0}=a ∃a0∈A,s.t.∀a∈A,a0⋅a=a⋅a0=a
- 逆: ∀ a ∈ A , ∃ a − 1 ∈ A , s . t . a ⋅ a − 1 = a 0 \forall a \in A, \exists a^{−1} \in A, \quad s.t. \quad a · a^{−1} = a_0 ∀a∈A,∃a−1∈A,s.t.a⋅a−1=a0.
定义参考坐标系(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],满足以下条件,
- 单位向量
r 11 2 + r 21 2 + r 31 2 = 1 r 12 2 + r 22 2 + r 32 2 = 1 r 13 2 + r 23 2 + r 33 2 = 1 \begin{aligned} &r_{11}^{2}+r_{21}^{2}+r_{31}^{2}=1\\ &r_{12}^{2}+r_{22}^{2}+r_{32}^{2}=1\\ &r_{13}^{2}+r_{23}^{2}+r_{33}^{2}=1 \end{aligned} r112+r212+r312=1r122+r222+r322=1r132+r232+r332=1 - 正交
x ^ b ⋅ y ^ b = 0 , x ^ b ⋅ z ^ b = 0 , z ^ b ⋅ y ^ b = 0 \hat{x}_{b}\cdot\hat{y}_{b}=0,\hat{x}_{b}\cdot\hat{z}_{b}=0,\hat{z}_{b}\cdot\hat{y}_{b}=0 x^b⋅y^b=0,x^b⋅z^b=0,z^b⋅y^b=0,即
r 11 r 12 + r 21 r 22 + r 31 r 32 = 0 r 12 r 13 + r 22 r 23 + r 32 r 33 = 0 r 11 r 13 + r 21 r 23 + r 31 r 33 = 0 \begin{array}{l} r_{11} r_{12}+r_{21} r_{22}+r_{31} r_{32}=0 \\ r_{12} r_{13}+r_{22} r_{23}+r_{32} r_{33}=0 \\ r_{11} r_{13}+r_{21} r_{23}+r_{31} r_{33}=0 \end{array} r11r12+r21r22+r31r32=0r12r13+r22r23+r32r33=0r11r13+r21r23+r31r33=0
上面两个性质可以写成矩阵的形势,
R R T = I RR^T=I RRT=I
此外,坐标系 { b } \{b\} {b}的三个坐标轴还需要遵守右手坐标系,例如 x ^ b × y ^ b = z ^ b \hat{x}_{b}\times\hat{y}_{b}=\hat{z}_{b} x^b×y^b=z^b,其中 × \times ×表示叉乘。
在线性代数上有如下的一个公式,当我们知道一个 3 × 3 3\times3 3×3矩阵 M M M的三列为 a , b , c a,b,c a,b,c时,我们可以求得矩阵的行列式值为,
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
3. 旋转矩阵的使用- 描述一个坐标系
- 改变向量或者坐标系的参考坐标系
- 旋转一个坐标系或者向量
3.1 描述坐标系
在第一种情况下,旋转矩阵的三列分别对应坐标系的三个坐标轴,即基,
考虑以上三个坐标系,其对应的描述为,
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⎦⎤
3.2 改变参考坐标系
假设旋转矩阵
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
3.3 旋转一个坐标系或者向量
在坐标系
{
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来进行可视化,
3.3.1 左乘
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}坐标系下的描述。
3.3.2 右乘
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}坐标系下描述。