基于树莓派的智能小车的设计与开发

2024-01-05 12:05韩改宁苏静池张瑞斌
电子设计工程 2024年1期
关键词:循迹红绿灯树莓

韩改宁,苏静池,张瑞斌

(咸阳师范学院计算机学院,陕西咸阳 712000)

随着社会的发展,人们对生活的便利性要求越来越高,如外卖、快递的配送等。智能小车是当代汽车的模型缩减,技术水平发展良好,融合了各种跨学科的工科知识[1-4]。智能小车基于传统意义上的车载系统,将一些先进的、智能的、实用的科技运用到小车上,使其具有智能化。可以广泛应用于配送和无人驾驶等许多方面。

1 系统总体设计

该文系统主要是通过相关设备实现对一些路面环境的实时监控,数据采集设备不断采集数据,对数据进行分析、预测,决策小车的行驶状态。系统主要解决的问题包括以下方面:

1)在树莓派上搭建环境,如Python 环境和一些相关的库。

2)利用TensroFlow 搭建合适的卷积神经网络。

3)制作合适的红绿灯数据集。

4)进行图像信息采集,并对其进行处理分析及预测。

5)进行前方障碍物检测。

6)对采集的数据进行分析,决策小车行驶状态,如左转、右转、前进、后退。

系统的目标是通过摄像头采集图像,使用OpenCV 对图像进行处理,实现循迹功能,通过训练深度学习模型对图像进行预测,实现红绿灯识别功能,通过红外避障模块实现避障功能。

该文设计是在Anaconda、VNC viewer 等软件开发环境和树莓派、红外避障传感器、USB 摄像头等硬件平台的基础上实现的。

2 硬件平台搭建

该文设计应用到的硬件有树莓派、红外避障传感器、USB 摄像头、步进电机、电源,硬件结构图如图1 所示。

图1 硬件结构图

2.1 硬件平台

2.1.1 树莓派4B

Raspberry Pi 中文名为“树莓派”,为学习编程而设计,体积很小,音频、视频等功能通通皆有,可以说是“麻雀虽小,五脏俱全”[2]。树莓派4B 的内存升级到了4 GB,引入了USB 3.0,支持双屏4 kB 输出,CPU 和GPU 的速度也更快[5-8]。具有2.4/5.0 GHz双频无线LAN,蓝牙5.0/BLE,千兆以太网,USB3.0和PoE 功能。

2.1.2 其他元器件

摄像头模块进行实时图片采集,并实时将影像通过USB 传输给树莓派。红外避障传感器不断检测前方是否有障碍物,并将信息通过串口传给树莓派。电机负责小车的行驶,一共四块,通过树莓派进行控制。

2.1.3 小车总体展示

智能小车实物图包括主控板、摄像头、驱动轮和红外传感器等,主要用于小车的避障、循迹和红绿灯识别,小车实物图如图2 所示。

图2 智能小车实物图

2.2 环境配置

该文设计是以树莓派4B 为核心的控制和数据传输设备,代码要在树莓派4B 上运行就需要合适的软件环境。

1)配置Python 环境

安装基本驱动,命令如下:

安装库virtualenv,该库用来创建虚拟环境,命令如下:

创建虚拟环境,命令如下:

2)安装TensorFlow

激活虚拟环境,命令如下:

安装TensorFlow,这一步需要先下载TensorFlow 镜像文件,命令如下:

3 系统功能开发

3.1 避障模块

对于避障功能,需要在循迹期间发射红外线,然后通过接收到反射回来的红外线信号计算距离,其次要能够调节障碍物判断的距离标准,如果前方有障碍物,指示灯就会亮,并将信号发送给单片机,再由单片机决策后退、左转、右转或者绕行。

在循迹过程中,当前方无障碍时,红外避障传感器向树莓派发送0 信号,当前方有障碍时,红外避障传感器向树莓派发送1 信号。如果树莓派连续接收到五个1 信号,就判定为前方有障碍,需绕行,再次回到轨道上继续循迹。

3.2 红绿灯识别功能

3.2.1 卷积神经网络模型

卷积神经网络是一种典型的前馈神经网络,其模式具有平移不变性,通过学习样本的局部特征,就可以在其他地方的任意位置识别出该模式,相对于全连接神经网络的全局模式,具有更好的模型泛化能力。经典的卷积神经网络主要由输入层、隐含层和输出层组成[9-12]。

该模型由TensorFlow2.4.0 搭建,采用顺序模型进行连接。训练模型一共七层,第一层、第二层和第四层是卷积层,创建卷积核并运用到某个张量的所有点上;第三层为池化层,可以提取敏感特征;第五层是平均全局池化层,将所有维度加起来求平均,使高宽维度消失,降低维度;第六层和第七层是全连接层,将特征图转换为向量进行分类。

3.2.2 红绿灯数据训练

该数据由小车所使用的USB 高清摄像头所拍摄,使用了红绿灯模型充当现实生活中的红绿灯。在这些数据中,每张图片里不仅有红绿灯,还有一些干扰背景,如后面放一本红色的书,放一个绿色的盒子或将手放在红绿灯模型后,或者控制外界光线的强弱,红绿灯模型距离的远近等因素,力求每张图片的内容都不完全相同。一共采集一千多张图片作为训练集和测试集。

3.2.3 红绿灯识别功能实现

1)模型搭建

模型一共七层,网络可视化的深度学习模型结构如图3 所示。

图3 深度学习模型结构

2)训练模型

先读取训练集,将训练集进行归一化处理,图片大小统一化,将每张图片所处的文件名作为该图片的标签,然后把所有图片和其标签打包在一起,以便训练模型使用,将图像集分成训练集和测试集。采用Adam 优化算法来快速拟合高纬度的数据,损失函数为sparse_categorical_crossentropy,其目标是数字编码。使用之前建立好的模型训练进行30 个epoch 训练。

acc 是每次训练时的正确率,val_acc 是每次训练后对训练数据进行预测的正确率,在第五次训练之后acc 和val_acc 都稳定趋于1,训练结果正确率如图4(a)所示。损失值是衡量模型的效果评估,损失值越小模型越健壮。图中loss 为每次训练时的损失值,val_loss 为每次训练完成后对训练数据进行预测的损失值,总体趋于下降状态,损失值稳定趋于0,损失值如图4(b)所示。

图4 训练结果

3.3 循迹模块

3.3.1 循迹设计

循迹和红绿灯识别都是由摄像头捕捉图像,由树莓派将捕捉的图像进行处理、分析及预测,处理图像前先判断是循迹模式还是识别红绿灯模式。

当处于循迹模式时,循迹模块对图片进行灰度处理,然后再对图像进行分析,获取图像路线的轮廓,计算轮廓的重心,重心点的位置不同对应不同的处理方式,处理方式:如果重心在图的左半部分则左转,如果重心在图的右半部分则右转,如果重心在图的中心位置则直行,如果图中连续没有路线轮廓抬起摄像头表示到了红绿灯路口[13-15]。

3.3.2 循迹功能实现

对于摄像头采集到的图像按照目的分成两类,分别有不同的处理方式[16]。其中一类是用来实现循迹功能的,该图为俯视视角图像,被用来识别路线、图片尺寸小、数量多少。将摄像头获取的图像处理为灰度图,使循迹的轨迹图数据处理速度更快。循迹模块流程图如图5 所示。

图5 循迹程序流程图

3.4 系统控制流程

启动程序时,首先进行初始化:加载深度学习模型model.h5、初始化PWM 调控、打开摄像头端口、控制摄像头面朝地面等。然后执行循迹功能,树莓派接收摄像头画面,分析图像,按分析结果控制小车沿画好的路线行驶,同时红外避障传感器也开始工作,如果前方有障碍物树莓派会接收到红外避障传感器发来的1 信号,然后控制小车进行绕行。如果图像中没有路线,说明到了红绿灯路口,此时树莓派控制摄像头抬起,然后接收摄像头图像,使用深度学习模型预测model.h5 对图像进行预测,根据预测结果控制小车“红灯停,绿灯行”,然后再次进入循迹功能。系统总控制流程图如图6 所示。

图6 系统总控制流程图

4 系统运行测试

测试场景图轨道上半部分设计的是一个红绿灯模型,从右到左分别是一个正方体障碍物、三棱柱障碍物和小车,如图7 所示。

图7 测试场景图

启动小车,小车会将摄像头朝向地面,沿着黑线循迹,直到行驶到黑线消失的地方,即红绿灯路口,然后将摄像头抬起识别红绿灯。红灯亮起时,小车原地不动,继续等待,绿灯亮起时,小车识别到绿灯,然后绕开红绿灯,继续循迹。小车识别红绿灯展示如图8 所示。

图8 小车识别红绿灯展示

小车继续循迹,行驶过两个弯道,小车过完两个弯道后,遇到第一个障碍物,此时红外避障传感器的红外接收器会接收到红外发射器的信号,通过信号计算距离,当距离达到阈值时,传感器指示灯亮起,并向树莓派发送障碍信号。树莓派收到障碍信号后会执行避障程序,绕开障碍物,小车避开正方体障碍过程如图9 所示。

图9 小车避开正方体障碍

避障完成后,小车再次进入轨道,继续循迹,然后第二次遇到障碍物,再次进行避障。

该文将树莓派与深度学习结合识别红绿灯的方式运用到小车上,使用在PC 端训练好的模型进行预测,识别速度更快,识别精确度也会随着训练数据集的丰富不断提高,并且随着训练数据的多样化,识别类型也会增多,如交通牌的识别等。

5 结论

利用树莓派完成了可以避障、循迹、识别红绿灯的智能小车的设计,避障功能由红外避障模块完成;循迹功能由摄像头拍摄路面,采用OpenCV 对图像进行处理,计算出路线轮廓重心,然后由树莓派决策来完成;红绿灯的识别由摄像头拍摄红绿灯,使用深度学习模型进行预测,树莓派根据预测结果进行决策。该设计可以用于配送、无人车等方面。

猜你喜欢
循迹红绿灯树莓
基于DFT算法的电力巡检无人机循迹检测系统设计
基于树莓派的骑行智能头盔设计
红绿灯前
基于单片机的智能循迹小车的设计
神奇的红绿灯
会说话的红绿灯
基于树莓派的远程家居控制系统的设计
智能差分循迹小车设计
基于MC9S12XS128处理器的智能循迹小车分析研究
响应面法优化红树莓酒发酵工艺