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]
将您的四元数转换为单位四元数(除以范数),然后就可以了
所以,想象一下我的情况。我需要在不了解该主题的情况下处理 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]
将您的四元数转换为单位四元数(除以范数),然后就可以了