(二) ICP算法

ICP算法采用最小二乘估计计算变换矩阵,原理简单且具有较好的精度,但是由于采用了迭代计算,导致算法计算速度较慢,而且采用ICP进行配准计算时,其对待配准点云的初始位置有一定要求,若所选初始位置不合理,则会导致算法陷入局部最优。

IterativeClosestPoint类提供了标准ICP算法的实现(The transformation is estimated based on SVD),算法迭代结束条件有如下几个:

  • 最大迭代次数: 最大迭代次数。 setMaximumIterations (100)
  • 两次变化矩阵之间的差值:前一个变换矩阵和当前变换矩阵的差异小于阈值时,就认为已经收敛了。 setTransformationEpsilon(1e-10)
  • 均方误差(MSE):均方误差和小于给定阈值, 停止迭代。 setEuclideanFitnessEpsilon(0.01)

align函数是配准,在使用之前至少给定上面三个条件,还有setMaxCorrespondenceDistance等其他函数。PCL的ICP里的transformation estimation就是基于SVD分解实现的。

如果从一个好的初始猜想变换矩阵开始迭代,那么算法将会在比较少的迭代之后就收敛,配准结果也较好,当像我们这里没有指定初始guess时,就默认使用单位阵Matrix4::Identity()