$ {^ {a} R_ {b}} $ = $ \ left(\ begin {矩阵} 0&1&0 \\ -1&0&0 \\ 0&0&1 \\\ end {matrix} \ right)$

$ {^ {a} R_ {c }} $ = $ \ left(\ begin {matrix} 0&0&1 \\ 1&0&0 \\ 0&1&0 \\\ end {matrix} \ right)$

对于$ {^ {a} R_ {b}} $我认为,它必须绕z轴旋转,因为
$ R(z,\ theta)= \ left(\ begin {矩阵} cos(\ theta)&-sin(\ theta)&0 \\ sin(\ theta)&cos(\ theta)&0 \\ 0&0&1 \\\ end {matrix} \ right)$

$ {^ {a} R_ {b}}中的位置$ a_ {13},a_ {23},a_ {33},a_ {32},a_ {31} $ $和$ R(z,\ theta)$是相同的。

所以我解决了$ cos(\ theta)= 0 $ => $ \ theta = 90°$ =>围绕z旋转90° -axis。

但是,如果旋转超过1次,例如$ {^ {a} R_ {c}} $,我该如何解决?

评论

请参阅此问题的答案。

#1 楼

摘自Wikipedia文章,有关旋转矩阵和欧拉轴/角度之间的转换:

给出旋转矩阵:
$$
R
= \ begin {bmatrix}
r_ {11}和r_ {12}和r_ {13} \\
r_ {21}和r_ {22}和r_ {23} \\
r_ {31}和r_ {32}和r_ {33}
\ end {bmatrix}
\\
$$

您可以获得旋转角度:
$$
\ theta = \ cos ^ {-1} \ left [0.5(r_ {11} + r_ {22} + r_ {33}-1)\ right] \\
n_x = \ frac {r_ {32}-r_ {23}} {2 \ sin(\ theta)} \\
n_y = \ frac {r_ {13}-r_ {31}} {2 \ sin( \ theta)} \\
n_z = \ frac {r_ {21}-r_ {12}} {2 \ sin(\ theta)} \\
$$

因此,鉴于您的第一个问题:
$$
R
= \ begin {bmatrix}
0&1&0 \\
-1&0&0 \ \
0&0&1
\ end {bmatrix}
\\
$$

$$
\ theta = \ cos ^ {-1} \ left [0.5(0 +0 +1-1)\ right] \\
\ theta = 1.57 \ mbox {rad} = 90 ^ {\ circ} \\
n_x = \ frac {0-0} {2 \ sin(90 ^ {\ circ})} \\
n_y = \ frac {0-0} {2 \ sin(90 ^ {\ circ})} \ \
n_z = \ frac {-1 -1} {2 \ sin(90 ^ {\ circ})} \\
n_x = 0 \\
n_y = 0 \\
n_z = -1 \\
$$
,因此您可以在这里看到,对于第一个问题,您围绕-z轴旋转了90度,或者等效地,您围绕+ z轴旋转了-90度。

同样,您的第二个问题:
$$
R
= \ begin {bmatrix}
0&0&1 \\
1&0&0 \\
0&1&0
\ end {bmatrix}
\\

$$
\ theta = \ cos ^ {-1} \ left [0.5(0 +0 + 0-1)\ right] \\
\ theta = 2.09 \ mbox {rad} = 120 ^ {\ circ} \\
n_x = \ frac {1-0} {2 \ sin(120 ^ {\ circ})}} \\
n_y = \ frac {1-0} {2 \ sin(120 ^ {\ circ})} \\
n_z = \ frac {1-0} {2 \ sin(120 ^ {\ circ})} \\
n_x = 0.577 \\
n_y = 0.577 \\
n_z = 0.577 \\
$$

在这里,您有一个旋转轴,即x = y = z = 0.577(但可以将其缩放为x = y = z = 1,只是为了考虑旋转的性质),然后旋转+120

希望有帮助;如果我有不清楚的地方,请发表评论。

#2 楼

对于初学者,旋转矩阵的乘积不是唯一的。


通过组合三个基本旋转可以实现任何方向。1


要恢复一组旋转角,您需要开始完整的旋转矩阵,然后向后工作。让我们看一下3-2-1旋转。

$ {R_ {321}} $ = $ \ left(\ begin {matrix}
cos \ theta cos \ phi&cos \ theta sin \ psi&-sin \ theta \\
sin \ phi sinθcosψ−cos \ phisinψ&sin \ phisinθsinψ+ cos \ phicosψ&sin \ phicosθ\\
cos \ phisinθcosψ+ sin \ phisinψ&co \ phisinθsinψ-sin \ phicosψ和cos \ phicosθ\\
\ end {matrix} \ right)$

我们现在可以求解$ \ theta $。这可用于求解$ \ psi $和$ \ phi $。查看您的$ ^ aR_c $矩阵,我们可以找到$ \ theta $是$-\ frac {\ pi} {2} $,$ \ psi $是$-\ frac {\ pi} {2} $和$ \ phi $为0。


__

有关恢复欧拉旋转的更多信息。

#3 楼

为了解决个别情况,如果您不想自己编写脚本,则可以在此在线计算器中输入3D旋转格式的矩阵,将输出切换为度,然后查看轴角度输出。

如果您的$ {} ^ aR_c $,它会绕轴[0.5773503、0.5773503、0.5773503]输出120度旋转。

#4 楼

考虑任意旋转矩阵$ \ bf R $ $ \ in $ SO(3)。我们可以用它来变换矢量$ v \ in {\ mathbb R} ^ 3 $由$$ w = {\ bf R} v $$
因此旋转轴必须是$ \ bf R $的特征向量。由于$ \ bf R $是一个3x3矩阵,因此它具有3个特征向量。每个特征向量都有一个关联的特征值:总是有至少一个等于1的特征值(即,向量的长度通过旋转而不变),并且对于非零旋转,其他两个特征值是复共轭对。对应于等于一的特征值的特征向量是旋转轴。

MATLAB中的一个简单示例

>> R = roty(0.3)
R =
    0.9553         0    0.2955
         0    1.0000         0
   -0.2955         0    0.9553


,它绕y轴旋转0.3弧度(此功能来自我的机器人工具箱对于MATLAB)。

>> [x,e] = eig(R)

x =

   0.7071 + 0.0000i   0.7071 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i   1.0000 + 0.0000i
   0.0000 + 0.7071i   0.0000 - 0.7071i   0.0000 + 0.0000i

e =

   0.9553 + 0.2955i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.9553 - 0.2955i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i   1.0000 + 0.0000i


其中x是矩阵,其列为特征向量,而e是特征值的对角矩阵。单位特征值在第3列中,因此我们的旋转轴是x的第三列,该列为实数并等于$ [0,1,0] ^ T $,这是平行于y轴(原始轴)的单位矢量旋转的特征。

复杂的特征值告诉您绕轴旋转的数量为您

>> angle(e(1,1))
ans =
    0.3000


要使用相反的方向,从旋转轴和角度到旋转矩阵,请使用Rodrigues公式。在工具箱中以

>> [theta,v] = tr2angvec(R)

theta =
    0.3000

v =
         0    1.0000         0

的形式提供