|  |  |  | import numpy as np
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from openpilot.common.transformations.orientation import euler2quat, quat2euler, euler2rot, rot2euler, \
 | 
					
						
							|  |  |  |                                                rot2quat, quat2rot, \
 | 
					
						
							|  |  |  |                                                ned_euler_from_ecef
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | eulers = np.array([[ 1.46520501,  2.78688383,  2.92780854],
 | 
					
						
							|  |  |  |        [ 4.86909526,  3.60618161,  4.30648981],
 | 
					
						
							|  |  |  |        [ 3.72175965,  2.68763705,  5.43895988],
 | 
					
						
							|  |  |  |        [ 5.92306687,  5.69573614,  0.81100357],
 | 
					
						
							|  |  |  |        [ 0.67838374,  5.02402037,  2.47106426]])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | quats = np.array([[ 0.66855182, -0.71500939,  0.19539353,  0.06017818],
 | 
					
						
							|  |  |  |        [ 0.43163717,  0.70013301,  0.28209145,  0.49389021],
 | 
					
						
							|  |  |  |        [ 0.44121991, -0.08252646,  0.34257534,  0.82532207],
 | 
					
						
							|  |  |  |        [ 0.88578382, -0.04515356, -0.32936046,  0.32383617],
 | 
					
						
							|  |  |  |        [ 0.06578165,  0.61282835,  0.07126891,  0.78424163]])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ecef_positions = np.array([[-2711076.55270557, -4259167.14692758,  3884579.87669935],
 | 
					
						
							|  |  |  |                           [ 2068042.69652729, -5273435.40316622,  2927004.89190746],
 | 
					
						
							|  |  |  |                           [-2160412.60461669, -4932588.89873832,  3406542.29652851],
 | 
					
						
							|  |  |  |                           [-1458247.92550567,  5983060.87496612,  1654984.6099885 ],
 | 
					
						
							|  |  |  |                           [ 4167239.10867871,  4064301.90363223,  2602234.6065749 ]])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ned_eulers = np.array([[ 0.46806039, -0.4881889 ,  1.65697808],
 | 
					
						
							|  |  |  |                     [-2.14525969, -0.36533066,  0.73813479],
 | 
					
						
							|  |  |  |                     [-1.39523364, -0.58540761, -1.77376356],
 | 
					
						
							|  |  |  |                     [-1.84220435,  0.61828016, -1.03310421],
 | 
					
						
							|  |  |  |                     [ 2.50450101,  0.36304151,  0.33136365]])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestOrientation:
 | 
					
						
							|  |  |  |   def test_quat_euler(self):
 | 
					
						
							|  |  |  |     for i, eul in enumerate(eulers):
 | 
					
						
							|  |  |  |       np.testing.assert_allclose(quats[i], euler2quat(eul), rtol=1e-7)
 | 
					
						
							|  |  |  |       np.testing.assert_allclose(quats[i], euler2quat(quat2euler(quats[i])), rtol=1e-6)
 | 
					
						
							|  |  |  |     for i, eul in enumerate(eulers):
 | 
					
						
							|  |  |  |       np.testing.assert_allclose(quats[i], euler2quat(list(eul)), rtol=1e-7)
 | 
					
						
							|  |  |  |       np.testing.assert_allclose(quats[i], euler2quat(quat2euler(list(quats[i]))), rtol=1e-6)
 | 
					
						
							|  |  |  |     np.testing.assert_allclose(quats, euler2quat(eulers), rtol=1e-7)
 | 
					
						
							|  |  |  |     np.testing.assert_allclose(quats, euler2quat(quat2euler(quats)), rtol=1e-6)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_rot_euler(self):
 | 
					
						
							|  |  |  |     for eul in eulers:
 | 
					
						
							|  |  |  |       np.testing.assert_allclose(euler2quat(eul), euler2quat(rot2euler(euler2rot(eul))), rtol=1e-7)
 | 
					
						
							|  |  |  |     for eul in eulers:
 | 
					
						
							|  |  |  |       np.testing.assert_allclose(euler2quat(eul), euler2quat(rot2euler(euler2rot(list(eul)))), rtol=1e-7)
 | 
					
						
							|  |  |  |     np.testing.assert_allclose(euler2quat(eulers), euler2quat(rot2euler(euler2rot(eulers))), rtol=1e-7)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_rot_quat(self):
 | 
					
						
							|  |  |  |     for quat in quats:
 | 
					
						
							|  |  |  |       np.testing.assert_allclose(quat, rot2quat(quat2rot(quat)), rtol=1e-7)
 | 
					
						
							|  |  |  |     for quat in quats:
 | 
					
						
							|  |  |  |       np.testing.assert_allclose(quat, rot2quat(quat2rot(list(quat))), rtol=1e-7)
 | 
					
						
							|  |  |  |     np.testing.assert_allclose(quats, rot2quat(quat2rot(quats)), rtol=1e-7)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_euler_ned(self):
 | 
					
						
							|  |  |  |     for i in range(len(eulers)):
 | 
					
						
							|  |  |  |       np.testing.assert_allclose(ned_eulers[i], ned_euler_from_ecef(ecef_positions[i], eulers[i]), rtol=1e-7)
 | 
					
						
							|  |  |  |       #np.testing.assert_allclose(eulers[i], ecef_euler_from_ned(ecef_positions[i], ned_eulers[i]), rtol=1e-7)
 | 
					
						
							|  |  |  |     # np.testing.assert_allclose(ned_eulers, ned_euler_from_ecef(ecef_positions, eulers), rtol=1e-7)
 |