答案 0 :(得分:3)
如果R0和R1是两个应该相同的旋转矩阵,那么R0 * R1'应该是同一性的。对应于R0 * R1'的旋转矢量的大小是来自同一性的旋转(通常以弧度表示)。通过罗德里格斯公式有效地将旋转矩阵转换为旋转矢量。
使用常见用例Python和OpenCV回答您的问题,错误是
r, _ = cv2.Rodrigues(R0.dot(R1.T))
rotation_error_from_identity = np.linalg.norm(r)
答案 1 :(得分:1)
您正在寻找从第S1帧到第S0帧的单轴旋转(反之亦然)。旋转轴在这里并不重要。你想要旋转角度。
设R0和R1为4x4矩阵S0和S1的左上3x3旋转矩阵。现在计算E = R0 *转置(R1)(或转置(R0)* R1;它实际上并不重要。)
现在计算
d(0) = E(1,2) - E(2,1)
d(1) = E(2,0) - E(0,2)
d(2) = E(0,1) - E(1,0)
dmag = sqrt(d(0)*d(0) + d(1)*d(1) + d(2)*d(2))
phi = asin (dmag/2)
我遗漏了一些毛茸茸的细节(这些细节可以咬你)。特别地,上述对于非常大的误差角度(误差> 90度)是无效的,并且对于大的误差角度(角度> 45度)是不精确的。
如果您有一个从矩阵中提取单轴旋转的通用功能,请使用它。或者,如果您有一个从矩阵中提取四元数的通用函数,请使用它。 (单轴旋转和四元数彼此密切相关)。