Source code for rofunc.utils.robolab.coord
from .transform_tensor import *
[docs]def convert_ori_format(ori, src_format: str, tar_format: str):
"""
Convert orientation format from source to target format.
:param ori: either quaternion, rotation matrix or euler angles
:param src_format: source format
:param tar_format: target format
:return: converted orientation format
"""
assert src_format in ['quat', 'mat', 'euler'], "Unsupported source format."
assert tar_format in ['quat', 'mat', 'euler'], "Unsupported target format."
if src_format == tar_format:
return ori
if src_format == 'quat':
if tar_format == 'mat':
return rot_matrix_from_quat_tensor(ori)
elif tar_format == 'euler':
return euler_from_quat_tensor(ori)
else:
raise ValueError("Unsupported target format.")
elif src_format == 'mat':
if tar_format == 'quat':
return quat_from_rot_matrix_tensor(ori)
elif tar_format == 'euler':
return euler_from_rot_matrix_tensor(ori)
else:
raise ValueError("Unsupported target format.")
elif src_format == 'euler':
if tar_format == 'quat':
return quat_from_euler_tensor(ori)
elif tar_format == 'mat':
return rot_matrix_from_euler_tensor(ori)
else:
raise ValueError("Unsupported target format.")
[docs]def convert_quat_order(quat, src_order, tar_order):
"""
Convert quaternion order from source to target order.
:param quat:
:param src_order:
:param tar_order:
:return:
"""
assert src_order in ['wxyz', 'xyzw'], "Unsupported source order."
assert tar_order in ['wxyz', 'xyzw'], "Unsupported target order."
quat = check_quat_tensor(quat)
if src_order == tar_order:
return quat
if src_order == 'wxyz':
if tar_order == 'xyzw':
return quat[:, [1, 2, 3, 0]]
elif src_order == 'xyzw':
if tar_order == 'wxyz':
return quat[:, [3, 0, 1, 2]]