测量旋转矩阵之间的差异

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

您的代码看起来不错。问题是当你用给定的欧拉角组合两个旋转时,你不会简单地得到由这些角度之和给出的旋转。