旋转矩阵
内积(点乘):
a b = a T b = ∑ i = 1 3 a i b i = ∣ a ∣ ∣ b ∣ cos ⟨ a , b ⟩ {\bf{a}}{\bf{b}} = {{\bf{a}}^{\rm{T}}}{\bf{b}} = \sum\limits_{i = 1}^3 {{a_i}{b_i}} = |a||b|\cos \left\langle {a,b} \right\rangleab=aTb=i=1∑3aibi=∣a∣∣b∣cos⟨a,b⟩
其中⟨ a , b ⟩ \left\langle {a,b} \right\rangle⟨a,b⟩指向量a , b {a,b}a,b的夹角。
外积(叉乘):
a × b = ∥ e 1 e 2 e 3 a 1 a 2 a 3 b 1 b 2 b 3 ∥ = [ a 2 b 3 − a 3 b 2 a 3 b 1 − a 1 b 3 a 1 b 2 − a 2 b 1 ] = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] b = d e f a ∧ b \mathbf{a}\times \mathbf{b}=\left\| \begin{matrix} {{e}_{1}} & {{e}_{2}} & {{e}_{3}} \\ {{a}_{1}} & {{a}_{2}} & {{a}_{3}} \\ {{b}_{1}} & {{b}_{2}} & {{b}_{3}} \\ \end{matrix} \right\|=\left[ \begin{matrix} {{a}_{2}}{{b}_{3}}-{{a}_{3}}{{b}_{2}} \\ {{a}_{3}}{{b}_{1}}-{{a}_{1}}{{b}_{3}} \\ {{a}_{1}}{{b}_{2}}-{{a}_{2}}{{b}_{1}} \\ \end{matrix} \right]=\left[ \begin{matrix} 0 & -{{a}_{3}} & {{a}_{2}} \\ {{a}_{3}} & 0 & -{{a}_{1}} \\ -{{a}_{2}} & {{a}_{1}} & 0 \\ \end{matrix} \right]\mathbf{b}\overset{def}{\mathop{=}}\,{{\mathbf{a}}^{\wedge }}\mathbf{b}a×b=∥∥∥∥∥∥e1a1b1e2a2b2e3a3b3∥∥∥∥∥∥=⎣⎡a2b3−a3b2a3b1−a1b3a1b2−a2b1⎦⎤=⎣⎡0a3−a2−a30a1a2−a10⎦⎤b=defa∧b
a ∧ {{\mathbf{a}}^{\wedge }}a∧是一个反对称矩阵
a ∧ = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] , a = [ a 1 a 2 a 3 ] {{\mathbf{a}}^{\wedge }}=\left[ \begin{matrix} 0 & -{{a}_{3}} & {{a}_{2}} \\ {{a}_{3}} & 0 & -{{a}_{1}} \\ -{{a}_{2}} & {{a}_{1}} & 0 \\ \end{matrix} \right],\mathbf{a}=\left[ \begin{matrix} {{a}_{1}} & {{a}_{2}} & {{a}_{3}} \\ \end{matrix} \right]a∧=⎣⎡0a3−a2−a30a1a2−a10⎦⎤,a=[a1a2a3]
坐标系间的欧式变换
两个坐标系之间的运动由一个旋转加上一个平移组成,这种运动称为刚体运动。移动坐标系到世界坐标系之间,相差了一个欧式变换。
设某个单位正交基( e 1 , e 2 , e 3 ) ({{e}_{1}},{{e}_{2}},{{e}_{3}})(e1,e2,e3)经过一次旋转变成了( e ′ 1 , e ′ 2 , e ′ 3 ) ({{{{e}'}}_{1}},{{{{e}'}}_{2}},{{{{e}'}}_{3}})(e′1,e′2,e′3)。对于同一个向量a \mathbf{a}a(该向量并没有随着坐标系的旋转而发证运动),它在两个坐标系下的坐标为[ a 1 , a 2 , a 3 ] T {{\left[ {{a}_{1}},{{a}_{2}},{{a}_{3}} \right]}^{\text{T}}}[a1,a2,a3]T和[ a ′ 1 , a ′ 2 , a ′ 3 ] T {{\left[ {{{{a}'}}_{1}},{{{{a}'}}_{2}},{{{{a}'}}_{3}} \right]}^{\text{T}}}[a′1,a′2,a′3]T。因为向量本身没变,所以根据坐标的定义,有
[ e 1 , e 2 , e 3 ] [ a 1 a 2 a 3 ] = ( e ′ 1 , e ′ 2 , e ′ 3 ) [ a ′ 1 a ′ 2 a ′ 3 ] \left[ {{e}_{1}},{{e}_{2}},{{e}_{3}} \right]\left[ \begin{matrix} {{a}_{1}} \\ {{a}_{2}} \\ {{a}_{3}} \\ \end{matrix} \right]=({{{{e}'}}_{1}},{{{{e}'}}_{2}},{{{{e}'}}_{3}})\left[ \begin{matrix} {{{{a}'}}_{1}} \\ {{{{a}'}}_{2}} \\ {{{{a}'}}_{3}} \\ \end{matrix} \right][e1,e2,e3]⎣⎡a1a2a3⎦⎤=(e′1,e′2,e′3)⎣⎡a′1a′2a′3⎦⎤
上述等式的左右两边同时左乘[ e 1 T e 2 T e 3 T ] \left[\begin{array}{r}e_{1}^{T} \\ e_{2}^{T} \\ e_{3}^{T}\end{array}\right]⎣⎡e1Te2Te3T⎦⎤,那么左边的系数就变成了单位矩阵,所以:
[ a 1 a 2 a 3 ] = [ e 1 T e 1 ′ e 1 T e 2 ′ e 1 T e 3 ′ e 2 T e 1 ′ e 2 T e 2 ′ e 2 T e 3 ′ e 3 T e 1 ′ e 3 T e 2 ′ e 3 T e 3 ′ ] [ a 1 ′ a 2 ′ a 3 ′ ] = def R a ′ \left[\begin{array}{l} a_{1} \\ a_{2} \\ a_{3} \end{array}\right]=\left[\begin{array}{lll} e_{1}^{\mathrm{T}} e_{1}^{\prime} & e_{1}^{\mathrm{T}} e_{2}^{\prime} & e_{1}^{\mathrm{T}} e_{3}^{\prime} \\ e_{2}^{\mathrm{T}} e_{1}^{\prime} & e_{2}^{\mathrm{T}} e_{2}^{\prime} & e_{2}^{\mathrm{T}} e_{3}^{\prime} \\ e_{3}^{\mathrm{T}} e_{1}^{\prime} & e_{3}^{\mathrm{T}} e_{2}^{\prime} & e_{3}^{\mathrm{T}} e_{3}^{\prime} \end{array}\right]\left[\begin{array}{c} a_{1}^{\prime} \\ a_{2}^{\prime} \\ a_{3}^{\prime} \end{array}\right] \stackrel{\text { def }}{=} R a^{\prime}⎣⎡a1a2a3⎦⎤=⎣⎡e1Te1′e2Te1′e3Te1′e1Te2′e2Te2′e3Te2′e1Te3′e2Te3′e3Te3′⎦⎤⎣⎡a1′a2′a3′⎦⎤= def Ra′
定义R = [ e 1 T e 1 ′ e 1 T e 2 ′ e 1 T e 3 ′ e 2 T e 1 ′ e 2 T e 2 ′ e 2 T e 3 ′ e 3 T e 1 ′ e 3 T e 2 ′ e 3 T e 3 ′ ] \mathbf{R}=\left[\begin{array}{ccc} e_{1}^{\mathrm{T}} e_{1}^{\prime} & e_{1}^{\mathrm{T}} e_{2}^{\prime} & e_{1}^{\mathrm{T}} e_{3}^{\prime} \\ e_{2}^{\mathrm{T}} e_{1}^{\prime} & e_{2}^{\mathrm{T}} e_{2}^{\prime} & e_{2}^{\mathrm{T}} e_{3}^{\prime} \\ e_{3}^{\mathrm{T}} e_{1}^{\prime} & e_{3}^{\mathrm{T}} e_{2}^{\prime} & e_{3}^{\mathrm{T}} e_{3}^{\prime} \end{array}\right]R=⎣⎡e1Te1′e2Te1′e3Te1′e1Te2′e2Te2′e3Te2′e1Te3′e2Te3′e3Te3′⎦⎤
矩阵 R 描述了旋转本身,因此,称为 旋转矩阵。同时,该矩阵各分量是两个坐标系基的内积,由于基向量的长度为1,所以实际上是各基向量夹角的余弦值。所以这个矩阵也叫 方向余弦矩阵。
为了方便理解,我们举一个简单的旋转,二维的顺时针旋转和逆时针旋转,我们采用高中还是初中学的力的分解来求解旋转矩阵,将y轴和z轴视为一种力,然后将其正交分解在新的坐标轴y’和z’ ,然后再进行力的合成可以得到如下的结果:
逆时针旋转 (旋转前:z,y,旋转后:z’,y’)
顺时针旋转(旋转前:z’,y’,旋转后:z,y)
旋转矩阵是一个行列式为1的正交矩阵(A − 1 = A T {{A}^{-1}}={{A}^{\text{T}}}A−1=AT,A A T = I A{{A}^{\text{T}}}=IAAT=I)。因此行列式为1的正交矩阵也是一个旋转矩阵。
S O ( n ) = { R ∈ R n × n ∣ R R T = I , det ( R ) = 1 } \mathrm{SO}(n)=\left\{\boldsymbol{R} \in \mathbb{R}^{n \times n} \mid \boldsymbol{R} \boldsymbol{R}^{\mathrm{T}}=\boldsymbol{I}, \operatorname{det}(\boldsymbol{R})=1\right\}SO(n)={R∈Rn×n∣RRT=I,det(R)=1}
S O ( n ) \mathrm{SO}(n)SO(n)是 特殊正交群 的意思。这个集合由n维空间的旋转矩阵组成,特别地,S O ( 3 ) \mathrm{SO}(3)SO(3)就是指三维空间地旋转。
由于旋转矩阵为正交矩阵,它的逆(即转置)描述了一个相反的旋转。
a ′ = R − 1 a = R T a a^{\prime}=R^{-1} a=R^{\mathrm{T}} aa′=R−1a=RTa
这里R T R^{\mathrm{T}}RT刻画了一个相反的旋转。
用一个旋转矩阵R T R^{\mathrm{T}}RT和一个平移向量t tt完整地描述了一个欧式空间的坐标变换关系。
定义坐标系1、坐标系2,那么向量a aa在两个坐标系下的坐标为a 1 , a 2 a_1,a_2a1,a2
a 1 = R 12 a 2 + t 12 a_{1}=R_{12} a_{2}+t_{12}a1=R12a2+t12
这里的R 12 R_{12}R12是指“把坐标系我的向量变换到坐标系1”中。由于向量乘在这个矩阵的右边,它的下表是 从右读到左 的。
关于平移t 12 t_{12}t12,它实际对应的坐标系1原点指向坐标系2原点的向量, 在坐标系1下取的坐标
t 21 t_{21}t21,即从2指向1的向量在 __在坐标系2下的坐标,却并不等于− t 12 -t_{12}−t12,而是和两个系的旋转还有关系。
变换矩阵
引入齐次坐标和变换矩阵,为了简单描述进行多次变换的书写形式。
[ a ′ 1 ] = [ R t 0 T 1 ] [ a 1 ] = def T [ a 1 ] \left[\begin{array}{l} a^{\prime} \\ 1 \end{array}\right]=\left[\begin{array}{ll} R & t \\ 0^{\mathrm{T}} & 1 \end{array}\right]\left[\begin{array}{l} a \\ 1 \end{array}\right] \stackrel{\text { def }}{=} \boldsymbol{T}\left[\begin{array}{l} a \\ 1 \end{array}\right][a′1]=[R0Tt1][a1]= def T[a1]
在一个三维向量的末尾添加1,将其变成四维向量,称为 齐次坐标 。用T TT表示为变换矩阵。
关于变换矩阵 T TT,它具有比较特别的结构:左上角为旋转矩阵,右侧为平移向量,左下角为0向量,左下角为1.这种矩阵又称为特殊欧式群。
S E ( 3 ) = { T = [ R t 0 T 1 ] ∈ R 4 × 4 ∣ R ∈ S O ( 3 ) , t ∈ R 3 } \mathrm{SE}(3)=\left\{T=\left[\begin{array}{ll} R & t \\ 0^{T} & 1 \end{array}\right] \in \mathbb{R}^{4 \times 4} \mid R \in \mathrm{SO}(3), t \in \mathbb{R}^{3}\right\}SE(3)={T=[R0Tt1]∈R4×4∣R∈SO(3),t∈R3}
与S O ( 3 ) SO(3)SO(3)一样,求解该矩阵的逆表示一个反向的变换:
T − 1 = [ R T − R T t 0 T 1 ] T^{-1}=\left[\begin{array}{cc} R^{\mathrm{T}} & -R^{\mathrm{T}} t \\ 0^{\mathrm{T}} & 1 \end{array}\right]T−1=[RT0T−RTt1]
同样,用T 12 T_{12}T12表示从2到1的变换。