本发明涉及雷达点云数据处理技术领域,特别涉及一种基于多线激光雷达3D点云数据的分割方法。
背景技术:
近年来,由于Velodyne等3D激光传感器可以获得精确的深度信息并且不受光照、天气变化等复杂环境因素的影响,在无人驾驶车的环境感知、三维重建等领域得到了广泛的应用。利用Velodyne等多线激光传感器对周围场景进行扫描得到的3D点云数据中,包含了传感器周围环境中几乎所有物体的反射数据。通过对扫描得到的点云数据进行相应的处理,就可以达到对扫描场景中障碍物检测和识别的目的。
由于传感器自身的原因偶尔会遇到少数雷达错误反射点,而这些错误点往往是单点孤立存在的;还有一些是悬空小障碍物如悬挂的树枝,小飞虫等等,也会引入一些障碍误检。在无人驾驶车路径规划中,若是碰到这些异常点就会使自主车紧急刹车,致使无人驾驶车辆无法通行的假象,因此需要采用一种有效的方法对采集的点云进行预处理以消除这些异常点,提高检查准确率。
在城市场景中最常见的障碍物有车辆、行人、交通信号灯、建筑物等等,这些障碍物都是建立在地面之上,所以在在对这些目标进行分割之前首先必须将地面提取出来,否则地面点的存在会使所有地面上的物体相互连接在一起,无法完成分割。现有的地面分割方法主要有基于障碍栅格的检测的方法、基于极坐标网格线性拟合、面拟合的方法、基于扫描线梯度的方法。基于障碍栅格的检测方法优点在于将三维信息降低到二维信息,大大降低了传感器数据分析的复杂度和计算量,有较好的稳定性和实时性,但是由于障碍栅格判定和滤波严格,减少了误检点,但是由于雷达点云分布不均匀,特别是在远处,雷达三维点云稀疏,容易导致远处的栅格因部分点云缺少而出现漏检。基于极坐标网格线拟合、面拟合的方法,虽然解决了雷达点云分布不均的影响,但是由于拟合过程需要不断迭代,影响实时性。基于扫描线梯度的方法在点云分割中需要建立复杂的邻域关系和提取复杂的特征,并且基于扫描线梯度的方法,在近处时,由于雷达的分辨率较高,点云密集,当点离得比较近时,只要稍微凸起的高度差就可能得到较大的梯度值,因此在雷达近处的点云分割中有可能将小凸起的地面点误检成障碍点。
在对非地面的点云聚类分割时,最常用的就是分割方式有基于欧式距离的聚类分割、基于k-近邻区域生长的方式、基于栅格投影后采用近邻搜索的方式等,基于欧式距离和k近邻区域生长的方式方法复杂度低、易于实现,但是需要对每个点进行近邻搜索,对于Velodye等每秒可产生百万点云的深度传感器来说,分割难以满足实时性的要求;对于栅格投影的分割方法,将非地面点投影到平面栅格上,以栅格为聚类对象通过八邻域搜索的方式聚类,避免了对每个点云都进行聚类,对于具有大量点云的数据的聚类来说,提高了计算速度,但是,当多个障碍重叠时(如在树下的车辆),点云的投影会将两个障碍物叠加在一起,难以分开。
技术实现要素:
针对上述现有技术存在的问题或缺陷,本发明的目的在于,提供。一种基于八叉树体素区域生长的点云聚类分割算法。
为了实现上述目的,本发明采用如下技术方案:
一种基于多线激光雷达的3D点云分割方法,包括以下步骤:
步骤1,利用安装在车辆顶部的多线激光雷达扫描360°范围内的3D点云数据,建立笛卡尔坐标系OXYZ,将3D点云数据转换到笛卡尔坐标系下,对笛卡尔坐标系下的3D点云数据进行预处理,确定3D点云数据中的感兴趣区域;
步骤2,利用近邻点的统计特性滤除所述感兴趣区域中的悬空障碍点;
步骤3,构建极坐标网格地图,将所述的滤除悬空障碍点后的3D点云数据映射到极坐标网格地图中,然后从极坐标网格地图中的3D点云数据中分割出非地面点云数据;
步骤4,将所述的非地面点云数据映射到3D体素网格中,对非地面点云数据进行聚类分割。
所述步骤1中,构建所述笛卡尔坐标系OXYZ的具体过程包括:
在多线激光雷达位于水平面上处于静止状态时,以所述激光雷达为中心点,以激光雷达的垂直轴线方向为Z轴,以扫描起始平面的水平射线方向为X轴,Y轴是由Z轴和X轴根据右手螺旋定则确定。
所述步骤1中,对所述笛卡尔坐标系下的3D点云数据进行预处理是指保留范围在-20m<X<20m,-50m<Y<50m,-3m<Z<3m范围内的3D点云数据。
所述步骤2中,利用近邻点的统计特性滤除所述感兴趣区域中的悬空障碍点:
(2-1)将步骤1得到的感兴趣区域中的3D点云数据以Octree的数据结构进行存储;
(2-2)将3D点云数据分割为三维阵列,将3D点云数据中的每一点依次作为当前点,在半径为L的360°范围内找到该当前点在8邻域内所有的3D点云数据记为近邻点;
(2-3)设置阈值Threshold,比较所述的近邻点数与阈值Threshold,若近邻点数小于阈值Threshold,则该近邻点对应的当前点为标记为悬空点,并滤除该悬空点。
所述步骤3中,构建所述极坐标网格地图的方法为:
以笛卡尔坐标系OXYZ的原点为中心点,以Z轴为中心对称轴,建立半径为R的极坐标网格地图,将网格地图划分为M个等圆周的扇形,每个扇形的圆周角为:Δα=360°/M。
所述步骤3中,在极坐标网格地图下,从步骤2中得到的滤除悬空障碍点的3D点云数据中分割出非地面点云数据的具体方法过程包括:
(3-1)在所述极坐标网格地图中每个划分的扇形中,将距离极坐标网格地图中心点5至R米范围内的区域划分为N个栅格,栅格的分辨率为Δd=(R-5)/N;
(3-2)计算落入每个栅格内的3D点云数据的最大高度差和平均高度;
(3-3)设置阈值thresh1和thresh2,依次将所有栅格分别作为当前栅格,判断当前栅格内3D点云数据的最大高度差、平均高度与阈值thresh1、thresh2的大小关系,若最大高度差小于thresh1且平均高度也小于thresh2,则当前栅格标记为地面栅格,否则标记为非地面栅格;
(3-4)在以极坐标网格地图中心点为原点半径为20米的圆形区域内,设置阈值thresh3,依次从步骤(3-3)中标记为非地面栅格中选取一个作为当前非地面栅格,若当前非地面栅格3*3邻域内的栅格全部为被标记为地面栅格,且该当前非地面栅格内的3D点云数据个数小于thresh3,则将当前非地面栅格标记为地面栅格;
(3-5)将所有标记为地面栅格内的3D点云数据滤除,剩下3D点云数据的则为非地面3D点云数据。
进一步地,步骤4中,对非地面点云数据进行聚类分割的具体方法过程包括:
(4-1)采用八叉树数据结构将步骤三得到的非地面3D点云数据体素化,将3D点云数据分割成叶节点,计算每个叶节点的剩余值,并形成叶节点集V;
(4-2)设定循环次数a=1;
(4-3)将剩余值最小的叶节点作为当前种子节点vi,其中vi∈V,设定种子节点集Sc和当前生长节点集Rc,将该当前种子节点vi从V中取出并放入Sc和Rc中;
(4-4)查找当前种子节点的近邻叶节点vj,设定阈值θth,若vj∈V且vj与vi的法向量夹角小于θth,则将vj从V中取出并放入Rc中;
(4-5)设定阈值若rth,若vj的剩余值小于rth,则将vj放入Sc中。
(4-6)将vi从Sc中移除;
(4-7)重复步骤(4-3)、(4-4)、(4-5),直到Sc为空集,将中的叶节点全部放入至Ra,其中a为循环次数,Ra为第a个分割区域;
(4-8)将a的值加1,重复步骤(4-3)~(4-7),直到V为空集;
(4-9)提取每个分割区域所包含的叶节点中的3D点云数据作为一个障碍物目标,即完成了3D点云数据的聚类分割。
进一步地,步骤(4-1)中将所述的3D点云数据分割成子数据块的具体步骤包括:
(4-1-1)首先在非地面点云数据中分别找出X,Y,Z轴上的最大值xmax、ymax、zmax和最小值xmin、ymin、zmin,利用该6个值确定一个最小立方体;
(4-1-2)以所述最小立方体作为根节点或零级节点,将根节点分为八个体素,每个体素作为一个子节点进行编码,同时保存每个子节点内的3D点云数据;
(4-1-3)对第i个子节点内的点云数据建立协方差矩阵M,i∈(1,8),通过对M进行特征值分解,得到M的最小特征值的特征向量,即为第i个子节点的法向量ni;
(4-1-4)利用下式计算第i个子节点的剩余值ri:
其中
dj=(pj-pi),
其中,ni为第i个子节点的法向量,pi为第i个子节点中3D点云数据的中心点,pj为第i个子节点中第j个3D点云数据,m为第i个子节点所包含的3D点云数据个数;
(4-1-5)设定阈值T,若ri等于0,则所述子节点设为空节点;
否则,若ri小于阈值T或者pi不大于阈值T,则所述子节点为叶节点;
否则,对所述子节点作为新的根节点,依次重复步骤(4-1-2)、(4-1-3)、(4-1-4)和(4-1-5),直至所述子节点为叶节点为止;
(4-1-6)对步骤(4-1-5)中的所有叶节点进行一次遍历,将所有的空节点删除,对剩余的所有非空叶节点按照其剩余值从小到大进行排序,组成叶节点集V。
本发明有如下特点:
1.本发明提出基于雷达点近邻点的统计特性去除悬浮点的方法简单,滤波效果非常好;
2.本发明采用的地面分割方法通过构建极坐标网格地图,符合多线激光雷达的工作原理,该方法在一定程度上克服了随着距离的增加,激光雷达返回点变得越来越稀疏所带来的数据分布不均的问题,并且根据每个非地面栅格的八邻域栅格属性滤除了单点障碍栅格。
3.本发明提出的分割方法是八叉树的体素网格为聚类分割对象,采用区域生长的方法大大提高了聚类的速度,在保证精度的同时满足了实时性的要求。
附图说明
图1为本发明的总体框架图;
图2为本发明实施例中采集到的一帧原始点云数据;
图3为本发明实施例中对悬空障碍点的滤除原理示意图;
图4为本发明实施例中3D极坐标网格地图示意图;
图5为本发明实施例中单点滤波原理示意图;
图6为本发明实时例中基于八叉树的区域生长分割示意图
图7为实施例中依照本发明得到路面障碍物点云分割结果图。
具体实施方式
下面结合附图和实施例对本发明进行详细的描述。
本实施例记载了一种基于车载移动平台的多线激光雷达3D点云分割方法,其包括以下步骤:
步骤1,如图1所示,利用安装在车辆顶部的多线激光雷达扫描360°范围内的3D点云数据,建立笛卡尔坐标系OXYZ,将3D点云数据转换到笛卡尔坐标系下,对笛卡尔坐标系下的3D点云数据进行预处理,确定3D点云数据中的感兴趣区域;
其中,构建所述笛卡尔坐标系OXYZ的具体过程包括:
在多线激光雷达位于水平面上处于静止状态时,以所述激光雷达为中心点,以激光雷达的垂直轴线方向为Z轴,以扫描起始平面的水平射线方向为X轴,Y轴是由Z轴和X轴根据右手螺旋定则确定。
其中,对所述笛卡尔坐标系下的3D点云数据进行预处理是指保留范围在-20m<X<20m,-50m<Y<50m,-3m<Z<3m范围内的3D点云数据。
步骤2,利用近邻点的统计特性滤除所述感兴趣区域中的悬空障碍点,如图2所示为悬空障碍点滤除原理图,其具体步骤包括:
(2-1)将步骤1得到的感兴趣区域中的3D点云数据以Octree的数据结构进行存储;
(2-2)将3D点云数据分割为三维阵列,将3D点云数据中的每一点依次作为当前点,在半径为L的360°范围内找到该当前点在8邻域内所有的3D点云数据记为近邻点,其中半径L的取值与多线激光雷达的分辨率有关,一般取值范围为0.3-0.8米,本实施例取0.3;
(2-3)设置阈值Threshold,比较所述的近邻点数与阈值Threshold,若近邻点数小于阈值Threshold,则该近邻点对应的当前点为标记为悬空点,并滤除该悬空点,其中阈值Threshold的取值与多线激光雷达的线数有关,一般取值不超过5,本实施例取2。
步骤3,构建极坐标网格地图,将所述的滤除悬空障碍点后的3D点云数据映射到极坐标网格地图中,然后从极坐标网格地图中的3D点云数据中分割出非地面点云数据;
其中构建所述极坐标网格地图的方法为:
以笛卡尔坐标系OXYZ的原点为中心点,以Z轴为中心对称轴,建立半径为R的极坐标网格地图,将网格地图划分为M个等圆周的扇形,每个扇形的圆周角为:Δα=360°/M,本实施例中Δα取0.5。
从步骤2中得到的滤除悬空障碍点的3D点云数据中分割出非地面点云数据的具体方法过程包括:
(3-1)在所述极坐标网格地图中每个划分的扇形中,将距离极坐标网格地图中心点5至R米范围内的区域划分为N个栅格,栅格的分辨率为Δd=(R-5)/N,本实例中Δd取0.2米;
(3-2)计算落入每个栅格内的3D点云数据的最大高度差和平均高度;
(3-3)设置阈值thresh1和thresh2,依次将所有栅格分别作为当前栅格,判断当前栅格内3D点云数据的最大高度差、平均高度与阈值thresh1、thresh2的大小关系,若最大高度差小于thresh1且平均高度也小于thresh2,则当前栅格标记为地面栅格,否则标记为非地面栅格,thresh1和thresh2的取值和具体的道路情况有关,城市道路一般取值范围在0.1-0.3米,乡村道路一般取值范围在0.2-0.5米,本实施例针对校园环境,thresh1取0.25米,thresh2取0.15米;
(3-4)在以极坐标网格地图中心点为原点半径为20米的圆形区域内,设置阈值thresh3,依次从步骤(3-3)中标记为非地面栅格中选取一个作为当前非地面栅格,若当前非地面栅格3*3邻域内的栅格全部为被标记为地面栅格,且该当前非地面栅格内的3D点云数据个数小于thresh3,则将当前非地面栅格标记为地面栅格,如图4所示为祛除孤立点云示意图;
(3-5)将所有标记为地面栅格内的3D点云数据滤除,剩下3D点云数据的则为非地面3D点云数据。
其中,判断每个点云所属扇形和所属扇形中的栅格的方法包括以下步骤:
从X正半轴开始对极坐标网格地图中的M个扇形进行1至M编号,并且针对每个扇形中的N个栅格从极坐标地图中心至Rm处进行1至N编号;
计算所述点云中第i个点与X正半轴的夹角:βi=atan2(yi,xi),则第i个点所属扇形编号为m=βi/Δα;
计算所述点云中第i个点距离原点的距离第i个点所属扇形中的栅格编号为n=(di-5)/Δd;
步骤4,将步骤3中的非地面点云数据利用八叉树进行体素化,采用基于八叉树体素网格的区域生长方法进行聚类分割
其中,对非地面点云数据进行聚类分割的具体方法过程包括:
(4-1)采用八叉树数据结构将步骤三得到的非地面3D点云数据体素化,将3D点云数据分割成叶节点,计算每个叶节点的剩余值,并形成叶节点集V;
(4-1-1)首先在非地面点云数据中分别找出X,Y,Z轴上的最大值xmax、ymax、zmax和最小值xmin、ymin、zmin,利用该6个值确定一个最小立方体;
(4-1-2)以所述最小立方体作为根节点或零级节点,将根节点分为八个体素,每个体素作为一个子节点进行编码,同时保存每个子节点内的3D点云数据;
(4-1-3)对第i个子节点内的点云数据建立协方差矩阵M,i∈(1,8),通过对M进行特征值分解,得到M的最小特征值的特征向量,即为第i个子节点的法向量ni;
(4-1-4)利用下式计算第i个子节点的剩余值ri:
其中
dj=(pj-pi),
其中,ni为第i个子节点的法向量,pi为第i个子节点中3D点云数据的中心点,pj为第i个子节点中第j个3D点云数据,m为第i个子节点所包含的3D点云数据个数;
(4-1-5)设定阈值T,若ri等于0,则所述子节点设为空节点;
否则,若ri小于阈值T或者pi不大于阈值T,则所述子节点为叶节点;本实施例中,T取0.5;
否则,对所述子节点作为新的根节点,依次重复步骤(4-1-2)、(4-1-3)、(4-1-4)和(4-1-5),直至所述子节点为叶节点为止;(4-1-6)对步骤(4-1-5)中的所有叶节点进行一次遍历,将所有的空节点删除,对剩余的所有非空叶节点按照其剩余值从小到大进行排序,组成叶节点集V。
(4-2)设定循环次数a=1;
(4-3)将剩余值最小的叶节点作为当前种子节点vi,其中vi∈V,设定种子节点集Sc和当前生长节点集Rc,将该当前种子节点vi从V中取出并放入Sc和Rc中;
(4-4)查找当前种子节点的近邻叶节点vj,设定阈值θth,若vj∈V且vj与vi的法向量夹角小于θth,则将vj从V中取出并放入Rc中;
(4-5)设定阈值若rth,若vj的剩余值小于rth,则将vj放入Sc中。
(4-6)将vi从Sc中移除;
(4-7)重复步骤(4-3)、(4-4)、(4-5),直到Sc为空集,将中的叶节点全部放入至Ra,其中a为循环次数,Ra为第a个分割区域;
(4-8)将a的值加1,重复步骤(4-3)~(4-7),直到V为空集;
(4-9)提取每个分割区域所包含的叶节点中的3D点云数据作为一个障碍物目标,即完成了3D点云数据的聚类分割。