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
Run Code Online (Sandbox Code Playgroud)
这就是全部,已经完成了.
使用Eigen提供的API实现它应该很容易.您可以轻松地提出其他正交化程序,但我认为它不会在实践中产生明显的差异.我在我的运动跟踪应用程序中使用了上述程序,并且它工作得非常好; 它既稳定又快速.
您可以使用QR分解系统地重新正交化,您可以使用Q因子替换原始矩阵.在库例程中,如果需要,必须通过否定Q中的相应列来检查和校正R的对角线条目是正的(如果原始矩阵接近正交,则接近1).
从极性或QP分解获得到给定矩阵的最接近的旋转矩阵Q,其中P是正半对称矩阵.可以迭代地或使用SVD来计算QP分解.如果后者具有分解USV',那么Q = UV'.