邹兵,陈鹏,刘登洪
(重庆市勘测院,重庆 401520)
近年来,自动驾驶汽车环境感知技术备受关注,车端安装激光雷达、相机、毫米波等传感器可精准感知障碍物,保障自动驾驶汽车安全行驶[1]。激光雷达因其高精度、高采样、测量距离远和范围广的特性被广泛应用于无人驾驶汽车的感知系统[2]中,同时激光雷达的工作环境不受光照影响,每帧数据可扫描到几万至几十万个点,可细致描述环境信息,相对相机传感器优势显著。当激光雷达感知环境中障碍物时,也会观测到冗余地面点,导致算法增加额外内存消耗,影响自动驾驶感知系统实时性能,因此实现分割地面算法具有现实意义。
现有地面分割算法中,基于物理排序算法[3~6]将激光点云按照一定规则进行线序化,通过遍历相邻点的局部几何特征分割地面点,但此算法需设置相关参数区分几何特征,因此在复杂场景进行地面分割时会出现过分割和欠分割,同时激光雷达的相关设计参数灵活多变,无法提供统一的规则有序化点云,因此基于物理排序算法应用受限。基于栅格投影算法无须有序组织点云,将三维点云投影至二维空间,将栅格平均高度[7]、高度差[8,9]等作为地面分割评价指标,该算法计算简单,能够满足自动驾驶汽车实时性能需求,但是仅仅只将栅格平均高度或者高度差作为分割指标,栅格内地面点也会被误提取为障碍物点,导致过分割问题。基于模型拟合[10,11]算法认为地面点可拟合成平面,结合RANSAC算法求解平面拟合参数,最后采用点到拟合平面距离为分割指标提取地面点,该算法对距离阈值十分敏感,距离阈值设置不合理会导致过分割和欠分割,同时在复杂城市环境中,扫描视野中往往存在地面起伏,只拟合一组平面参数不能完整提取地面点。基于深度学习算法[12,13]通过点云深度学习网络学习地面点属性特征,测试数据与训练数据相似时,可以达到良好的地面分割效果,需要大量训练数据提高其泛化能力,同时对于不同型号激光雷达,算法可移植性差且在嵌入式平台很难达到实时效果。
鉴于上述算法应用的局限性,同时顾及自动驾驶汽车实时性能需求,本文基于栅格投影算法的思想,引入栅格单元高度方差信息,提出一种基于栅格投影的快速地面点云分割算法。首先将原始点云进行栅格化处理,然后计算栅格单元的高度差和平均高度,同时在栅格单元引入点云高度方差信息实现地面点云快速分割。该算法可降低对参数的敏感性,能够实现地面点云快速分割,因其结构简单,可极大提升算法实时性能。
如图1所示为激光雷达坐标系下栅格化处理的平面几何模型,其中Rmax为激光雷达最大探测距离,dx,dy分别为栅格单元的长和宽,激光雷达扫描点P可根据其坐标(xp,yp,zp)分配至栅格(row,col)中,(row,col)的计算公式如下:
(1)
式中,floor(·)为向下取整函数。原始点云数据经过栅格化处理,每个点都会唯一对应一个栅格序号,最终将激光点云全部存储在栅格矩阵中。
图1 激光雷达坐标系下栅格化处理的平面几何模型
经过点云数据栅格化操作,可通过计算栅格单元的几何特征信息提取包含地面点云的栅格。传统基于栅格投影的地面分割算法,通过计算栅格单元的平均高度或栅格高度差实现地面点云分割,然而平均高度的评价指标严重依赖激光传感器安装高度等参数,且在起伏路面场景会有欠分割现象,同时高度差的评价指标抵抗粗差能力较弱,且对被遮挡的物体存在过分割现象。为了解决基于栅格投影算法中计算平均高度或高度差存在的问题,本文引入栅格单元点云高度的方差信息,实现地面点云的快速分割,减轻算法对经验参数的依赖。算法主要计算栅格单元平均高度、高度差和高度方差,具体流程如下。
(1)计算栅格单元ceil(i,j)平均高度:
(2)
式中(i,j)表示栅格单元ceil(i,j)的行号和列号,size(·)表示求栅格单元存储点云的数量,k为栅格单元ceil(i,j)中的点,zk表示k点的z值。对于一般平坦地面场景,非地面点云栅格单元平均高度一般较大。
(2)计算栅格单元ceil(i,j)的高度差:
Zdiff(i,j)=zmax-zmin
(3)
式中,zmax和zmin分别为栅格单元ceil(i,j)的高度的最大值和最小值,为了抵抗点云噪声影响,本文选取次最大值和次最小值运算。对于一般平坦地面场景,非地面点云栅格单元高度差一般较大。
(3)计算栅格单元ceil(i,j)高度方差:
(4)
栅格单元的高度方差信息可以较好地反映栅格点云的高度分布。一般情况下,对于地面点云栅格,其栅格单元的高度方差应较小,对于非地面点云栅格,其方差信息较大。
综合以上三个栅格单元属性,分别设置平均高度、高度差和高度方差阈值来分割地面点云,因分割指标全面,对于三个分割指标不用严格设置阈值,即可实现良好的分割效果,因此降低了算法对参数的依赖。
本文算法采用C++实现,所用电脑配置为4核CPU处理器。本文将采用KITTI开源数据集[14]和实测数据实验,验证本文算法的有效性和可行性,其中KITTI数据验证数据为平坦路面场景,实测数据为起伏地面场景。为避免栅格单元过大导致欠分割,本文算法实现过程中,设置栅格单元的长和宽均为 0.1 m,高度差阈值为 0.10 m,高度方差阈值 0.40 m2。
KITTI数据集中采用64线激光雷达采集激光点云数据,采集场景为平坦地面场景,激光雷达安装高度 1.73 m,每帧数据约有12万个点,极大考验算法效率,本文算法的地面分割效果如图2所示。
图2 本文算法分割效果(红色为地面点云,绿色为非地面点云)
从图2可看出,本文算法在地面点和非地面点交接处分割效果很好,对于车辆、墙面和杆状物等分割完整。为进一步验证本文算法的有效性,结合基于物理排序[3]和基于平面模型拟合[10]的方法进行对比,其分割效果分别如图3和图4所示。
图3 文献[3]分割效果(红色为地面点云,绿色为非地面点云)
图4 文献[10]分割效果(红色为地面点云,绿色为非地面点云)
从图3(a)和图4(a)全局分割效果可以看出,两种算法都可以实现地面点云分割,但是从图3(b)和图4(b)局部放大效果可以看出,蓝色圆圈表明两种算法都出现了不同程度的过分割或者欠分割,文献[3]基于物理排序的算法对相邻线束点的几何阈值过于严苛,导致地面分割不彻底,然而文献[10]基于平面模型拟合的算法,因需要设置点到平面的距离阈值参数,导致在地面点和非地面点交接处分割效果不理想,将非地面点云判定为地面点,导致过分割。
综合上述,可定性分析出本文分割算法分割效果理想,对于地面点和非地面点交接处实现了准确的分割效果,同时通过与文献[3]和文献[10]的分割效果对比,验证了本文算法的有效性。
为了凸显栅格投影的优势,实测数据为某公司生产的固态激光雷达采集的无序点云,无法将其序列化,因此文献[3]的方法不再适用。采集场景为起伏地面场景,激光雷达安装高度 0.85 m,本文算法的地面分割效果如图5所示。
图5 本文算法分割效果(红色为地面点云,绿色为非地面点云)
从图5可以看出,本文算法分割效果很好,在地面点和非地面点交接处,行人和草木分割完整,同时与文献[10]基于平面模型的方法进行对比分析,其分割效果如图6所示。
图6 文献[10]分割效果(红色为地面点云,绿色为非地面点云)
从图6可以看出,文献[10]基于平面模型拟合的方法,在起伏地面场景中分割效果不理想,因其只拟合一套平面参数,导致起伏路面点云欠分割。同时对于场景中的草木和行人,因其设置点到平面距离阈值不合理,导致地面和非地面交接处,草木和行人出现欠分割现象。
综合上述,可定性分析出本文算法的分割效果良好,对于无序点云,本文算法仍可以保持良好的分割效果,然而文献[3]基于物理排序的方法不再适用,同时文献[10]基于平面拟合的算法分割效果不理想,进一步表明本文算法的有效性。
为定量评估各算法性能,验证本文算法的可行性,本文采用文献[15]中的灵敏度(RTP)和特异度(RFP)指标进行定量评估,具体计算公式如下:
(5)
式中,TP为地面点正确分割的数量,FP为地面点误分割的数量,FN为非地面点正确分割的数量,TN为非地面点误分割的数量。从式(5)可知,RTP越大,地面点被正确分割为地面点的比例越高,分割效果越好;RFP越大,非地面点被错误分割为地面点的比例越高,分割效果越差。分别采用KITTI数据集和实测数据进行地面分割,将获得的定量评估指标列于表1。
不同算法在不同场景下的定量评估结果 表1
由表1的灵敏度和特异度比较可知,对于KITTI数据集中平坦路面场景,本文算法和文献[3]算法分割效果较好,本文灵敏度达到98.89%,但是对于文献[10]基于平面模型拟合的算法中,由于设置平面距离参数不当,导致在地面点和非地面点交接处过分割,效果最差。对于实测数据中的起伏路面场景,激光点云为无序点云,本文算法和文献[10]方法依然适用,但是此时文献[10]只拟合一套平面参数无法完整分割地面点,因此其分割效果不理想,存在大量地面点云欠分割,而且由于设定的平面距离阈值参数的不合理,存在草木、行人与地面交接处的点云被错误分割,表明其算法十分依赖经验参数,场景应用受限,然而本文算法依然能够保持良好的分割效果,灵敏度指标达到99.31%,原因在于本文算法分割点云指标全面,综合栅格单元的平均高度、高度差和高度方差信息作为分割指标,实现了地面点云准确分割,应用场景更广。同时本文算法结构简单,因此算法运行最快,对于KITTI每帧12万个点依然能够保持约 49 Hz结果输出;对于实测数据,处理一帧约9万个点仅耗时 5.784 5 ms,满足自动驾驶汽车实时性需求。
综上分析,本文算法在精度和效率上较文献[3]和文献[10]都具备优势,在地面点和非地面点交接处实现了良好的分割效果,再次验证了本文算法的有效性和可行性。
本文提出了一种基于栅格投影的快速地面分割算法。综合栅格单元平均高度、高度差和高度方差信息作为分割指标,实现了地面点云的准确分割,同时本文算法结构简单,算法实时性能高。采用KITTI数据集中的平坦路面和实测数据中的起伏路面场景进行实验,与文献[3]和文献[10]的方法对比测试,验证了本文算法在精度和效率上的优势,能够有效快速地分割地面点云,同时本文算法对于无序点云依然适用,应用范围更广。