0

Could you explain what is happening here?

from scipy.spatial.transform import Rotation as R

euler_angles1 = [ -150, -180, -120 ]
rotation1 = R.from_euler("xyz", euler_angles1,degrees=True)
print(rotation1.as_euler("xyz",degrees=True))

euler_angles2 = [ -114, -83, -68 ]
rotation2 = R.from_euler("xyz", euler_angles2,degrees=True)
print(rotation2.as_euler("xyz",degrees=True))

Output:

array([ 30., 0., 60])
array([ -114., -83., -68.])

It seems that some angles get transformed to pi - angle while others remain as they were. Is there a rule? Is there an option to have the output euler angles remain the same as the input ones?

Scipy version: 1.5.4 Numpy version: 1.19.5

I tried the code above. My expectations were that the angles would be left unchanged after using from_euler and as_euler

DavidBoja
  • 21
  • 1
  • 3

1 Answers1

1

They're equivalent. There's some intuition that there should probably be more than one way, one set of euler angles, to achieve the same rotation.

It's likely that scipy represents the rotation internally not as the euler angles you passed in but rather something more generic like a quaternion. So the euler angles are recalculated when you ask for them back and the values you receive are functionally equivalent.

> rot1 = R.from_euler("xyz", [-150, -180, -120], degrees=True)
> rot2 = R.from_euler("xyz", [30, 0, 60], degrees=True)
> rot1.as_matrix() @ [1, 2, 3]
array([0.29903811, 0.98205081, 3.59807621])

> rot2.as_matrix() @ [1, 2, 3]
array([0.29903811, 0.98205081, 3.59807621])
Woodford
  • 3,746
  • 1
  • 15
  • 29