Skip to content

Commit 70c43ed

Browse files
committed
Add rot2quat and quat2euler
1 parent 023a619 commit 70c43ed

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

rednose/helpers/sympy_helpers.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ def quat2rot(quats):
2727
return Rs
2828

2929

30+
def rot2quat(Rs):
31+
q0 = sp.sqrt(1 + Rs[:, 0, 0] + Rs[:, 1, 1] + Rs[: 2, 2]) / 2
32+
q1 = (Rs[:, 2, 1] - Rs[:, 1, 2]) / (4 * q0)
33+
q2 = (Rs[:, 0, 2] - Rs[:, 2, 0]) / (4 * q0)
34+
q3 = (Rs[:, 1, 0] - Rs[:, 0, 1]) / (4 * q0)
35+
return sp.Matrix([q0, q1, q2, q3])
36+
37+
3038
def euler2quat(eulers):
3139
eulers = np.array(eulers)
3240
if len(eulers.shape) > 1:
@@ -52,9 +60,22 @@ def euler2quat(eulers):
5260
return quats.reshape(output_shape)
5361

5462

63+
def quat2euler(quats):
64+
q0, q1, q2, q3 = quats[:, 0], quats[:, 1], quats[:, 2], quats[:, 3]
65+
gamma = sp.atan2(2 * (q0*q1 + q2*q3), 1 - 2 * (q1**2 + q2**2))
66+
theta = sp.asin(2 * (q0*q2 - q3*q1))
67+
psi = sp.atan2(2 * (q0*q3 + q1*q2), 1 - 2 * (q2**2 + q3**2))
68+
return sp.Matrix([gamma, theta, psi])
69+
70+
5571
def euler2rot(eulers):
5672
return quat2rot(euler2quat(eulers))
5773

74+
75+
def rot2euler(Rs):
76+
return quat2euler(rot2quat(Rs))
77+
78+
5879
rotations_from_quats = quat2rot
5980

6081

0 commit comments

Comments
 (0)