Сципи против Матлаба: матрица трехмерных вращений - PullRequest
0 голосов
/ 16 октября 2019

Я сравнил выходные данные функций scipy и MATLAB для создания 3D-матриц вращения, и две программы показали разные результаты.

Первый SciPys scipy.spatial.transform.Rotation :

>>> import numpy as np
>>> from scipy.spatial.transform import Rotation as R

>>> R.from_euler('zyz', [np.pi/2, np.pi/2, 0]).as_dcm()
array([[ 0.00000000e+00, -2.22044605e-16,  1.00000000e+00],
       [ 1.00000000e+00,  2.22044605e-16,  0.00000000e+00],
       [-2.22044605e-16,  1.00000000e+00,  2.22044605e-16]])


>>> R.from_euler('zyz', [0, np.pi/2, np.pi/2]).as_dcm()
array([[ 0.00000000e+00, -1.00000000e+00,  2.22044605e-16],
       [ 2.22044605e-16,  2.22044605e-16,  1.00000000e+00],
       [-1.00000000e+00,  0.00000000e+00,  2.22044605e-16]])

Теперь функции matlabs eul2rotm :

>> eul2rotm([pi/2 pi/2 0], 'ZYZ')

ans =

    0.0000   -1.0000    0.0000
    0.0000    0.0000    1.0000
   -1.0000         0    0.0000


>> eul2rotm([0 pi/2 pi/2], 'ZYZ')

ans =

    0.0000   -0.0000    1.0000
    1.0000    0.0000         0
   -0.0000    1.0000    0.0000

В итоге порядок применения поворотов выглядит иначе. Но какой из них правильный? Я ценю любую помощь.

Протестировано с SciPy 1.3.1, NumPy 1.15.4 и Matlab R2018b.

...