第17界全国大学生智能车竞赛百度智慧国一车道线检测算法
- front_image文件夹中存放的是小车行驶一圈所拍摄的照片,用于之后循迹算法的离线学习。
- src文件夹中是最终给官方提交的项目报告,综述了一些系统设计思路,但是因为时间原因没有讲得很清楚。
- test_cruise.py文件是传统循迹算法的代码部分。
- 5.1为之前版本(2022.5.1)可以参考里面的说明文档。
大体思路:正如最终项目报告所述,本次车道线循迹从传统方法出发,在大部分情况下可以对车道线进行模式识别,但是其缺陷也很明显:帧数明显不够,处理时间较长(10Hz)。之后我们利用传统方法的输入输出作为数据集,训练出的模型很好地解决了这个问题,并且结合了传统方法的优点,对齐了后续的双层PID,是一次比较好的尝试。
图像预处理部分目的是将图像进行二值化,为后续识别车道线提供便利。这里提供几个思路:
- 色彩颜色空间分割,容易受到光照等影响,并且容易对和车道线颜色接近的(如地标)不太能分辨出。
- 最大连通域分割,提取最大连通域,再进行边缘检测。
将图像纵向分为不同高度的部分,横向分为两个部分(为区分左右车道线)。首先进行横向频域直方图检测,认为左右分别最多的x坐标为起始车道线位置。接下来用窗口在每个纵向空间中框出频数均值,作为这区域y方向的车道线框框。
**梯度部分:**主要考虑为后续控制的转角服务,同时也基于车道线的方向应该为连续变化的,具体详见代码中所述思想。主要即通过求解框框上下x之差来求解此车道线之后的生长方向。
这为十字路口这种含直角的车道线提供了一个解决办法:车道线按照既定的方向生长,而不会跟着原图车道线变化,这样子就实现了十字路口补线的功能。
**去重部分:**如上图,视野中不存在左车道线,但其在图像上端将右车道线识别为左车道线,为解决这部分问题,通过车道线前置方框状态的判断,进行左右车道线去重。
**置信度检测:**去除一些置信度低的车道线,只相信大于或者等于3个方向连续,位置连续的车道线提供的信息。
**拟合中线:**这部分就是利用左右车道线x坐标拟合出中线位置。利用左右车道线梯度方向拟合中线之后的大致变化方向。作为输入输进后续的控制部分。
- 为什么不用曲线拟合?实际赛道车道线存在多种不规则的形状,无法固定出阶次,有些甚至存在多映射的问题,所以最终采用滑动窗口法。
接上部分,输入为:车道线坐标位置和视野终点的坐标差$\Delta x$,车道线变化方向$\theta$,进行双层PID调节,保证车辆保持在车道正中,并且方向对齐道路前进方向。
详见src文件中的文档
2022清华智能车队队长李尚怡
队员:武晓宙,徐超,曹展翔
其他队友:吴宗桓和车队全体成员