基于深度学习的智能车行驶控制系统设计与实现∗

2024-01-29 02:23张德龙赵兴哲
电子器件 2023年6期
关键词:状态机车道小车

刘 晨,叶 浩,张德龙,赵兴哲

(东北大学计算机科学与工程学院,辽宁 沈阳 110819)

随着车联网及人工智能技术的进步,传统汽车正逐步向智能化方向发展。智能车的发展定位已从车联网的组成部分,上升到国家战略层面[1]。

车辆行驶控制是智能车的技术基础之一,车载摄像头是车辆感知外界信息时最常用的传感器,结合深度学习算法,可实现道路场景中目标的检测与识别,包括车道线检测、交通标志识别和交通信号灯检测等[2]。传统的目标检测方法对于场景要求较高,鲁棒性较差,很难在真实的道路场景中应用[3]。而基于深度学习的检测方法通常复杂度较高,计算量过大,无法保证检测速度[4-6]。

本文提出了一种基于深度学习的智能车行驶控制方法,通过U-Net 网络模型完成车道线检测,提升检测速度的同时保证了检测效果和抗干扰能力,使用YOLO 模型实现了道路标识识别。在实现上述功能的基础下,设计沿车道线行驶的PID 算法模型,并设计控制无人行驶的智能车行为状态机,以应对复杂交通情况。该方法可以自动识别车道线,实现智能车无干预实时校正行驶方向,同时通过识别车道标识、红绿灯等道路目标,正确及时地进行行驶控制。

1 系统总体设计

系统通过车载MX219 广角摄像头实时进行环境信息感知,利用U-Net 网络进行车道线检测,并将检测性能与传统计算机视觉算法进行对比。同时基于YOLO 深度学习模型,使用分割与灰度计算的方案进行障碍物和交通灯识别。最后在模拟的道路场景中进行测试,基于车辆行驶的有限状态机和PID 算法,完成车辆的行驶控制。系统工作流程如图1 所示。

图1 智能车行驶控制系统基本工作流程图

2 模块化设计

2.1 车道线检测

车道线检测是系统的关键部分,也是系统实现的难点,需要同时考虑速度与精度。由于车道图像具有复杂度高、图像边界不清晰等特点,而基于Encoder-Decoder 结构的U-Net 网络通过下采样和上采样结合、底层信息和高层信息结合的方式,可以显著提高分割的精度,因此决定使用U-Net 网络结构进行车道线检测[7-9],车道线检测工作流程如图2 所示。

图2 车道线检测工作流程图

①数据采集

首先收集数据集并进行标注,摄像头进行图片采集,并使用Labelme 进行标定,将黄线标定为lane1,将虚线标定为lane2,得到相应的json 数据。之后将json 数据批量处理,得到相应图片和mask,自行采集的图片数据集如图3 所示。

图3 自行采集图片数据集

②模型训练

使用U-Net 模型进行训练,同时进行了适当的修改:初始学习率设置为0.001 到0.005,衰减率设置为0.1,训练的轮数比较多,设置为1 000 轮左右,每20 次轮数进行验证,每200 次左右调整学习效率,观察验证集loss,在400 个epoch 之后验证集loss 便不会再下降,如图4 所示,说明模型已经训练成熟。最后保存模型权重文件Unet.pt。

图4 训练loss 情况

③TensorRT 加速推断

将训练好的U-Net 模型unet.pt 转换成unet.onnx;随后将unet.onnx 转换得到Unet.trt 工程文件进行模型加速。分别运行加速推断与非加速推断,打印耗费时间,对比其速度。并且将推断过程中的图片进行可视化,方便查看深度学习模型的推断效果。

④霍夫直线检测

使用cv2.HoughLinesP()函数对U-Net 输出的图像进行检测直线,在工程中通过可视化输出图像,选取最佳的相关参数为threshold =10,min_line_len =8,max_line_gap =12,并且打印霍夫直线检测的耗费时间。

⑤计算模块

计算模块的工作流程如图5 所示。首先计算出两边车道线的特定P 点的位置,通过P 点位置,计算两车道线的中位线,以确定小车的行进方向。通过颜色阈值和长度阈值判断车道线是实线或虚线、白线或黄线,这两个阈值可以通过测试场地情况进行调整。同时,计算车道中心点到中位线的距离,即偏移距离。将计算信息送进PID 算法模块,控制小车沿车道线行驶。

图5 计算模块工作流程图

2.2 标识识别

YOLO 模型是基于一个独立的end-to-end 网络,将物体检测作为回归问题求解,将候选区和对象识别合二为一[10]。YOLO 模型结构简单,由24 个卷积层与2 个全连接层组成,因为模型不仅需要预测对象概率,还需要对边框的位置进行预测,故而与其他网络不同,以线性函数作为输出层的激活函数[11-12]。

车道标识以及车道内可能出现物体的识别需要较快的速度才能留有足够时间供车辆准确进行驾驶操作以及及时应对突发情况,故而选择网络较为简单、识别效率高的YOLO 模型。

2.2.1 识别道路标识

①数据采集

通过摄像头采集车道环境图片,并使用LabelImg 进行标定。对于车道环境中可能出现的标识与物体设置了8 种标签,并在标定的过程中,保持8 种标签的数量基本接近,以防出现深度学习模型过拟合的情况。每种标签的数量基本在200 张左右,如图6 所示。

图6 物体标签数量

②YOLO 模型训练

用xml 格式的标签以其对应的图片生成相对应的train.txt 和val.txt,进而使用开源的YOLOV5 模型开源代码,将其中的训练参数flip_lr 参数应该设置成0,禁止对输入图像进行翻转,以防YOLO 模型区别左转或右转标识时“左右不分”。最后保存模型权重文件YOLO.pt。

③TensorRT 加速推断

将YOLO.pt 通过YOLO.onnx 转换成YOLO.trt,进行模型加速。分别运行加速推断与非加速推断,打印耗费时间,对比其速度。并且将推断过程中的图片进行可视化,方便查看深度学习模型的推断效果。

2.2.2 交通灯识别

在YOLO.trt 模型识别出交通灯的基础上,得到交通灯BOX 的具体位置,即一个矩形BOX。对该交通灯的矩形进行三等分割,随后将RGB 图像转换成灰度图像,计算每个色块的灰度,取灰度最大的色块,该色块即亮灯的色块。再根据交通灯的色块顺序“红、黄、绿”,来判断此时交通灯的信号状态。

2.3 行驶控制

智能车的控制模块由上位机和下位机组成。上位机负责图像采集、视觉识别、行动决策、PID 控制,下位机负责控制电机和舵机,操纵智能车行动。设计了智能车自主行驶控制决策核心的有限状态机[13],用于接受环境信息,并对环境信息进行分析,进行智能决策,接着将决策信息传给PID 控制算法模型,最后向阿克曼模型传送速度和角度,向电机和舵机传送信息,以控制智能车的行驶。行驶控制流程如图7 所示。

图7 车辆行驶控制工作流程图

2.3.1 智能车行驶控制决策核心的有限状态机

智能车行驶控制决策核心的有限状态机共有五种状态,将各种状态封装为一个函数,通过判断环境信息来调用不同的函数,进入不同的状态,如图8所示。

图8 有限状态机逻辑示意图

①停止:此为初始状态,为了防止智能车冲撞行人或者违反交通规则,其他四个状态都有可能变成停止状态。

②循迹前进:根据车道线信息,若前方无任何障碍,便循迹前进。

③减速:遇见障碍物的情况下,先进入减速状态,并进行后续判断。

④变道:遇见路障的情况下,越过虚线向旁边车道进行变道。

⑤转弯:遇见路口的情况下,进入转弯状态。

使用python3 面向对象的语言特性,将状态机封装为一个类,将各种状态封装为一个函数,通过判断环境信息来调用不同的函数,进入不同的状态。在实际编程实现中,代码逻辑比较复杂,但是其思想基本符合上文中描述的行为状态机。通过状态机,可以更方便地管理智能车的行为状态与代码逻辑,针对环境信息做出相应的智能决策。

2.3.2 PID 控制算法

采用PID 控制算法来控制智能车行驶的角度与速度。输入速度或角度信息之后,通过比例、积分和微分的调节,将之传给执行结构电机和舵机,控制小车速度和角度,小车在行驶过程中不断测量与车道线和其他物体的距离,将此距离传回输入,继而间接对其输出进行调整,形成闭环控制[14]。

①控制角度

当小车处于循迹或减速前进状态时,需要控制其角度,保证小车沿车道线行驶,通过与物体的距离不断调节小车的行驶角度,防止其压线。速度则保持不变。

②控制速度

当小车遇见斑马线、行人、红绿灯时,会进入减速状态,在减速状态下需要控制速度,通过计算与物体的距离不断调节智能车的速度,保证小车在斑马线前减速。

2.3.3 阿克曼运动模型

采用阿克曼运动模型控制车辆的运动,首先要对车辆的运动建立数字化模型,模型建立得越准确,对车辆运动的描述越准确,对车辆的跟踪控制的效果就越好。

①阿克曼运动模型原理

小车在转弯时,后轮的行驶时间相同,但是后轮内轮和后轮外轮行驶距离不同。转弯的时候后轮内轮比后轮外轮转速慢,但是转弯的角速度相同,故可推出后轮内轮的转弯半径小于后轮外轮。传统汽车的模型是使用机械差速器来辅助完成差速,近年来电动汽车的发展为本文实现阿克曼模型提供了新思路。由于电动汽车使用两个电机直接驱动后轮,所以可以通过对两个电机的差速控制来实现等价的效果[15]。

与此同时,前轮内侧轮胎的转弯半径小于前轮外侧轮胎,前轮的内外轮转过的角度也不一样。在车辆沿着弯道转弯时,利用四连杆的相等曲柄可以使内侧轮的转向角比外侧轮大约2°~4°,同时使四个轮子路径的圆心大致上相交于后轴的延长线上瞬时转向中心,从而使车辆能够顺利转弯。

②阿克曼模型运动学分析

由于只采用一个舵机带动曲柄来控制小车的转向,故可以用图9 对小车的运动进行分析。

图9 小车运动分析

设舵机控制转角为θ,车前进速度为V,前后轮中心距为L,后轮轮距为T,后转弯内测轮速度为V1,转弯外侧轮速度为V2。

四连杆的相等曲柄,使四个轮子路径的圆心大致上相交于后轴的延长线上瞬时转向中心。

因为角速度一样,故有下列关系式成立:

因为是对速度进行控制,对V1和V2进行求解可以得到:

③基于阿克曼模型转向的关键变量

为实现小车在转向时,两个后轮的差速控制,那么根据上面推导出来的公式,需要两个变量,即需要控制者给出:小车的平均转向速度V和小车的转向角度θ。

3 系统测试分析

3.1 车道线检测

沿车道线行驶是车辆自主行驶最基本的功能,实时性和识别效果是重要的测试指标,基于模拟的道路场景在智能车搭载的Jatson Nano 平台中设置测试方案,并将测试结果与传统的计算机视觉方案进行对比。

①速度指标

分别运行U-Net 方案和传统视觉方案两种程序,通过摄像头采集图片,图片大小为256×256,并通过time()函数记录处理速度,表1 列出了单张图片的各项流程的处理速度。

表1 单张图片处理速度对比

从表1 可以看出,本文提出的基于U-Net 深度学习模型方案的单张图片处理速度能达到接近26 FPS 的处理速度,传统计算机视觉方案由于手工处理后的图片噪声和细短直线多,导致霍夫变换直线检测的速度慢,拖累了处理速度,检测速度只有8 FPS。本文提出的模型方案在图片处理速度上较传统视觉方案有显著提升。

②检测效果

从图10(a)的右侧图可以发现U-Net 网络正确识别出了所有的车道线,在后续的图片中通过程序对车道线进行特定处理,筛选近处的车道。最右侧图表示已经正确识别出车道线,并且能很好地抑制反光效果。而由图10(b)的右侧图片则可以发现传统方案的识别效果不清晰,虽然在录像视频上处理效果很好,但在实地测试效果中,会受到光照的影响。在行驶过程中若速度过高,会出现偏离道路的情况。

图10 实际检测效果对比

③抗干扰能力

路口存在着斑马线,容易对识别造成干扰。首先,斑马线与车道线的斜率一致,计算机容易将其识别成车道线。其次,智能车需停在斑马线前往远处识别车道线,而远距离车道线识别很困难。这对于车辆自主行驶是需要克服的困难。

图11(a)的右侧图片显示出U-Net 网络正确识别出了远处的车道线,而排除了近处的斑马线,因此在后续的图片中可以看到,程序对车道线进行正确地处理,正确识别出车道线。但是在图11(b)右侧图中斑马线是一个很大的影响因素,而且远处的车道线并没有识别出来。在实际场地的测试过程中,利用传统计算机视觉方案的智能车在穿越路口的时候会出现偏离道路的情况。因此U-Net 模型方案更加稳定。

图11 干扰情况下检测效果对比

3.2 标识识别

3.2.1 识别道路标识和行人

将YOLO 模型训练之后的进行测试,测试效果如图12 所示,可以看到其验证的损失很小,分类准确率接近1,可以达到很好的识别效果。

图12 YOLO 模型测试效果

使用保存的YOLO.pt 文件放进平台中进行实地推断测试,图13 为YOLO 模型的实地测试效果。从图中可以看出智能车能识别出远处的障碍、行人、左转标识以及红绿灯,并打上框和标签,方便决策系统做后续的处理。

图13 YOLO 模型实地测试效果

3.2.2 红绿灯识别

红绿灯实地检测效果如图14 所示,将红绿灯放在斑马线对面,智能车停在斑马线前进行识别,可以识别出此时绿灯的灰度最高,因此识别为绿灯,可以通行。

图14 红绿灯检测效果

3.3 行驶控制

通过运行该状态机,基于环境信息来管理智能车的各种状态,进行智能决策。在模拟的道路场景中进行测试,小车从指定起点行驶到终点过程中可以准确完成表2 中的内容,实现智能车行驶控制。

表2 车辆完成内容

4 结语

本文提出的基于深度学习的智能车行驶控制方法,可以准确识别车道线和道路标识。测试结果表明,该方法可以在模拟的道路场景中准确完成车道线检测和标识识别,且在车道线检测方面较传统的计算机视觉方案在检测速度、检测效果及抗干扰能力等方面均得到提升。

猜你喜欢
状态机车道小车
北斗+手机实现车道级导航应用
避免跟车闯红灯的地面车道线
浅谈MTC车道改造
大车拉小车
自制小车来比赛
基于有限状态机的交会对接飞行任务规划方法
刘老师想开小车
两轮自平衡小车的设计与实现
低速ETC/MTC混合式收费车道的设计与实现
FPGA设计中状态机安全性研究