测量旋转矩阵之间的差异
measure difference between rotation matrix
我有两个旋转矩阵
假设初始基础 O 是 R^3 中的恒等式,并且
旋转 RAO 将 O 中的一个点转换为基础 A 并且
旋转 RBO 将 O 中的一个点转换为基 B
我试图计算 RAO 和 RBO 之间的角度差
喜欢:
from scipy.spatial.transform import Rotation
def Rdiff(RAO, RBO):
RBA = RAO.T @ RBO
RBA = Rotation.from_matrix(RBA)
return RBA.as_euler('zyx', degrees=True)
RAO = Rotation.from_euler('zyx', [10, 0, 13],
degrees=True).as_matrix()
RBO = Rotation.from_euler('zyx', [0, 63, 40],
degrees=True).as_matrix()
print(Rdiff(RAO, RBO))
但结果:
[-16.65056217 57.31794707 41.4856089 ]
与我预期的不同:[-10, 63, 26]
这里有什么问题吗?我该如何解决?
[编辑]
我使用了这里的数学公式:https://math.stackexchange.com/questions/87338/change-in-rotation-matrix/87698#comment4515183_87698
我检查了 Rdiff 函数中的 RAO、RBO、RBA 是单一的。
[编辑]
我在 Rdiff 中的原始功能是错误的,
所以我换行:
RBA = RBO @ RAO.T
进入
RBA = RAO.T @ RBO
您的代码看起来不错。问题是当你用给定的欧拉角组合两个旋转时,你不会简单地得到由这些角度之和给出的旋转。
我有两个旋转矩阵 假设初始基础 O 是 R^3 中的恒等式,并且 旋转 RAO 将 O 中的一个点转换为基础 A 并且 旋转 RBO 将 O 中的一个点转换为基 B
我试图计算 RAO 和 RBO 之间的角度差 喜欢:
from scipy.spatial.transform import Rotation
def Rdiff(RAO, RBO):
RBA = RAO.T @ RBO
RBA = Rotation.from_matrix(RBA)
return RBA.as_euler('zyx', degrees=True)
RAO = Rotation.from_euler('zyx', [10, 0, 13],
degrees=True).as_matrix()
RBO = Rotation.from_euler('zyx', [0, 63, 40],
degrees=True).as_matrix()
print(Rdiff(RAO, RBO))
但结果:
[-16.65056217 57.31794707 41.4856089 ]
与我预期的不同:[-10, 63, 26]
这里有什么问题吗?我该如何解决?
[编辑] 我使用了这里的数学公式:https://math.stackexchange.com/questions/87338/change-in-rotation-matrix/87698#comment4515183_87698 我检查了 Rdiff 函数中的 RAO、RBO、RBA 是单一的。
[编辑] 我在 Rdiff 中的原始功能是错误的, 所以我换行:
RBA = RBO @ RAO.T
进入
RBA = RAO.T @ RBO
您的代码看起来不错。问题是当你用给定的欧拉角组合两个旋转时,你不会简单地得到由这些角度之和给出的旋转。