dim*_*_tz 8 algorithm math rotation eigen rotational-matrices
在乘以大量旋转矩阵之后,由于舍入问题(去正交化),最终结果可能不再是有效的旋转矩阵
重新正交化的一种方法是遵循以下步骤:
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跨蔓延x和y平等:x_ort=x-(error/2)*y和y_ort=y-(error/2)*x.第三行z_ort=cross(x_ort, y_ort),根据定义正交于x_ort和y_ort.
现在,你仍然需要正常化x_ort,y_ort并z_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
这就是全部,已经完成了.
使用Eigen提供的API实现它应该很容易.您可以轻松地提出其他正交化程序,但我认为它不会在实践中产生明显的差异.我在我的运动跟踪应用程序中使用了上述程序,并且它工作得非常好; 它既稳定又快速.
您可以使用QR分解系统地重新正交化,您可以使用Q因子替换原始矩阵.在库例程中,如果需要,必须通过否定Q中的相应列来检查和校正R的对角线条目是正的(如果原始矩阵接近正交,则接近1).
从极性或QP分解获得到给定矩阵的最接近的旋转矩阵Q,其中P是正半对称矩阵.可以迭代地或使用SVD来计算QP分解.如果后者具有分解USV',那么Q = UV'.