我在这里想要实现的是将旋转矩阵从一个软件(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
这是我到目前为止试图找到的内容,如果有人可以帮助我或者指出一些我可能错过的文件,我会很高兴的!
首先,要找到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.
为了改变基础,我必须从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