首先,我们看下LOAM系列的有些东西。(计算点云的分布特征)
很熟悉的LOAM系列算法,在判断所选取的特征点构成的平面/线是否合理的时候,采用计算其特征点的协方差矩阵,然后对其分解,求解特征值和特征向量的方式,假设特征值为降序排列(特征向量顺序也一一对应):
x1>x2>x3,对应的特征向量为v1,v2,v3.
- x2 >> x3:则该集合具有面特征,面的法向量方向与v3相同(两大一小,小的特征值对应的特征向量则是法向方向);
- x1 >> x2:则该集合具有线特征,线的方向与v3相同(两小一大,大的特征值对应的特征向量则是线方向);
- 不是以上两种,则无特征;
以上这种如果不理解可以搜一下,网上有一个动态图(我暂时忘记在哪儿了),很形象的展示了点云特征的变化;
另外,采用特征分解我们大都是调库去做,最常用的就是Eigen和Opencv,这里需要注意一下的就是Eigen和Opencv分解出来的顺序不同:
Eigen分解:特征值升序排列,特征向量为列向量形式;
Openv分解:特征值升序排列,特征向量为行向量形式 ;
总结:在loam(aloam)、floam、lego-loam中,均是采用以上方法校验线特征,平面特征是否合理采用最小二乘方程组+qr分解去求解法向,判断点到平面距离是否超出门限值实现的;