热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

matlab点云中值滤波,基于车载激光雷达的车道线识别方法与流程

本发明属于自动驾驶的模式识别领域,涉及激光雷达点云数据处理及识别方法。背景技术:车道线检测在智能车辆辅助安全系统中起着关键的作用,车道偏离

本发明属于自动驾驶的模式识别领域,涉及激光雷达点云数据处理及识别方法。

背景技术:

车道线检测在智能车辆辅助安全系统中起着关键的作用,车道偏离警示系统在车道保持辅助系统以及车道换道辅助系统中有着广泛的应用;同时车道线检测是智能车自动导航系统的基础,车辆自动导航的最优行驶路径需要根据已获取的道路环境信息进行规划,车道线检测在具体的车道行驶中是非常重要的。

车道线检测的基本原理是使用传感器获取道路以及周边环境信息,然后经过复杂的分析获取车道线所在的具体位置,最终在车辆自主导航系统和智能车辆辅助安全系统中发挥作用。目前,车道线检测方法有三种:分别是基于雷达的车道线检测、基于视觉的车道线检测和雷达与视觉相结合的车道线检测。目前基于视觉的车道线检测技术已经比较成熟,它是通过相机获取道路信息,通过直接利用道路的视觉特征,这种方式有着很快的处理速度,因此被广泛的应用;但相机本身有个很大的缺陷就是易受外界环境的影响。由于雷达技术的发展使其具有及其不容易受外界环境的影响这一优势,基于雷达的车道线检测成为了研究热点。目前使用在车道线检测上的雷达主要是激光雷达和毫米波雷达,因为激光雷达有着强大的抗外界干扰能力和高分辨率优势,因此被广泛使用。激光雷达分为单线激光雷达、多线激光雷达和三维全向激光雷达。其中因为多线激光雷达探测距离更远、检测精确度更高、扫描范围更广并且返回信息量更大;三维全向激光雷达价格过高而备受青睐。

技术实现要素:

发明目的

本发明使用激光雷达传感器做车道线识别,解决了传统相机在夜晚、雾天等光照条件不好的情况下无法识别车道线的问题。

技术方案

一种基于车载激光雷达的车道线识别方法,其特征在于:步骤如下:

一、读取curb中间的道路点云数据:

使用32线激光雷达传感器,将此传感器竖直的安装在自车的车顶,以获取道路及其周围的环境点云数据;

(1)使用最小二乘算法分别拟合左、右curb的函数关系式yl=alxl+bl和yr=arxr+br,其中yl代表左边curb点云的纵坐标值,xl代表左边curb点云的横坐标值,al为左边curb函数式的系数,bl为左边curb函数式的截距,yr代表右边curb点云的纵坐标值,xr代表右边curb点云的横坐标值,ar为右边curb函数式的系数,br为右边curb函数式的截距;

(2)根据左、右curb的函数关系式yl=alxl+bl和yr=arxr+br使用Visual Studio平台中的C++编程提取curb中间的道路点云数据(x1,y1),(x2,y2)...(xn,yn),其中n代表提取的点云个数,为后续识别车道线做准备;

(3)取由激光雷达的1-22线束获取的点云数据;

二、排序:

首先对路面数据分开处理,以自车坐标为原点,分别将数据根据笛卡尔坐标系的纵坐标0点为基准,存成两类,分别为纵坐标值大于0和纵坐标值小于等于0,路面数据从小到大快速有序进行排列存储;

三、均值滤波:

使用均值滤波算法,对数据进行平滑操作;

四、寻找峰值:

对于通过激光雷达获取的点云数据的强度值,由同一个线束返回的多点云强度值就会出现局部峰值,此局部峰值点即为车道线的强度;

因为实际的数据处理中有噪声的干扰,因此多点云强度值局部会出现很多的峰值点,然而并不是所有的峰值点都是车道线的数据点,根据车道线的强度值要比路面点的强度值大很多这一信息,设置峰值点要比其峰谷点至少大5,才认为是有意义的车道线数据点;

五、车道线高度信息筛选:

车道线是在路面刷了一层涂漆,那么这层涂漆就会高出其周围的路面,根据此信息,我们选取强度峰值周围的点,并在这些点中,找出高度较其他点高的点,这些点就是组成车道线标识的点,这里需要使用均值滤波进行平滑处理;六、多线束联合筛选峰值:

因为车道线是具有线性特征的,那么每个线束提取的峰值如果是车道线标识点,那么其相对应的在其最邻近线束应该具有x轴方向横向距离不超过车道线标识宽度的峰值点;为了剔除噪声点的干扰,这个连续的峰值点还需大于一定数目,将此横向距离阈值设置为0.15m,连续的点数目阈值设置为10,即这个连续的点数目超过10,我们才认为它是组成车道线的峰值点;

由第一线数的峰值点找到第二线束的峰值点,再由第二线束的峰值点找到第三线束的峰值点,以此类推直到搜索到最后一个线束;然后判断找到的峰值点总数是否满足我们设置的阈值,满足则保留,否则丢弃;

然后从第一线数的其余峰值点继续按照上述方法往下找,直到遍历完所有峰值点,已经遍历过的点不再参与遍历操作;

以上多线束联合,将基于自车坐标的y轴上、下部分分开操作;

如此,为了减小计算量和无用信息的干扰,首先通过curb限制,提取了道路信息点,然后根据车道线的强度特征,使用峰值法粗筛选车道线点,最后根据车道线的线性特征,使用多线束联合法筛选掉干扰点,进而将自车前方和后方的车道线识别出来。

上述步骤二-步骤六的数据分析均采用单线束独立分析。

优点及效果

本发明的识别方法通过使用激光雷达获取的点云数据进行车道线识别,很好的克服了传统视觉算法检测的缺点,即使在下雨、大雾等天气不好的情况下也能很好的进行车道线检测。并且激光雷达分辨率高,扫描范围广,通过复杂的数据分析和多帧联合能够快速且精确的检测出车道线。

附图说明

图1、原始点云数据图;

图2、单线束自车上半部分强度趋势图;

图3、均值滤波之后的强度数据趋势;

图4、原数据高度趋势;

图5、均值滤波后数据高度趋势;

图6、原图;

图7、平滑后的数据图;

图8、多线束联合;

图9、识别效果图1;

图10、识别效果图2;

图11、识别效果图3;

图12、耗时统计。

具体实施方式

下面结合附图对本发明做进一步的说明:

基于车载激光雷达的车道线识别方法,步骤如下:

一、读取curb(curb即为马路牙子)中间的道路点云数据:

本实施例中,使用32线激光雷达传感器,将此传感器竖直的安装在自车的车顶,以获取道路及其周围的环境点云数据;

(1)首先为了限制道路分析区域,使用最小二乘算法分别拟合左、右curb的函数关系式yl=alxl+bl和yr=arxr+br,其中yl代表左边curb点云的纵坐标值,xl代表左边curb点云的横坐标值,al为左边curb函数式的系数,bl为左边curb函数式的截距,yr代表右边curb点云的纵坐标值,xr代表右边curb点云的横坐标值,ar为右边curb函数式的系数,br为右边curb函数式的截距;

(2)根据左、右curb的函数关系式yl=alxl+bl和yr=arxr+br使用Visual Studio平台中的C++编程提取curb中间的道路点云数据(x1,y1),(x2,y2)...(xn,yn),其中n代表提取的点云个数,为后续识别车道线做准备;

缩编程序代码:

(3)根据数据统计结果以及雷达线束扫描方式,发现并不是雷达所有线束都能打到地面获取数据,取由激光雷达的1-22线束获取的点云数据;

以下步骤二-步骤六的数据分析均采用单线束独立分析;

二、排序:

为了更好的使用强度信息进行车道线和道路分离,首先对路面数据分开处理,以自车坐标为原点,其坐标系如图1坐标线所示,分别将数据根据笛卡尔坐标系的纵坐标0点为基准,存成两类,分别为纵坐标值大于0和纵坐标值小于等于0,路面数据从小到大快速有序进行排列存储(即如图1虚线箭头所示,从左到右的方向);

三、均值滤波:

对排序好的数据,观察其强度变化趋势如图2所示,从图2我们可以发现数据并不平滑,不利于寻找峰值,于是这里使用本技术领域的均值滤波算法,对数据进行平滑操作,滤波后的数据趋势如图3所示;

四、寻找峰值:

对于通过激光雷达获取的点云数据的强度值,物体材质不同返回的强度数据是不一样的,通常车道线的强度值要大于道路强度值;那么,由同一个线束返回的多点云强度值就会出现局部峰值,此局部峰值点即为车道线的强度,如图3中代表的点(圆圈里的值);

因为实际的数据处理中有噪声的干扰,因此多点云强度值局部会出现很多的峰值点,然而并不是所有的峰值点都是车道线的数据点,根据车道线的强度值要比路面点的强度值大很多这一信息,设置峰值点要比其峰谷点至少大5,才认为是有意义的车道线数据点;

五、车道线高度信息筛选:

车道线是在路面刷了一层涂漆,那么这层涂漆就会高出其周围的路面,根据此信息,我们选取强度峰值周围的点,如图4所示,并在这些点中,找出高度较其他点高的点,如图5所示圆圈里的点,这些点就是组成车道线标识的点,因为在实际道路中车道线会有磨损等一些外力的干扰,其呈现的数据趋势并不是我们理想中很明显的找出有高度特征的趋势,如图6原始数据和图7使用均值滤波处理后的数据对比所示,所以这里需要使用均值滤波进行平滑处理;

六、多线束联合筛选峰值:

因为车道线是具有线性特征的,那么每个线束提取的峰值如果是车道线标识点,那么其相对应的在其最邻近线束应该具有x轴方向横向距离不超过车道线标识宽度的峰值点;为了剔除噪声点的干扰,这个连续的峰值点还需大于一定数目,我们才认为它是构成车道线的峰值点;根据《道路交通标志和标线》国家标准(GB5768-1999)的规定,我国现行的道路交通指示标线宽10-20cm,并且分析现在处理的数据后,我们将此横向距离阈值设置为0.15m,连续的点数目阈值设置为10,即这个连续的点数目超过10,我们才认为它是组成车道线的峰值点;

如图8所示,由第一线数的峰值点1找到第二线束的峰值点2,再由第二线束的峰值点2找到第三线束的峰值点3,以此类推直到搜索到最后一个线束N;然后判断找到的峰值点总数是否满足我们设置的阈值,满足则保留,否则丢弃;

然后从第一线数的11点继续按照上述方法,往下找,直到遍历完所有峰值点,注意,已经遍历过的点不再参与遍历操作;

因为考虑到车道线标识有错开的情况,所以以上多线束联合,将基于自车坐标的y轴上、下部分分开操作;

如此,为了减小计算量和无用信息的干扰,我们首先通过curb限制,提取了道路信息点,然后根据车道线的强度特征,使用峰值法粗筛选车道线点,最后根据车道线的线性特征,使用多线束联合法筛选掉干扰点,进而将自车前方和后方的车道线识别出来。

识别效果如图9、图10和图11所示,图中圆点即为识别出来的车道线的点。

选取高速路上的200帧数据的耗时进行分析,如图12所示,平均耗时为37ms。



推荐阅读
author-avatar
271216608_5d6eab
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有