| import numpy as np | |
| import torch | |
| import math | |
| import numba | |
| from scipy.spatial.transform import Rotation as R | |
| def euler2quaterion(euler, use_radian=True): | |
| """ | |
| euler: np.array, [batch, 3] | |
| return: the quaterion, np.array, [batch, 4] | |
| """ | |
| r = R.from_euler('xyz',euler, degrees=not use_radian) | |
| return r.as_quat() | |
| def quaterion2euler(quat, use_radian=True): | |
| """ | |
| quat: np.array, [batch, 4] | |
| return: the euler, np.array, [batch, 3] | |
| """ | |
| r = R.from_quat(quat) | |
| return r.as_euler('xyz', degrees=not use_radian) | |
| def rot2quaterion(rot): | |
| r = R.from_matrix(rot) | |
| return r.as_quat() | |
| def quaterion2rot(quat): | |
| r = R.from_quat(quat) | |
| return r.as_matrix() | |
| if __name__ == '__main__': | |
| euler = np.array([89.999,89.999,89.999] * 100).reshape([100,3]) | |
| q = euler2quaterion(euler, use_radian=False) | |
| e = quaterion2euler(q, use_radian=False) | |
| print(" ") | |