将旋转矩阵从左手更改为右手+交换轴

时间:2014-01-16 14:56:15

标签: math graphics matrix

我在这里想要实现的是将旋转矩阵从一个软件(Quest3D)转换为另一个软件(Rock机器人框架),当然使用不同的参考系统。

我有一个左手(LH,以下)系统的运动矩阵(包含3x3旋转矩阵和平移向量的4x4矩阵)如下:

X positive forward
y positive up
z positive left

我想把它放在Right-Handed(RH以下)系统中,如下所示: (编辑)

North West Up (NWU): 
X positive forward
y positive **left**
z positive up

这是我到目前为止试图找到的内容,如果有人可以帮助我或者指出一些我可能错过的文件,我会很高兴的!

  1. 第一步:旋转顺序
  2. 首先,要找到Quest3D的理论旋转矩阵,我需要知道乘法的顺序是什么,它创建了带有欧拉角符号的旋转矩阵。

    使用以下参考系统

    我有:

    Rx_LH(tet1) =
    [ 1,         0,      0    ]
    [ 0, cos(tet1), -sin(tet1)]
    [ 0, sin(tet1),  cos(tet1)]
    
    Ry_LH(tet2) =
    [  cos(tet2), 0, sin(tet2)]
    [          0, 1,      0   ]
    [ -sin(tet2), 0, cos(tet2)]
    
    Rz_LH(tet3) =
    [ cos(tet3), -sin(tet3), 0]
    [ sin(tet3),  cos(tet3), 0]
    [         0,     0,      1]  
    

    然后由于有12种不同的计算旋转矩阵的方法,我写了一个小的matlab程序,它计算所有不同的选项,然后在Quest3D中使用一组指定的X,Y,Z值(参见图像{{3和数字值中的相应矩阵我试图匹配哪一个旋转矩阵是相同的,因此我将有我的旋转顺序。

    结果:没那么多..我设法有一个矩阵,它具有相同的元素但不在矩阵的正确位置。 (关于对角线实际上存在对称性)

    这是我的“目标矩阵”

    MatR_Sim_LH =
    
        0.9447    0.3130   -0.0978
       -0.0290    0.9363    0.1987
        0.1538   -0.1593    0.9752
    

    这是我最接近的事情

        0.9447   -0.2896    0.1538
        0.3130    0.9363   -0.1593
       -0.0978    0.1987    0.9752
    

    让我们说这是我的错误,创建旋转矩阵的顺序是213.

    1. 基础变更
    2. 为了改变基础,我必须从Quest3D参考系统转到a **右手持X前锋,右前锋右侧,左侧是正面**。

      我的想法如下。

      a)从左撇子变为右撇子 b)当我们在参考系中交换Y轴和Z轴时,对运动矩阵做必要的事情。

      表示a)我正在使用这个矩阵

      Switch_LH2RH =
      
           1     0     0
           0     1     0
           0     0    -1
      

      我应用于我的LH(左手)旋转矩阵Quest3D,如此

      MatR_Sim_RH     = Switch_LH2RH * MatR_Sim_LH * Switch_LH2RH; 
      

      然后b)切换Y和Z我在下面的表达式中使用以下矩阵

      Mat_toggle_ZY =
      
           1     0     0
           0     0     1
           0     1     0
      
      MatR_Rock_RH    =  Mat_toggle_ZY * MatR_Sim_RH * Mat_toggle_ZY; 
      

      但当然,由于某种原因它可能对我来说并不明显!

      感谢您的帮助

      V.v

0 个答案:

没有答案