600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 坐标变换(4)—旋转矩阵

坐标变换(4)—旋转矩阵

时间:2019-05-02 12:35:20

相关推荐

坐标变换(4)—旋转矩阵

1. 群

群(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​.

2. special orthogonal group

定义参考坐标系(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} r11​r12​+r21​r22​+r31​r32​=0r12​r13​+r22​r23​+r32​r33​=0r11​r13​+r21​r23​+r31​r33​=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​=⎣⎡​100​010​001​⎦⎤​,Rb​=⎣⎡​010​−100​001​⎦⎤​,Rc​=⎣⎡​001​−100​0−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] Ra​pa​=Rb​pb​=Rc​pc​=⎣⎡​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​=Rab​Rbc​

向量 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 Rab​pb​=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 -10100001R =1.0000 0 00 0.8660 -0.50000 0.5000 0.8660R_1 =0 -1.0000 00.8660 0 -0.50000.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 -10100001R =1.0000 0 00 0.8660 -0.50000 0.5000 0.8660R_1 =0 -0.8660 0.50001.0000 0 00 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=[r11​x^b​+r21​y^​b​+r31​z^b​,r12​x^b​+r22​y^​b​+r32​z^b​,r13​x^b​+r23​y^​b​+r33​z^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^s​y^​s​z^s​​⎦⎤​=⎣⎡​r11​x^s​+r12​y^​s​+r13​z^s​r21​x^s​+r22​y^​s​+r23​z^s​r31​x^s​+r32​y^​s​+r33​z^s​​⎦⎤​

此时,矩阵的乘积的每一行都是 { S } \{S\} {S}所对应基的线性组合,所以 { R } \{R\} {R}此时的意义肯定是在 { S } \{S\} {S}坐标系下描述。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。