0 申明
这是本人2020年的本科毕业设计,内容多为毕设论文和答辩内容中挑选。最初的灵感来自于早前看过的一些项目(抱歉时间久远,只记录了这一个,见下),才让我萌生了做个机电(小车动力与驱动)和控制(树莓派加载CNN控制)结合的智能小车的想法。
因为本人比较懒,底盘改造于玩具小车,这也给画三维图大大增加了难度((⊙﹏⊙)),特别是轮子上加上轮胎印,加上又是临时学的SolidWorks,难搞。另外,使用树莓派是有python开源库和文件系统的优势,但个人感觉还是32更适合电机控制。
都是三脚猫的设计,恐怕要被大佬笑话,就不贴源码了。比较复杂的多线程的摄像头采集、处理,CNN的训练,参考了网上的项目代码,比如下面这个。
手把手教你——树莓派上利用Tensorflow实现小车的自动驾驶_weixin_41663412的博客-CSDN博客
1 前言
随着计算机技术的发展和近年来深度学习方法的突破,自动驾驶技术在技术支持和社会对驾驶舒适度要求的逐步提高下得到了蓬勃的发展,并逐渐将重心放在以计算机视觉为基础的深度学习算法研究中。
该项目设计了一种原先属于自动驾驶深度学习算法的端到端的卷积神经网络模型作为小车行驶算法,以摄像头采集得到的道路图像作为网络模型输入,小车的驾驶操作作为模型计算输出的智能小车,进行自动驾驶深度学习算法移植到智能小车上的可行性测试。设计最终实现了智能小车在实验道路上遭受外力推动、光照不均等干扰条件下的稳定自动驾驶。本设计系统由树莓派3B作为主控,并与PC机进行无线网络通讯,完成了小车遥控和图像采集、图片处理、CNN建立和训练、小车网络加载和自动驾驶。
另外,该项目对网络模型的各层特征图像和卷积核进行了可视化输出,对网络在道路图像上的感兴趣部分使用热力图进行绘制;对小车的整车结构进行了三维图的绘制,使小车减速齿轮、转向机构的结构和整车的安装布局进行清楚地展示。
前言部分首先介绍了设计的背景、意义、发展现状和创新点;其次,对动力、控制系统的原理进行介绍;再次,介绍了系统硬、软件的设计;接着,是设计的调试和问题解决部分;最后,进行了总结和展望。
关键词:树莓派;自动驾驶;CNN;深度学习;网络可视化
1.1 内容与创新
内容:
1. 智能小车本质上是自动引导小车,基本功能为在铺设的道路内自动行驶。小车自动行驶过程中涉及道路图像采集、计算、驱动控制和电机控制。
2. 道路铺设采用与浅绿色底面对比明显的黑色胶线实线带作为道路的边界,适用黑色绞线虚线带作为道路内的辅助引导。
3. 小车的计算决策使用在汽车自动驾驶中使用的“端到端”的卷积神经网络,对采集得到的道路图像输入模型进行计算,输出小车的方向控制信息。小车的速度通过PWM进行控制,小车的方向操作则来源于输出的方向控制信息。
4. 小车的控制器为使用了ARM Cortex-A53架构1.2GHz 64位四核心处理器的树莓派3B(Raspberry Pi 3 Model B),软件平台为Linux衍生系统Raspbian。
创新:
1. 硬件相关
* 道路建设:不同于单线循迹的小车方案,使用铺设道路边线标注小车行驶的车道范围,以在道路内侧增加虚线作为道路的引导线,增加道路的复杂程度,模拟自动驾驶汽车于一般道路上行驶的“实线+虚线”道路标志线配置。
* 车体制作:使用电机转向结构。通过对购置的小车模型进行全方位改造,使用较少的成本获得能满足需要的小车;连接零件、支承机构的抗震处理和车头的防撞保险结构支持小车更平稳、安全得运行。
* 功能模块:采用模块化硬件设计,为开发和后续扩展升级提供了更大可能,且方便维修保养。
2. 软件相关
* 软件平台:小车软件平台采用基于Debian Linux的Raspbian开源操作系统,在具有庞大生态支持、丰富扩展性的同时,方便同包括Windows、Linux、iOS、Android等市面上流行的系统在内的各类操作系统系统进行通信。
* 使用语言:使用跨平台支持的高级计算机语言Python 3,具有丰富的资源库与庞大的受众人群,十分适合用于在有限时间内进行处理图像、搭建神经网络等科学计算与软件开发。
* 控制算法:使用端到端的卷积神经网络,较之于PID、模糊控制等算法,能更好地适应复杂的环境、应对突发情况。
1.2 原理
1.2.1 动力系统原理
1. 电机
图中产生磁场的N与S磁极固定不动,其中线圈两端的铜片分别与两片固定的电刷接触,围绕虚线转轴旋转。
2. PWM驱动
对于小功率的智能小车而言,双极性可逆的PWM驱动因为其低速稳定的特点,是较为常用的PWM驱动方案。
在一个周期T中,电枢电压的平均值U 如下所示:
1.2.2 控制系统原理
1. 无线通信
* SSH登录
PC机对小车的控制是建立在两个系统(Windows与Debian Linux)的基础上的。常见的方法是PC机使用SSH登录进行子机的日常维护。
* 远程桌面登录
虚拟网络计算(Virtual Network Computing,VNC)协议在远程虚拟桌面的登录中较为常见,是基于远程帧缓存(Remote Frame Buffer,RFB)协议进行远程通信的,后者属于TCP的应用层协议。
2. 卷积神经网络
* 反向传播算法
反向传播的思想为计算ANN(人工神经网络)估计值与实际值之间的偏差,并将该偏差从后向前,自输出层起反向传播,直至传播回网络的输入层。各参数的权值将在上述过程的不断迭代中优化、收敛。
* 卷积运算
卷积神经网络的离散卷积与数学分析中的离散卷积不完全相同,其离散卷积为线性运算。CNN卷积运算中的卷积核也被称为滤波器,其大小将对感受野产生影响。
* 池化
池化(或称下采样、降采样)可以看成是缩小图像操作,可以在使图像大小符合要求的同时,减少训练运算的数据量,降低网络的训练时间。CNN一般在卷积操作后会跟上池化操作,以便降低网络的训练时间、减少网络过拟合。
1.3 设计
1.3.1 电路原理框图
本设计主要包含上位机(PC机)、电源模块(包括控制和动力电源)、驱动模块、MCU和摄像头,如图所示。其中,通信模块整合在MCU中。
1.3.2 主控模块
由于树莓派3B售价便宜、拥有丰富完备的外设&#x