基于激光点云的道路可通行区域检测方法

2022-04-18 10:56宁小娟张金磊
计算机工程 2022年4期
关键词:单元格栅格障碍物

宁小娟,巩 亮,张金磊

(西安理工大学计算机科学与工程学院,西安 710048)

0 概述

随着人工智能技术的快速发展,无人驾驶应用越来越广泛。环境感知技术作为无人驾驶中至关重要的一环,是无人车安全性和智能性的保障,通过激光雷达采集技术可以捕获更多的道路环境信息,更加有利于车辆感知周边的道路情况,并做出合理的路径规划和行为操作。但由于激光雷达设备价格昂贵和场景数据复杂,因此激光雷达环境感知技术研究是一项极具挑战性的课题。

在地面分割方面,主要包括基于栅格[1-2]、基于线特征[3-4]、基于平面拟合[5]等3 类方法。文献[1]通过绘制网格化的三维点云数据的均值高程图并设置高度阈值来分割地面数据和非地面数据。文献[3]提出一种基于扫描线相邻点的特征信息的地面分割算法,该算法主要对相邻扫描线几何特征信息进行分析,将扫描线进行分类标记,得到地面扫描线并完成地面分割。文献[5]在拟合过程中通过先验信息的指导,加快了平面拟合的速度。前2 种方法实现简单,但在复杂场景中精度较低,基于平面拟合的地面分割方法效果较好,但处理时间较长。

在障碍物检测方面,主要包括如基于栅格[6-7]、基于线段特征[8-9]、基于网格聚类[10-11]、基于深度学习[12-15]等4 类方法。文献[6]将三维点云数据进行栅格化处理后,计算每个栅格的高程值,然后使用邻域连通域扩展栅格单元来实现场景中障碍物的分类。文献[8]通过提取激光雷达原始数据中包含的线段特征,检测其线段的高度和向量,利用与实时检测到的地面向量和高度产生的偏差来检测障碍物。文献[10]通过基于动态距离阈值的网格聚类算法对障碍物进行聚类,利用障碍物结构信息实现修正,最后使用支持向量机(Support Vector Machine,SVM)分类器对障碍物进行检测分类。文献[12]利用PointNet++作为主要网络提取特征,它是一种端到端网络,可以直接处理稀疏的三维点云。文献[13]提出一种SASSD 网络,通过设计的辅助网络将体素特征转换为点级特征来完成三维目标检测任务。对比以上方法,基于聚类的障碍物检测方法在传统方法中较为常见,检测精度较高,基于深度学习的障碍物检测方法普遍优于传统方法,但网络模型复杂且运行时间受计算机硬件设备的影响较大。

在可通行区域检测方面,多数方法基于高度差提取道路边界[16-17]。文献[16]提出一种基于道路形态分析的边界提取方法,通过曲线拟合边界信息的方式检测出道路边界线,从而划分出可通行区域。这类方法通常依赖于点云的高度特征,难以处理斜坡等高度不稳定区域。文献[17]提出一种基于直线特征的可通行区域实时检测算法,通过重点研究直线特征,避免了因高度带来的检测误差[18]。

本文提出一种基于激光点云的道路可通行区域检测方法。利用基于分段校准的RANSAC[19]算法对地面进行分割,采用基于体素化的DBSCAN[20]聚类算法完成障碍物聚类,融合多特征并利用JointBoost 实现对障碍物的分类标识,同时基于高程突变提取道路边界候选点检测道路边界。

1 方法描述

本文方法的整体流程如图1 所示,主要包括数据精简、地面分割、障碍物分割与识别、边界提取与优化、可通行区域检测等5 个部分,具体描述如下:

图1 可通行区域检测过程Fig.1 Detection process of passable areas

步骤1数据精简。以体素栅格为单元,以单元中所有点的质心为代表完成下采样处理,并通过分段统计点云数据的疏密程度消除噪声点。

步骤2地面分割。基于分段校准的RANSAC地面分割方法,将点云数据进行等距分段,针对每个分段的点云数据进行水平校准,进而利用RANSAC算法实现地面分割。

步骤3障碍物分割与识别。基于体素化的DBSCAN 聚类算法,实现对非地面点的障碍物的准确聚类。同时,融合多特征并利用局部特征分类器(JointBoost)实现对障碍物的分类识别。

步骤4边界提取与优化。基于高程突变提取道路边界候选点,并结合先验知识优化边界点,获得准确的道路边界线。

步骤5可通行区域检测。基于道路区域栅格化的标记处理,利用道路边界悬空障碍物判断并更新可通行区域。

2 场景数据预处理

2.1 基于体素化栅格的下采样

本文使用基于体素化的数据下采样方法,首先为体素单元确定合适的长宽高,并以此将整个场景数据体素栅格化,然后根据每个栅格单元中所有点的位置信息计算出该单元的质心,用质心代替整个单元中的所有点,遍历所有单元从而完成下采样工作。基于体素化栅格的下采样步骤具体如下:

1)读取场景点云数据。

2)确定整个场景包围盒的3 个边长LX、LY、LZ以及包围盒的最小点,即左下角的点minP。

3)假设体素单元格的边长分别为VX、VY、VZ,对点云数据划分后得到m×n×s个单元,其中,m=

4)从场景中任选一点p(pX,pY,pZ),这点所属栅格单元的坐标可通过式(1)计算得到:

通过每个栅格单元的坐标,可以计算其编号:

5)计算场景数据所有点所属的栅格单元编号,具有同一编号的点可以确定为同一栅格中的点。

6)计算每个单元格中所有点的质心并将其作为代表点,从而完成下采样。

2.2 基于点密度统计的边缘噪声消除

在下采样后的原始场景中的点云数据量明显减少,但是还存在一些离散点和距离扫描设备较远的无用点。为了消除这些噪声点,本文提出一种基于点密度统计的噪声消除算法,具体步骤如下:

1)在本文场景数据中,X轴方向为车辆行驶方向,Y轴方向为车辆右侧的方向,Z轴方向为垂直于地面向上的方向。将2.1 节得到的结果投影到YOZ平面。

2)将投影后的数据沿Y轴划分为N段区域(N=20)。

3)计算划分后每段区域点的密度Di,并据此绘制整个场景的密度曲线图。

4)根据式(3)计算每段区域点的密度占场景总密度的比值δi,并将其与阈值δth作对比,本文设定阈值δth为2 000。

5)在对比过程中,首先从场景起始位置开始遍历,如果δi≤δth,则认为这一段区域点的密度小,所包含信息较少,删除此段。判断下一段区域,直到出现δi>δth,则终止判断。然后从场景的末端开始往前判断,如果δi≤δth则删除此段,直到δi>δth结束判断,至此成功删除道路两端包含离散点的区域。

6)对于道路远处稀疏的无用点的消除,可以规定距离车辆和扫描设备30 m 内的区域为感兴趣区域,并使用直通滤波算法对场景区域进行划分,从而获得精简后的场景数据。精简前后的场景数据分别如图2(a)和图2(b)所示。

图2 精简结果Fig.2 Reduction results

2.3 基于分段校准的地面分割

在地面分割过程中,传统RANSAC 算法在提取平整的结构化道路数据时表现出良好的性能,但是对于存在缓坡、路面坑洼或者在数据采集过程中,由于车辆颠簸导致采集到的数据出现偏差等情况,单纯使用传统RANSAC 算法实现地面分割会出现欠分割现象。因此,本文对传统RANSAC 算法进行改进,提出基于分段校准的地面分割方法来提高传统RANSAC 算法处理复杂地面数据时的鲁棒性。

首先沿道路方向确定场景数据,即沿X轴坐标的最大值和最小值Xmax和Xmin,然后对场景数据进行等距划分,沿X轴坐标方向划分为N段区域,每段区域长1 m,其中N=。

在各段区域划分完成后,对每段均使用一次RANSAC 算法来检测平面,从而获得每一段区域的地面点云数据及其拟合的平面,通过该平面得到法向量V。由于使用激光雷达扫描得到场景数据,因此Z坐标轴是垂直于水平面的,通过定义垂直向量Q=(0,0,1)(如图3 所示),计算Q与V的校准矩阵T,对此段地面数据进行校准。

图3 地面数据校准示意图Fig.3 Schematic diagram of ground data calibration

已知法向量V(a1,a2,a3)和垂直向量Q(b1,b2,b3)的关系如式(4)所示。由此可知两向量的夹角θ计算公式如式(5)所示。将法向量V和垂直向量Q进行叉乘运算得到旋转轴R(r1,r2,r3),如式(6)所示。

对向量R归一化处理得到单位向量e(eX,eY,eZ),并将所有已知条件代入罗德里格旋转公式,得到对应的旋转矩阵T。

利用得到的旋转矩阵T对这一段区域的点云数据进行校准处理,再使用RANSAC 算法检测地面数据,将所有区域中检测的地面数据拼接得到完整的地面数据,从而完成该场景数据的地面分割操作。分段校准的地面分割示意图如图4 所示。

图4 分段校准的地面分割示意图Fig.4 Schematic diagram of ground segmentation with sectional calibration

3 可通行区域检测

3.1 基于体素化的DBSCAN 聚类

针对预处理后的数据进行聚类分割操作。本文对传统DBSCAN 聚类算法进行改进,提出一种基于体素化的DBSCAN 聚类算法,并在搜索最近邻数据时构建KD-Tree 加快搜索。首先对输入数据体素栅格化,选择体素单元格边长为d=15 cm,然后计算3 个坐标轴的最大值和最小值,结合单元格边长d,计算出3 个坐标轴已经划分好的栅格单元的对应层数m、n、s。以X轴为例,X轴栅格层数m的计算公式如下:

将数据进行栅格单元划分后,计算每个单元格所包含的点数Pts,并对全部非空单元格进行标记,确保这些单元格整体结构与原数据位置信息相同。然后设定点数阈值PtsMin,并按照一定规则对所有非空单元格进行判别:若Pts≥PtsMin,则将该单元格标记为核心单元格,其内所有点标记为核心点;若Pts<PtsMin,则需要二次判别。对该单元格内包含的所有点使用ε-邻域搜索进行二次判别:如果其所有点的邻域中存在核心点,则将该单元格标记为核心单元格;如果其所有点的邻域中不存在核心点,那么将该单元格标记为噪声单元格。

计算所有核心单元格的质心M,用质心点M来表示整个单元格中所有的点,利用质心点来参与DBSCAN 聚类算法邻近元的搜索和聚合,具体步骤如下:

将所有质心点存入集合S中,从中选取任意一点p,将点p与其ɛ-邻域中存在的其他质心点一同存入候选集合Scd中,并对这些点定义一个标签,表示它们所属同一聚类簇,这些质心点所表示的单元格和其所包含的点也属于同一聚类簇,然后从Scd中选取另一点,同样计算其ɛ-邻域中存在的质心点并更新所属聚类簇,直到集合Scd中没有元素,表示完成该点云簇的聚类。随后将集合S中已有所属聚类簇标记的质心点删除,并从中再随机选取一点重复上述操作,直到集合S没有元素为止。为了提高ɛ-邻域搜索操作的速度,构建KD-Tree 搜索最近邻点。

3.2 基于多特征的障碍物分类识别

通过不同特征之间的组合来实现障碍物识别任务,以较少特征下得到较好结果为目标,经过大量的实验得到6 类特征,具体描述如表1 所示。

表1 特征描述Table 1 Feature description

对于障碍物的识别,采用基于JointBoost 的分类识别方法,由于该方法的分类结果会存在一定的误差,因此本文在JointBoost 获得分类概率结果的基础上,结合场景实际空间特征信息对结果进行优化处理,具体步骤为:将JointBoost 分类器得到的结果输入集合U中,并将其中的元素按照大小排序,然后使用f4特征,即使用该聚类簇与车辆扫描设备的距离信息对集合U进行判别。

该聚类簇与车辆扫描设备的距离信息主要包括3 个坐标的距离信息,其中,X轴方向是车辆行驶方向,Y轴方向是车辆左右两侧方向,Z轴方向是高度,本文假设道路宽度为W。首先计算该聚类簇的所有点到扫描设备的距离中Y轴坐标的平均距离,然后对进行判断:如果≥W,则可以判断该聚类簇属于非道路区域,障碍物类别为车辆的可能性较低;如果<W,则可以判断该聚类簇属于道路区域,障碍物类别为建筑等其他类别的可能性较低。二次判断后确定最终的分类识别结果。

3.3 基于高程突变的道路边界检测

利用场景数据中的高程突变特征获得突变点作为道路边界候选点并拟合得到边界线。

1)统计数据中所有点的Z坐标作为数据点的高程分布并进行划分:

其中:ΔZ为此段数据中的高度差,即ΔZ=Zmax-Zmin;Gth为确定突变的高度阈值;H1表示此段数据为近地面数据,无需考虑数据突变情况;H2表示此段数据存在突变情况,需进一步确定突变点。

结合道路数据的高程分布,直道道路场景数据的道路边界外是建筑物,所使用的阈值Gth约为1 m。弯路道路场景突变区域分布在栅栏处和路外绿化处,使用的阈值Gth约为0.5 m。

2)将场景点云数据沿车辆行驶方向,即X轴方向进行划分,划分宽度为0.5 m,然后提取出一个子区域进行如下操作:

(1)将点云数据沿车辆两侧方向,即Y轴方向继续划分,划分宽度为0.5 m,这时将得到长宽均为0.5 m 的单元块,并将其存入序列F中。

(2)从序列F中按顺序取出一个单元块Fi,计算该单元块的最大高度Hmax,并与确定的阈值Gth进行比较:当Hmax≤Gth时,可以判定该单元所包含的数据为近地面数据,不需要进行更多的处理;当Hmax>Gth时,可以判定该单元所包含的数据为突变数据,可能存在边界候选点,记录该单元的序号,并存入需要进一步提取候选点的序列FG。

(3)对于FG中的所有单元块,采用从左右两个方向同时进行处理的模式,其中:向左方向处理单元块时,在Z值最小的前提下满足Y值最小的点作为候选点;向右方向处理单元块时,在Z值最小的前提下满足Y值最大的点作为候选点。

在完成上述操作后,对另一个子区域重复以上操作,直到遍历完整个场景数据,最终获得全部道路边界候选点。道路边界候选点提取示意图如图5 所示。

图5 道路边界候选点提取示意图Fig.5 Schematic diagram of road boundary candidate point extraction

3)为了避免候选点拟合的道路边界线出现误差,需要利用先验知识筛选这些候选点。先将2.3 节得到的地面数据视为道路面,计算该道路面沿X轴方向两侧边缘点的平均Y坐标值作为约束,大致确定路宽,如图6 中绘制的两条约束线所示,并将约束线左右0.5 m 区域内的候选点作为最终边界点。对于弯路场景,需要采用本文分割地面时使用到的分段处理思想,先对地面数据进行分段,使用直道道路边界的处理方法,处理每一段弯道地面,再将每一段区域的最终边界点进行拼接,从而完成筛选。在得到边界点后,使用最小二乘法对边界点进行拟合得到道路边界线。

图6 依据地面分割得到的两条约束线Fig.6 Two constraint lines obtained according to ground segmentation

3.4 道路可通行区域检测

基于道路边界信息和道路障碍物信息,首先采用八邻域标记算法对栅格进行标记处理,然后进行道路边界悬空障碍物判断更新可通行区域,最终完成可通行区域检测。道路可通行区域检测具体步骤如下:

1)假定经过3.3 节得到的道路边界线分别为l1与l2,根据这两条线的位置可以确定场景中的道路区域以及非道路区域。对道路区域进行保留,然后将其投影到XOY平面上并进行栅格化,其中选择长宽均为0.5 m 的栅格单元块。

2)采用图像处理中常用的八邻域标记方法对所有单元格进行分析,判断其是否为包含障碍物的单元格:若单元格内不包含点云数据,则标记其为可通行单元;若单元格内包含点云数据,则标记其为不可通行单元。

3)对判定为不可通行的单元格进行二次判断,排除那些为悬空障碍物的栅格块。首先基于3.1节和3.2节得到的障碍物分割识别结果,找到位于l1与l2附近的障碍物,对其沿车辆行驶方向作投影,然后对投影后的结果,即障碍物正面的轮廓进行判别:在日常生活中,如广告牌、路标、延伸出来的树木等悬空障碍物,正面轮廓多数为“┌”和“┐”两种。对于这种悬空障碍物的情况,车辆是可以通行的,因此需要对障碍物的正面轮廓进行悬空判别,并对所对应的标记单元格进行更新。标记后的栅格示意图如图7 所示。

图7 标记后的栅格示意图Fig.7 Schematic diagram of the grids after labeling

4 实验结果与分析

实验数据来源于KITTI 数据集与百度Apollo Scape 数据集。实验运行于Windows10 操作系统,程序使用C++与PCL 1.8.0 编写,处理器为Intel®CoreTMi7-7700 CPU @ 3.60 GHz,8 GB RAM。

4.1 地面分割结果分析

图8 为在2 种复杂场景下RANSAC 与本文方法的地面分割结果,其中场景1 为KITTI 数据集中常见的直道道路场景,场景2 为KITTI 数据集中道路包含绿化带的复杂道路场景。在场景1 中,RANSAC 方法的地面分割结果如图8(a)所示,其中矩形框中部分为实际的道路数据但是未被检测出来的结果,这样使得地面分割不完整,造成欠分割。在场景1 中,本文方法能完整地将点云数据中地面部分分割出来,如图8(b)所示。在场景2 中,RANSAC 和本文方法的地面分割结果如图8(c)和图8(d)所示。RANSAC 方法将数据中间和路旁的绿化带分割为地面,并且还有一部分的地面没有分割出来,如图8(c)中椭圆部分所示。由此可以看出,本文方法在复杂场景中具有较好的地面分割效果。

图8 地面分割结果Fig.8 Ground segmentation results

4.2 障碍物分割与识别结果分析

图9 为3 种欧式聚类分割[21]、DBSCAN 聚类分割和本文方法的障碍物分割与识别结果。图9(a)为非地面点云数据。如图9(b)所示,欧式聚类分割方法无法将特殊形状进行分割,且受算法参数设置影响较大,聚类个数比实际个数多,较小数据也存在无法聚类的情况,经过多组数据测试,消耗时间会随着点数的增多呈指数级增长。如图9(c)所示,DBSCAN 聚类分割方法可以解决欧式距离要求点云形状的问题,但在处理数据量大且复杂的点云数据分割时也会消耗较长时间。如图9(d)所示,本文方法能够有效地将道路场景中障碍物进行分割,可以处理由大量数据点组成的任意形状的点云数据,鲁棒性强,同时在分割过程中消耗时间也在可接受范围内,满足自动驾驶要求的实时性。图9(e)和图9(f)为在场景3 和场景4 中的本文方法的障碍物分割结果,其中,场景3 为Apollo Scape数据集中简单的直道场景,场景4 为Apollo Scape数据集中障碍物较多的复杂场景,可以看出本文方法在不同数据集中同样具有较好的障碍物分割效果。表2 为非地面点云数据场景下3 种方法的障碍物分割结果对比。

表2 3 种障碍物分割方法对比Table 2 Comparison of three obstacle segmentation methods

图9 障碍物分割结果Fig.9 Obstacle segmentation results

图10为场景数据完成障碍物分类识别后的结果。为便于结果展示,本文将建筑物等其他类障碍物和地面分割数据用灰色表示,道路上行驶的车辆障碍物用灰色包围盒包围,识别到的标志杆、树木、行人类障碍物用黑色包围盒包围。结果表明,本文方法在弯道等复杂场景下也具有良好的障碍物分类结果。

图10 障碍物分类识别结果Fig.10 Obstacle classification and recognition results

4.3 道路边界与可通行区域检测结果分析

为了便于结果展示,将激光雷达点云数据设置为灰色。图11(a)为直道场景数据原图,图11(b)为基于正确候选点拟合出的直道道路边界线。图11(c)为弯道场景数据原图,图11(d)为基于正确候选点拟合出的弯道道路边界线,使用方法和直道数据相同。结果表明,本文方法在弯道等复杂场景下也具有良好的道路边界检测效果。

图11 道路边界检测结果Fig.11 Road boundary detection results

基于本文设计的可通行区域检测方法对激光雷达点云直道场景数据进行处理,得到可通行区域检测结果如图12、图13 所示。

图12 直道场景可通行区域检测结果Fig.12 Detection results of passable area in straight road scene

图13 弯道场景可通行区域检测结果Fig.13 Detection results of passable area in curve road scene

激光雷达点云原图为图11(a)和图11(c),可通行区域检测的结果中灰色为检测到的可通行区域。采用文献[22]中的评估方法来验证本文提出的道路边界检测方法的准确性:通过手工提取激光雷达道路场景的真实边界作为基准计算道路宽度,并与本文道路边界检测方法得到的道路边界确定的道路宽度进行对比,准确性评估结果均超过了95%,证明了本文检测方法的可行性。道路边界检测准确性对比结果如表3 所示。

表3 道路边界检测准确率对比Table 3 Comparison of detection accuracy of road boundary

通过本文方法能够滤除道路边界外的建筑物区域和道路区域内的障碍物区域,从而获得无人车能够行驶的可通行区域。但是,由于激光雷达在采集过程中存在遮挡现象,如扫描仪附近的区域以及被其他路上车辆遮挡的区域等,这些区域会出现不连续的空白,因此单纯地依据激光雷达数据,这部分区域依旧是无法进行判断的。

5 结束语

本文提出一种基于激光点云数据的道路可通行区域检测方法。针对地面分割算法存在的欠分割问题,利用基于分段校准的RANSAC 算法,提升了原始RANSAC 算法在复杂场景中的地面分割鲁棒性。通过基于体素化的DBSCAN 聚类算法,在保证检测精度的同时提高了检测实时性。为提高可通行区域检测的准确率,根据数据高程突变点,提取道路边界候选点,并将其筛选拟合后得到完整的道路边界线,再对划分出的道路区域进行栅格处理,在遍历标记后得到较精准的可通行区域检测结果。实验结果表明,该方法具有较高的检测准确率以及较好的检测实时性,适用于复杂场景中的道路可通行区域检测。下一步将研究可满足无人驾驶道路行驶要求的动态数据环境感知技术,同时考虑道路动态障碍物的突发意图(如后方超车等特殊情况),进一步提升道路可通行区域检测效果。

猜你喜欢
单元格栅格障碍物
基于邻域栅格筛选的点云边缘点提取方法*
合并单元格 公式巧录入
流水账分类统计巧实现
基于A*算法在蜂巢栅格地图中的路径规划研究
玩转方格
玩转方格
高低翻越
SelTrac®CBTC系统中非通信障碍物的设计和处理
赶飞机
不同剖面形状的栅格壁对栅格翼气动特性的影响