Scipy 旋转模块在重新输入转换后的四元数时产生不同的结果

Scipy Rotation Module produces differing results when re-entering a converted quaternion

所以,想象一下我的情况。我需要在不了解该主题的情况下处理 Python 中的旋转转换。我偶然发现了 scipy.spatial.transform.Rotation class 并认为“很好!这一切都为我处理好了!”。但是当我对转换进行一些测试时,我发现了一些奇怪的事情。当我采用随机四元数并将其转换为旋转矩阵并返回时,新四元数与原始四元数完全不同,就像超出了任何似是而非的舍入误差。

谁能解释一下这个区别?

代码:

from scipy.spatial.transform import Rotation as R

quat = [0.40, 0.27, 0.29, 0.14]

print("\nOriginal Quaternion")
print(quat)

matrix_from_quat = R.from_quat(quat).as_matrix()

print("\nMatrix from Quaternion")
print(matrix_from_quat)

quat_from_matrix = R.from_matrix(matrix_from_quat).as_quat()

print("\nQuaternion from Matrix")
print(quat_from_matrix)

输出:

Original Quaternion
[0.4, 0.27, 0.29, 0.14]

Matrix from Quaternion
[[ 0.06714201  0.40047534  0.91384433]
 [ 0.88294712 -0.45038622  0.13250149]
 [ 0.46464646  0.7979798  -0.38383838]]

Quaternion from Matrix
[0.68945025 0.46537892 0.49985143 0.24130759]

将您的四元数转换为单位四元数(除以范数),然后就可以了