旋转矩阵的特征 - 重新正交化

dim*_*_tz 8 algorithm math rotation eigen rotational-matrices

在乘以大量旋转矩阵之后,由于舍入问题(去正交化),最终结果可能不再是有效的旋转矩阵

重新正交化的一种方法是遵循以下步骤:

  1. 将旋转矩阵转换为轴角度表示(链接)
  2. 将轴角转换回旋转矩阵(链接)

Eigen库中有什么东西可以通过隐藏所有细节来做同样的事情吗?或者有更好的食谱吗?

由于特殊的奇点情况,必须小心处理此过程,因此如果Eigen为此提供了更好的工具,那将是很好的.

Ali*_*Ali 10

我没有使用Eigen,也没有费心去查找API,但这里是一个简单的,计算上便宜且稳定的程序来重新正交旋转矩阵.该正交化程序取自William Premerlani和Paul Bizard的Direction Cosine Matrix IMU:Theory ; 方程19-21.

x,y并且z是(略微混乱的)旋转矩阵的行向量.让点积error=dot(x,y)在哪里dot().如果矩阵是正交的,则x和的点积y,即,error将为零.

error跨蔓延xy平等:x_ort=x-(error/2)*yy_ort=y-(error/2)*x.第三行z_ort=cross(x_ort, y_ort),根据定义正交于x_orty_ort.

现在,你仍然需要正常化x_ort,y_ortz_ort为这些载体应该是单位向量.

x_new = 1/2*(3-dot(x_ort,x_ort))*x_ort
y_new = 1/2*(3-dot(y_ort,y_ort))*y_ort
z_new = 1/2*(3-dot(z_ort,z_ort))*z_ort
Run Code Online (Sandbox Code Playgroud)

这就是全部,已经完成了.

使用Eigen提供的API实现它应该很容易.您可以轻松地提出其他正交化程序,但我认为它不会在实践中产生明显的差异.我在我的运动跟踪应用程序中使用了上述程序,并且它工作得非常好; 它既稳定又快速.


Dr.*_*ann 8

您可以使用QR分解系统地重新正交化,您可以使用Q因子替换原始矩阵.在库例程中,如果需要,必须通过否定Q中的相应列来检查和校正R的对角线条目是正的(如果原始矩阵接近正交,则接近1).

从极性或QP分解获得到给定矩阵的最接近的旋转矩阵Q,其中P是正半对称矩阵.可以迭代地或使用SVD来计算QP分解.如果后者具有分解USV',那么Q = UV'.


Dav*_*idS 6

奇异值分解应该非常稳健。引用参考文献:

\n\n
\n

令M=U\xce\xa3V为M的奇异值分解,则R=UV。

\n
\n\n

对于您的矩阵, \xce\xa3 中的奇异值应该非常接近 1。矩阵 R 保证是正交的,这是旋转矩阵的定义属性。如果计算原始旋转矩阵时没有任何舍入误差,那么在数值精度内,R 将与 M 完全相同。

\n