梁晓妮 楚朋志 肖雄子彦
(上海交通大学学生创新中心,上海 200240)
近年随着无人驾驶技术突飞猛进,商业化落地也在不断推进中[1]。无人驾驶技术在教学领域中的应用也越来越广泛。目前,存在的无人驾驶教学解决方案中,大致分为两类,一类基于摄像头捕捉的图像,通过计算机视觉、神经网络、图像处理等方法,对智能车的行进路线进行规划[2];一类是基于激光雷达、SLAM[3]等技术,通过构建特征地图等方法,对小车行进轨迹进行决策。本文提出一种基于计算机视觉与图像处理的方法,实时规划智能车的行进路线。
智能车自主巡线系统硬件主要包括视觉传感器模块、计算模块、控制模块、电机驱动模块、电源模块及PC机等6部分硬件单元。
视觉传感器模块由车载前视摄像头采集轨道图像,图像分辨率为1 280×720,并配有实时图传模块,可将采集到的路面图像传回电脑端,方便监测与修正。
计算模块采用的是Nvidia的Jetson Nano开发板,搭载Ubuntu16.04系统及其自带的ROS操作系统,将处理好的控制信号(包括角度、速度信息)通过ROS系统提供的API传给控制模块(下位机),下位机发出PWM信号控制电机(速度)、舵机(角度),从而控制智能车行进。整个系统外接20 W电源模块负责给以上四个模块供电。
图1 系统硬件结构图Fig.1 System hardware structure
PC机可以通过wifi与上位机相连,完成数据传输、手动控制、二次开发等操作。另外,在本教学案例中配套有地图轨道,智能车需在地图轨道中巡线行驶。
视觉巡线系统软件主要是由python语言基于OpenCV库实现。教学用智能小车配有对应的地图轨道,地图轨道整体路径如图2所示。
图2 整体路径轨道图Fig.2 Overall path of track map
全程50米,设有多处弯道,可根据需要添加红绿灯、限速标识、停车标识等交通标识模拟真实路况。车载摄像头采集的前视图像如图3~图5所示。
图3 前视图-直行轨道Fig.3 Front view-straight map
图4 前视图-弯道Fig.4 Front view-curve map
图5 配有红绿灯的轨道Fig.5 The map with traffic light
本方案的目标是实现车道线自动识别,通过PID控制算法自动巡航,同时,具备红绿灯识别功能。
根据前视图中车道线颜色与背景色有明显差异的特点,设计了以下车道线识别流程。
图6 车道线识别流程图Fig.6 Lane line recognition flow
首先,读入摄像头拍摄的前视图像,图像分辨率为1 280×720。由于车载摄像头位置固定,故可截取图像中下部分固定区域作为兴趣区域(Region of Interest)重点处理,从而排除背景板、障碍物等诸多干扰因素。将该区域得到的车道线的中心点,作为小车的移动目标点。ROI如图7所示:
图7 前视图ROI选取Fig.7 ROI selection of front view
选定观察区后,由于车道线具有较为明显的颜色特征,可以通过设定颜色阈值区间进行图像二值化,从而过滤出黄色车道线区域。二值化结果如图8所示,采用[0,160,160]~[80,255,255]的阈值范围对黄色区域进行分割。
图8 黄色车道线提取结果Fig.8 Extraction result of yellow lane line
提取出车道线区域后,需要进一步对车道线中心点进行判定。本文采用初步估计加分情况增强检测的方法进行精确定位。初步估计采用二值化后白色区域的横坐标方向投影均值作为最初的中心点判定值,投影均值在图像右半边则判定为右车道线中心点,反之,则为左车道线中心点。左右车道线中心点提取结果如图9所示,绿色代表左车道线中心点,红色代表右车道线中心点。
图9 初步估计判定中心点坐标Fig.9 Preliminary estimation of lane line central point
但这种方法在转弯、车身偏移等仅有一侧车道线时,存在车道线左右混淆、单车道线检测为双车道线的不足,导致车辆无法继续行驶。本文采用分情况增强检测方法来增加检测的鲁棒性,具体步骤为:(1)若两侧车道线区域都检测失败,则用固定左右车道线点进行补充。(2)若只检测出左侧车道线,则用左侧车道线加上车道线间距对右车道线中心点位置进行预测。(3)若只检测出右侧车道线,则用右侧车道线减去车道线间距预测左车道线中心点位置。(4)车道线间距值在每次检测出左车道线与右车道线时进行更新。通过以上四种情况的增强检测,对于路况中的转弯、车身偏移等情况,都能得到准确的修正。但在急转弯的情况下,由双车道线变为单车道线,且车道线横向跨越较大,只依据检测出的黄色车道线中心位置位于图像左半边还是右半边来判别左右属性,容易产生左右颠倒误判,如图10~图12所示。
图10 第一帧:黄色车道中心点位于图像右侧Fig.10 Frame 1:center point of the yellow lane on the right
图11 第二帧:黄色车道分布在图像左、右侧,出现两个中心点的误判Fig.11 Frame 2:yellow lane is distributed on both left and right,lead to misjudgment of two central points
图12 第三帧:黄色车道位于图像左半边,误判为左侧车道线中心点Fig.12 Frame 3:yellow lane is based on the left,misjudged as left central point
对于这种“乾坤大挪移”的情况,采取与上一帧左右中心点比较判别的方法进行修正。具体方法为记录前一时刻车道中心点位置及左右属性,当新检测出的车道线中心点和前一时刻的同侧车道线距离过远却离对侧车道线距离较近,则认为左右误判,予以纠正。以图11的绿色点修正过程为例:绿色点与图10中红色点减去车道间距得到的左侧车道线中心点距离过大,且与图10红色点距离较近,故认为绿色点为误判,纠正为右侧车道线(改为红色)。通过这种方法,修正结果如图13,ROI区域的黄色部分位于图像右半边,判为右侧车道线中心点,图14为下一帧图像,中心点虽位于图像左侧,但纠正为右车道中心点。
图13 第一帧:黄色车道中心点位于图像右侧Fig.13 Frame 1:center point of the yellow lane on the right
图14 第二帧:纠正左半部分检测出的中心点为右车道中心点Fig.14 Frame 2:correct central point of left image to right lane central point
通过以上几种分情况检测方法,有效的增强弯道场景检测的准确性与鲁棒性。检测出左右车道线中心点后,采用PID算法对智能车进行行驶控制。PID算法具有算法简单、可靠性高、鲁棒性好等优点,广泛应用于过程控制系统中。PID算法中P代表“比例”控制,“I”代表消除静态误差的“积分”控制,“D”代表“微分”控制。P、I、D的系数需要根据实际取值范围进行调试。
图15 PID控制算法流程图Fig.15 PID control flow
为了更真实地模拟生活中的复杂场景,在智能车巡线行驶过程中增加了红绿灯识别,当检测到红灯与黄灯,减速停车,绿灯则继续前进。本系统采用图像处理的方法进行红绿灯的识别与检测,具体流程如图16所示。
图16 红绿灯识别流程图Fig.16 Traffic light recognition flow
由于智能车总是从距红绿灯一定距离开始识别,所以红绿灯出现在图像中的位置相对固定,选取右上角固定区域作为兴趣区,以达到减少计算量及去除背景的目的。在兴趣区内分别使用红、黄、绿三种颜色模板对图像进行二值化。由于反光、亮度等原因,会存在多个区域落在同一颜色范围的情况,将面积最大的区域判定为红绿灯的亮灯区,其颜色为对应模板的颜色。依据这个原则,通过提取二值化图像的轮廓,按轮廓面积排序,选出面积最大的区域作为该颜色区,并用轮廓的boundingRect[4]作为该区域的检测结果。检测结果如图17、图18所示。
图17 绿灯识别结果图Fig.17 Recognition result of green light
图18 红灯识别结果图Fig.18 Recognition result of red light
本文所阐述方法过程简单、易于实现,在特定轨道中有较好的识别效果。对应用图像处理方法解决巡线、红绿灯识别等问题有借鉴价值。若使用其他轨道或真实路面,二值化阈值、兴趣区的选择都需要按需调整,以达到最佳效果。后续可添加限速标识、停车标识等复杂路况信息,启发学生进行复杂路况标识识别、避障等拓展研究。