简介
点云地面点分割目前主要有如下几种方式:空域与频域。空间域方法为主流【后面的索引数字为末尾的链接论文顺序】:网格化方法(2,3)
、线方法(4,5,6)
、曲面方法(7,8,9,10,11)
。频域分割方法主要是Douillard.B在2012提出通过FFT变化频域来进行水下地形分割FFT-based Terrain Segmentation for Underwater Mapping。该篇代码已经放在文末的链接。本篇博客的高斯过程地面分割算法继承自线方法的策略,大概流程主要是首先将点云划分扇区,以此来将点云从无序变成有序,随后进行线拟合与地面种子点估计,然后进行高斯过程的回归估计协方差,以此来判断是否存在新的种子点,最后进行点云分割。关于多维多元高斯过程原理,推荐参考传送门,讲解较为细致与具体。
算法原理
高斯过程地面分割算法主要包含6个步骤:①polar grid map representation
;②line fitting
;③seed estimation
;④gaussian process regression with non-stationary covariance function
;⑤new seed evaluation
;⑥point-wise segmentation
;该算法输入原始点云,输出对每个原始点云打上标签label进行分辨地面点or障碍物。下面我们将分别介绍一下高斯过程地面分割的上述主要6个步骤:(下图为Ground Segmentation
的算法流程)
- Polar Grid Map Representation
这个polar grid map步骤主要讲点云划分成M个扇区,每个扇区划分成N个区间(bins)。该步骤与前论文【点云学习系列】之Fast segmentation of 3d point clouds for ground vehicles的预处理点云借鉴而来。这样就将无序的点云进行有序化存储。具体点云存储规则见上篇博客解释。
- Line Fitting
该Line Fitting过程就是上面算法流程图的函数fitline
代码该过程。关于线的提取主要借鉴论文A comparison of line extraction algorithms using 2d laser rangefinder for indoor mobile robotics(IROS)的方法。同时,该篇论文采用Incremental Algorithm,由于所有的点都被塞入了不同的扇区 P G i PG_i PGi里面,在塞入不同的 P G i PG_i PGi的时候根据它们到LIDAR传感器的距离已经进行了排序。每个点塞入 P G i PG_i PGi被分配一个length-scale
的计算公式如下:
l i = { a ∗ l g ( 1 ∣ g ( r i ) ∣ ) if ∣ g ( r i ) ∣ > g d e f a ∗ l g ( 1 ∣ g d e f ∣ ) otherwise l_i=\begin{cases} a*lg(\frac{1}{|g(r_i)|}) & \text{if $|g(r_i)|>g_{def}$}\\ a*lg(\frac{1}{|g_{def}|}) & \text{otherwise} \end{cases} li={ a∗lg(∣g(