高翔大神在《视觉SLAM十四讲》中介绍了一个效率很高的3D点云对齐算法。假设点云对应关系是已知的,这个方法先求解旋转,再求解平移。
假设有两组点云和,求到的变换和,使满足
这个问题分为三个简单步骤:
- 转化为去质心坐标。令和分别为和的质心(即坐标算数平均值),去质心坐标,。
- 求解旋转矩阵。这是最微妙的部分,其具体原理在[1]和[2]中有介绍。我们令,这里显然是一个3*3的矩阵。接下来对进行SVD分解,得到。当满秩时,则。
- 求解平移。
与这里描述的naive方法相比,SVD方法时间复杂度为O(n),相关实现在Eigen中也有提供,十分适合实际应用。
P.S.: 第2步求解的应该表示的是到的一个自由变换,参照以前的这篇文章可以看出,其SVD结果对角线上各个元素表示的是其在三组正交基上的放缩比,我们直接取即是认为它在各个基上的放缩比为1(即不放缩),从而得到了一个满足需要的刚体变换。
[1]K. S. Arun, T. S. Huang, and S. D. Blostein, “Least-squares fitting of two 3-d point sets,” PatternAnalysisandMachineIntelligence, IEEETransactionson,no.5,pp.698–700,1987.
[2]F. Pomerleau, F. Colas, and R. Siegwart, “A review of point cloud registration algorithms for mobile robotics,” Foundations and Trends in Robotics (FnTROB), vol. 4, no. 1, pp. 1– 104, 2015.