当我用MatLab和Python从Euler变换到旋转矩阵时,我得到了不同的结果,我不知道为什么。Python
代码
from scipy.spatial.transform import Rotation as R
cam_angle = 45
R.from_euler('xyz', [-90-cam_angle, 0, -90], degrees=True).as_matrix()
提供:
array([[ 0. , -0.70710678, 0.70710678],
[-1. , 0. , 0. ],
[ 0. , -0.70710678, -0.70710678]])
而MatLab代码
cam_angle = 45
eul2rotm(deg2rad([-90-cam_angle, 0, -90]),'xyz')
提供:
0.0000 1.0000 0
0.7071 -0.0000 0.7071
0.7071 -0.0000 -0.7071
有谁有主意吗?
1条答案
按热度按时间k5ifujac1#
在您的Python代码中,
from_euler
的seq
参数使用大写的'XYZ'
,以使用内部旋转,这似乎是您的MATLAB正在使用的约定。(此约定在不同的MatLab函数中有所不同。参见詹姆斯·特萨的评论。)结果:
来自Scipy Docs的评论:
参数:
seq
字符串指定旋转轴的顺序。最多3个字符属于集合{‘X’,‘Y’,‘Z’}用于内部旋转,或{‘x’,‘y’,‘z’}用于外部旋转。外部旋转和内部旋转不能在一个函数调用中混合使用。