Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统

这篇具有很好参考价值的文章主要介绍了Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)

大家好,今天给大家介绍基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦

文章目录:

1、项目简介

  1. 近年来,各行各业都进行着深刻变革,随着电子和AI技术的不断发展,人类进入人工智能时代。人工智能正在不断的优化和取代传统的行业,不断提高人类办公的效率,极大地方便了人们的生产生活。国内外人工智能在自动驾驶方面的应用也不断进步,自动驾驶在未来有着广阔的前景。而自动控制作为自动驾驶技术中重要的一环,有着举足轻重的作用,对于自动控制的研究意义重大。本文主要通过自主设计自动驾驶小车控制系统,并将其和人工智能相结合。本文的主要研究内容如下:
    (1) 提出自动驾驶小车总体设计方案,并进行动力分析,最终确定系统的控制目标并进行方案设计。
    (2) 对系统的控制目标进行模型仿真设计,使用Matlab对PID控制系统进行仿真,对控制过程进行分析和调整。使用SolidWorks对小车各个模块和外形进行精确仿真。
    (3) 对系统的硬件部分进行功能需求分析,确定主控为Arduino,对电机驱动和其他传感器进行选型,设计系统电路。
    (4) 对系统软件部分进行设计,对主要控制部分进行分析、设计控制的流程图、完成系统的主程序及各个模块的程序设计,并完成测试。
    (5) 对搭建完成的自动驾驶小车控制系统进行整体的测试和优化。小车每个电机的转速在0.5s内达到目标值的±0.3cm/s内,系统能够完美实现系统所设定的速度和角度调整。

2、资源详情

项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:20766个字57页
包含内容:全套源码+配整论文
开题报告、论文答辩、课题报告等ppt模板推荐下载方式:
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶


3、关键词

自动驾驶 控制系统 电机控制 Arduino

4、毕设简介

提示:以下为毕业论文的简略介绍,项目完整源码及完整毕业论文下载地址见文末。

第一章 绪论
1.1 研究的目的及意义
当今社会,科学技术的不断发展,行业发生了深刻的变革。随着电子和AI技术的发展,人类进入人工智能时代。随着第三次人工智能浪潮的来临,人工智能势必会引起各个行业的重大变革。AI已经成为新时代的热门研究方向。人工智能正在不断的优化和取代传统的行业,不断提高人类办公的效率,极大地方便了人们的生产生活。国内外人工智能在自动驾驶方面的应用也不断进步,自动驾驶在未来有着广阔的前景。而自动控制作为自动驾驶技术中重要的一环,有着举足轻重的作用,对自动驾驶的研究意义重大。

通过这个题目,不但可以了解科学研究的一般过程,锻炼分析问题、解决问题的能力、掌握人工智能学习的基本流程和知识技能,熟练掌握自动控制原理,还可以将控制和人工智能的流程结合起来,对自动驾驶这类的人工智能最新应用有深入的了解。

1.2 自动驾驶小车研究现状
1.2.1 自动驾驶国内外现状
省略

1.3 主要研究内容和技术流程
本文主要通过自主设计具有一定功能的小车(包含遥控器),并将控制和人工智能的流程结合起来,以自动驾驶这类的人工智能最新应用有更加深入的了解。主要研究内容如下:
提出自动驾驶小车的总体设计方案,并进行动力分析,最终确定系统的控制目标并对系统相关方案进行设计。
对系统的控制目标进行模型仿真设计,使用Matlab对PID控制系统进行仿真,对控制过程进行分析和调整。使用SolidWorks对小车各个模块和外形进行精确仿真。
对系统的硬件部分进行搭建,确定主控芯片、驱动电机、驱动模块、传感器等的选型,对系统电路部分进行设计。
对系统软件部分进行设计,对主要控制进行分析、设计控制的流程图、完成系统的主程序设计以及各个模块的程序设计,并完成编写和测试。
对搭建完成的自动驾驶小车控制系统进行整体的测试和优化。小车每个电机的转速在0.5s内达到目标值的±0.3cm/s内,控制系统能够完美实现系统所设定的速度和角度调整。

1.4 主要工作
根据研究内容,本文的主要工作如图1.3所示
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图1.3 主要工作

第二章 自动驾驶小车系统总体方案设计
2.1 系统整体方案
基于人工智能的自动驾驶小车系统是一个能结合自动驾驶算法程序实现自动驾驶的配套系统。系统由底盘、遥控器、处理器和各种外设构成。底盘由四个轮子为驱动,由主控配合电机驱动,再加上陀螺仪、编码器等传感器实现小车精准移动移动。遥控器使用蓝牙模块与底盘通信,系统可以实现利用图像识别控制小车移动,包括前进、后退、左右转弯、加速减速等。处理器作为一个车载的计算平台,需要具有一定的图像处理能力,通过摄像头捕捉到的实时图像来计算小车运行中运动速度和角度目标值的实时参数。外设包括提供实时图像数据的摄像头、控制处理器所需要的鼠标键盘和屏幕等等。自动驾驶小车系统的小车和遥控器效果图如图2.1、图2.2所示。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图2.1小车底盘效果图
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图2.2 遥控器效果图
自动驾驶小车系统先通过摄像头采集的图像数据作为数据集结合自动驾驶人工智能框架进行模型训练。在自动驾驶小车运行过程中,处理器通过接收到的图像数据结合已有的框架计算出实时的速度和角度目标值,再将这些数据传给底盘的主控最终实现自动驾驶小车系统的控制,最终完成如图2.3所示地图预设的路线(绿色和蓝色为触发区,红色为终点区,除了起点、终点和普通路面,还包含一段斑马线)。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图2.3 地图
2.2 系统需求分析
根据对系统的运行过程的分析,系统要完成自动驾驶功能的验证,必须具备能直线行驶、能精准转弯等功能。为保证小车准确的按照地图预设线路行驶,必须得到精准的角度和速度数据并对其进行调整控制,现在对自动驾驶小车系统的设计需求进行分析。
(1) 在系统控制的性能方面,要求及时性和准确性,在得到处理器的指令后,整个系统必须做出正确、快速、稳定的响应。
(2) 直线行驶的时候,自动驾驶小车两侧的轮子转速必须保持一致。转弯的时候必须保持负责转向的轮子转速稳定即单位时间内转过的角度一定。
(3) 系统在运行的过程中,速度和角度的实际值要在至多0.5s内达到目标值附近,这样才能做到实时控制以完成各种运行目标。
(4) 自动驾驶小车系统要具有可扩展性和可移植性,便于之后加入其他的传感器和模块以完善功能。

2.3 控制分析
在自动驾驶小车系统的设计过程中,应该先分析系统在不同工作状态条件下的情况,以进行对应的调整,准确的调整需要对系统进行数学建模,结合运动学和动力学模型进行分析和计算,为自动驾驶小车系统的控制提供理论依据。
因为实际情况比较复杂,所以这里做两个近似处理。小车运行的直接动力是轮子与地面的摩擦力,电机驱动轮子转动同时轮子摩擦地面产生与转动方向相反的摩擦力, 这个摩擦力分为静摩擦力和滑动摩擦力这两部分。由:
F1 = F (2-1)
静摩擦力的大小与电机驱动轮子转动的力大小相等。由:
F2 = k * Fn (2-2)
滑动摩擦力与正压力成正相关,我们在实际分析的时候,不考虑滑动摩擦力这一小部分的影响,即小车运行的速度只与电机转动的速度有关。
同时由于电机差异和电压的波动等因素,必须采取一些电机的控制算法才能使电机的实际转速与目标值相同,所以这里在进行运动学和力学分析的时候先不考虑这些因素,认为电机转速就等于我们的目标值。
当小车的直线运行的时候比较简单,四个轮子朝同一方向同一方向转动即可,这样小车的四个动力和合力一直朝向前方,小车向前运动(如图2.4)。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图2.4小车前进受力分析
当小车需要转弯的时候,由于四个轮子和电机是完全一样的,且方向都相互平行,所以需要通过控制电机转动的速度和方向来产生电机差速以实现小车的转弯。如图,例如右转时,位于小车左侧两个轮子都朝前转动,右侧的两个轮子都朝后的转动 (如图2.5)。同时,四个轮子的中心最好能组成一个正方形,这样能保证小车在转弯时车身位置和图像采集结果的一致性。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图2.5小车左转受力分析
小车停车的时候,直接把所有电机的转速降为0即可,小车本身速度不快,不需要设置刹车系统和刹车算法。
2.4 方案设计
根据自动驾驶小车系统的整体方案以及对控制对象的分析,结合工作过程的主要硬件设备,把制作过程划分为如图的控制过程框图2.6。-
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图2.6 方案设计框图
控制系统的主要控制对象为系统的驱动电机。主要的控制参数时:电机的转动方向、转动速度等等。控制系统主要通过编码器、陀螺仪等传感器得到系统的运行方式及运行状态数据。然后将这些数据进行处理,再以此为依据对不同的电机进行精确的控制,使系统按照提前设定的路线运行。
在具体的控制过程中,用于测量直流无刷电机转速的传感器实时接收速度数据,通过 AD 转换程序将模拟量数据转化为数字量,并通过控制程序和有关算法,对其进行补足和调整,然后通过 PWM 控制器将控制数据输送给电机,从而实现对直流无刷电机的控制。
对于电机的实际值,不能仅通过PWM控制与目标值相等的问题,采用PID算法进行控制,实时计算变化到目标值所需要的PWM值,以实现电机转速的实时调节。小车转弯的过程也是如此,设置小车转过的目标角度,然后借助PID算法进行实时调节,可以快速且准确地使实际值接近目标值。

2.5 本章总结
本章首先对自动驾驶小车的整体结构和工作原理进行了介绍。接着对系统控制进行分析,建立了系统的动力学模型,确定了主要的控制参数和控制目标。然后对控制系统的需求和要求进行了分析,主要包括精准性和及时性,安全性,可移植性等。最后对控制系统的总体方案进行了设计,确定了控制的主要目标和方法,在控制电机行进驱动的转速时,引入了 PWM 控制和PID 控制算法进行精确控制[4]。

第三章 系统模型仿真
在自动驾驶小车系统的设计过程中,由于涉及多种工作部件和传感器,传统设计过程复杂且需要多次实际调试才能达到理想效果,为减轻工作量、减小设计难度和缩短设计流程,需要采用建模仿真技术。顾名思义就是借助仿真软件,在软件中完成数学模型和实体模型的构建,通过计算机进行运算求解,得出适合于所设计系统的控制方法,这样可以大大提高系统设计地效率。对驱动电机进行仿真设计,是控制系统设计的重要一环,也是控制系统构建的理论基础。
在自动驾驶小车系统的运行过程中,主要的运动状态是直行和转弯,通过直流无刷电机的转速控制实现的,所以在控制系统的仿真过程中,主要通过 MATLAB中的 SIMULINK 模块对电机的驱动PID 控制方法进行逻辑构建和仿真,通过给予系统有关参数,进行仿真分析,最终得出有效控制条件和相关参数,为控制系统的程序设计和样机制作提供条件。
同时,对于实物搭建来说,系统的结构和布局仿真也是必不可少的。通过SolidWorks可以对系统的所有结构和模块进行三维仿真,并模拟小车在地图中的运行过程,这对实物搭建和系统调试都是非常重要非常必要的,为最终自动驾驶的实现打下坚实的基础。
3.1 PID控制方法及仿真
3.1.1 PID的原理
PID控制器因为结构简单、容易实现,并且具有较强的鲁棒性,因而被广泛应用于各种工业过程控制中。作为一种广泛的控制规律,PID控制在相当长的一段时问内并没有因为各种先进控制算法的出现而遭到淘汰,相反,经过时间的考验,PID控制仍然在各种控制技术中占着主导地位[5]。
PID控制器是一种基于偏差“过去、现在和未来”信息估计的有效而简单的控制算法,常规PID控制系统原理如图3.1所示。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图3.1 PID控制系统原理图
整个系统主要由PID控制器和被控对象组成。然后对偏差按比例、积分和微分通过线性组合构成控制量对被控对象进行控制。由图3-1得到PID控制器的理想算法(e(t)是目标值和实际输出值的偏差)为:
u(t)=Kp[e(t)+1/T_i ∫_0^∞▒〖e(t)dt+T_d (de(t))/dt〗] (3-1)
根据式子可以知道和理解PID的三个参数:
比例控制Kp,能提高系统的动态响应速度,迅速反映误差,从而减少误差,但是不能消除误差,简单来说就是越大越快越小越慢但是可能会超调或者过慢有很多弊端,并且太大了会不稳定。
积分控制Ki,一般就是消除稳态误差,只要系统存在误差积分作用就会不断积累,输出控制量来消除误差,如果偏差为零时积分才停止,但是积分作用太强会使得超调量加大,甚至使系统出现震荡,对这种震荡进行预测呢,就是需要第三项的微分。
微分控制Kd,微分显然与变化率有关,它可以减小超调量来克服震荡,使系统稳定性提高,同时加快响应速度,使系统更快有更好的动态性能,可以根据变化率来判断系统快要上升还是下降来提前改变系统的控制量这就与积分作用形成互补,这样一来系统就几乎完美了[6]。
以上部分是对连续系统PID算法的分析,但是计算机控制是不连续的,所以在编写程序时需要对数学表达式进行转换,用求和代替积分,用向后差分代替微分,最后形成模拟PID的离散化差分方程。

u(t)u(k)								(3-2)
e(t)e(k)									(3-3)
∫_0^t▒〖e(t)dt=_(i=0)^k▒〖e(i)〗 ∆t=_(i=0)^k▒〖Te(i)〗〗			(3-4)
(de(t))/dt≈(e(k)-e(k-1))/∆t=(e(k)-e(k-1))/T							(3-4)
然后得到增量式PID的计算公式:
{(∆U_0 (n)=K_p {[ε(n)-ε(n-1)]+T_D/T[ε(n)-2ε(n-1)+ε(n-2)]}@U(k)=u(k)+U(k-1))(3-5){(∆U_0 (n)=K_p [ε(n)-ε(n-1)]+K_i ε(n)+K_d [ε(n)-2ε(n-1)+ε(n-2)]}@U(k) =u(k)+U(k-1))(3-6)

3.1.2 PID的Simulink仿真和调参
先设置好传递函数和随便的PID控制器的参数,根据PID调参的经验,Ki和Kd的值一般不会过大,先都设为0,Kp随便设一个,此次设置为6。借助Matlab的Simulink功能,以阶跃函数为信号源,末端加入示波器观察,进行结果仿真。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图3.2 Simulink仿真流程
双击示波器会产生波形,根据波形调节参数知道得到理想波形。根据查找到的调参方法,进行调参:
(1)确定比例系数Kp
确定比例系数Kp时,首先去掉PID的积分项和微分项,可以令Ti=0、Td=0,使之成为纯比例调节。输入设定为系统允许输出最大值的60%~70%,比例系数Kp由0开始逐渐增大,直至系统出现振荡;再反过来,从此时的比例系数Kp逐渐减小,直至系统振荡消失。记录此时的比例系数Kp,设定PID的比例系数Kp为当前值的60%~70%。
(2)确定积分时间常数Ti
比例系数Kp确定之后,设定一个较大的积分时间常数Ti,然后逐渐减小Ti,直至系统出现振荡,然后再反过来,逐渐增大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。
(3)确定微分时间常数Td
微分时间常数Td一般不用设定,为0即可,此时PID调节转换为PI调节。如果需要设定,则与确定Kp的方法相同,取不振荡时其值的30%[7]。
最终参数为Kp = 8,Kd = 0.5,Ki= 0.1。示波器图像如图3.3。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图3.3 Simulink示波器图像
3.2 系统的结构和布局仿真
系统的结构和布局的仿真主要是借助SolidWorks进行一比一的三维模型仿真。尽可能细节地模拟实物地情况,为自动驾驶功能地实现和优化做好铺垫。
小车地模型仿真结构比较简单,主要包括轮组、电池、主控板等部件,如图3.4、3.5所示。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图3.4 小车模型视图1
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图3.5 小车模型视图2
遥控器模型是完全体,因为在构思过程中的模型没有保存,所以展示的是与实物完全相同的模型,包括亚克力外壳、主控板、电池、开关、蓝牙模块等等。如图3.6、3.7。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图3.6 遥控器模型视图1
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图3.7 遥控器模型视图2
3.3 本章小结
本章主要对自动驾驶小车系统的PID参数调整过程和三维模型进行仿真,并对相关结果进行分析,为控制系统的软硬件设计提供了理论支撑,为整个项目的顺利进行打下良好的基础。

第四章 控制系统硬件设计
根据仿真结果,对系统的硬件部分进行选择,包括主控芯片、电机电机、传感器等。并设计电源供电电路、电机驱动电路、串口通信电路。
4.1 控制系统硬件构成
自动驾驶小车系统的设计中,硬件部分设计是控制系统实现的基础,处理器需要对采集到的图片进行处理并运行设计好的人工智能框架对底盘做出控制,底盘主控搭载的芯片可以运行控制整个系统所需要的程序,然后再由系统的末端,比如电机、指示灯等严格执行,还需要由传感器得到小车实时的状态数据。这些部分一起构成了自动驾驶小车的硬件部分。

4.2 小车主控芯片选择
主控芯片作为自动驾驶小车系统的核心,在整个控制系统中起着至关重要的作用。整个自动驾驶的实现过程都要求主控芯片能够及时反应并控制各个部分做出正确反应,在成本不高的情况下保证控制的高效安全,操作难度也不应过高。因此,经过对性能、价格、操作性等等多个方面的综合考虑,我最终选择了 Arduino Mega 2560。
首先是Arduino的平台优势。Arduino有高度复杂的硬件系统,但结构高度模块化,易于使用,通过USB接口与PC建立通信,是一款极为优秀的电子设计平台它集硬件(Arduino板)和软件(Arduino IDE)于一体。Arduino 是一个基于开放源码的软硬件平台,构建于开放源码 Simple I/O界面,使用的代码语言是C++。Arduino开发板大多数是基于AVR的8位单片机,目前有许多型号。常见的有基于Atmega328p芯片的Uno、Nano、Mini以及基于Atmega2560芯片的Mega2560。
但是随着技术的发展,8位的单片机已经无法满足人们的需求,32位的处理器登上了舞台,Arduino因此推出了基于ARM的32位型号DUE,同时为了顺应物联网时代的到来又推出可以接入以太网的 YUN[8]。
小车的四个电机加上众多的传感器,需要一个有多个接口的Arduino型号,经过Uno与Mega 2560的对比,如下表4.1。
表4.1 Mega2560与Uno比较
数字引脚 PWM引脚 模拟引脚 外部中断引脚
Uno 14 6 6 2 3
Mega2560 54 15 15 2 3 21 20 19 18
最终选择了中断引脚和数字引脚较多的Mega 2560作为小车的主控。

4.3 电机和电机驱动选型
自动驾驶小车系统的主要工作部件主要为直流无刷电机,还有编码器和陀螺仪等可以获得小车运动状态的传感器部件。所以在选择电机的时候,带有编码器直流无刷电机,可以在给系统提供前进动力的同时,还可以通过分析编码器数据获得电机旋转方向和电机转速等重要参数,选择合适的传感器可以提高系统控制的精度和效率,也能节约成本和系统空间。
4.3.1 驱动电机选型
直流无刷电机作为同步电机的一种,它的转子的转速受到其定子旋转磁场的速度及转子极数的影响。直流无刷电机既具有交流电动机结构简单、运行可靠、维护方便等一系列的优点,又具有直流电动机运行效率高、调速性能好等诸多的优点。直流无刷电机最重要的部分就是它的控制结构,它的驱动器可以控制转子维持在一定的转速,性能更加的稳定。直流无刷电机广泛应用于现代生产设备、仪器仪表、计算机外围设备和高级家用电器。它具有效率高、寿命长、低噪音等优点。效率高:一般的直流无刷电机的效率能够达到96%以上,而传统的直流电机的效率一般75%左右;效率高,达到能量的转换高,电能转化成电机的转动机械能就高,这样可以非常节能,作为自动驾驶小车系统的驱动比较其他电机可以大幅减少能源损耗。寿命长: 一般有刷的传统电机,由于碳刷的磨损性,隔一段时间就要更换,维修频繁,而直流无刷电机,一般的使用寿命都在2万小时以上,正常工况条件下,使用5年以上,基本不会损坏,所以直流无刷电机的寿命是传统电机的5倍。低噪音,直流无刷电机由于结构简单,零配件能够精密配合安装,运行比较平滑,运行声音在50db以下,很多的医疗设备都因为直流无刷电机的静音性能而采用直流无刷电机。
同时直流无刷电机可以配套编码器使用,编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感器,我们可以通过编码器测量到底位移或者速度信息。编码器按照检测原理可以分为光学式、磁式、感应式、电容式,常见的是光电编码器(光学式)和霍尔编码器(磁式);按照运动方式可分为旋转编码器或者是线性编码器,旋转编码器按照工作原理可以分为增量式编码器和绝对式编码器:增量式旋转编码器仅在电机旋转时输出脉冲,要使用增量编码器确定轴位置,您必须知道起始位置并使用外部电路来计算输出脉冲数;绝对旋转编码器输出对应于旋转角度的数字代码,无需计算脉冲来了解电机轴的位置。
增量编码器可以通过正交编码来得到电机转动得方向。正交编码是一种增量信号,增量编码器转动后即可产生两种方波输出A和B;这些信号共同构成了增量编码器的正交输出。对于多数编码器而言,这些方波A和B均失相90度。通过观察A和B输出不断变化的状态,编码器的方向得以确定。有两个通道:通道A和通道B。
同时电机还要保证一定的驱动力,需要选择合适的电机减速比,供电电压也不能太高或者太低,应12V附近为宜。
综合以上这些原因,我选择了带有霍尔编码器(增量编码器)的直流减速无刷电机JGB37-52电机,电机参数如下图4.1、表4.2。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图4.1 电机产品尺寸

型号 减速比 空载转速 额定扭矩 停转电流 长度
JGB37-52 1:56 178 6.5N/m 2.3A 24mm
表4.2 电机产品参数
编码器参数如下图4.2。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图4.2 编码器参数
4.3.2电机驱动器的选型
电机正负极接电源就可以转,但要是像在不改变电路结构的情况下改变电机转向就得借助电机驱动,同时电机驱动器可以使得通过PWM信号控制电机成为可能,调节电机转速变得更方便。
考虑价格和其他开发者使用频率等因素,我最终选择了L298N电机驱动板模块。
这个模块使用ST公司的L298N双H桥直流电机驱动芯片作为主控驱动芯片,具有驱动能力强、发热量低 ,抗干扰能力强的特点。模块供电部分使用内置的78M05,可以保护芯片(驱动电压大于12V时用外置5V逻辑供电)。模块还使用大容量滤波电容,续流保护二极管,提高可靠性[9]。
驱动模块的具体参数如下表4.3。
表4.3 L298N主要参数
型号 芯片 驱动供电范围 逻辑端供电范围 最大功耗
L298N模块 L298N双H桥直流电机驱动芯片 5V-35V 5V-7V、 20W

4.4 传感器的选型
在自动驾驶小车系统控制的过程中,除了通过已选电机自带得编码器读取和计算电机转速和转动方向之外,还需要实时读取小车转过得角度,以实现完整转弯和辅助小车前进等作用。
陀螺仪是根据陀螺在转动过程中受到外力矩作用后的特殊运动为原理设计的。绕一个支点高速转动的刚体称为陀螺。陀螺仪在工作时要给它一个力,使它快速旋转起来,一般能达到每分钟几十万转,可以工作很长时间。然后用多种方法读取轴所指示的方向,并自动将数据信号传给控制系统。陀螺仪有很多种类,根据框架的数目和支撑的形式可分为三自由度陀螺仪、二自由度陀螺仪[10]。
无人驾驶小车系统暂时只需要知道系统Yaw轴(即陀螺仪Z轴)的实时转动角度就可以实现功能(即只需要二轴陀螺仪),但由于陀螺仪自费购买,只买二轴陀螺仪可以降低小车的成本,但是不利于我以后继续进行其他实验,所以我最终选择了深圳维特智能科技生产销售的六轴姿态角度传感器,产品型号JY61。产品各项参数如下表4.4:
表4.4 陀螺仪参数
型号 供电电压 工作电流 通信方式 角度量程 角度精度 波特率
JY61 3.3-5V <10mA TTL、IIC ±180 0.1° 9600/20Hz
JY61模块包含了陀螺仪加速度计MPU6050、稳压电路和STM8单片机。MPU6050是模块的核心,它由四部分组成:加速度计、陀螺仪DMP、温度传感器。而STM8通过IIC读取MPU6050中DMP的测量数据然后通过串口输出,这样。用户既可以通过串口直接读取数值也可以直接访问底层的MPU6050的IIC接口获得二进制数据。MPU6050的正式名称是六轴运动姿态陀螺仪传感器,之所以是六轴是因为它不但包含了三自由度的陀螺仪还包含了一个可测量三维加速度的加速度计,再结合姿态融合算法最终可以直接输出三轴的加速度、角速度和角度。

MPU6050也存在一些问题,由于模块不包含三轴电子罗盘,所以在Z轴上,角度没有参考,所以Yaw轴的绝对角度是无法得到的,而是通过加速度计做速度积分得来的,所以陀螺仪在Yaw轴上会出现零飘,这个角度刚好是我们系统所需要的角度。好在JY61模块对这一问题进行了两个方面的优化,首先是模块在每次通电的时候都会进行Yaw轴角度清零,由于有了这项措施,角度问题不会一直累积。其次,模块的生产厂商维特智能在产品配套的上位机中设置了静止检测阈值的选项,角度偏转在很小的一个值范围内时认为角度没有改变,且这个阈值可以有多个选项可以调节,这样可以最大限度地减小由于零飘带来的影响。(实际测试中本模块精度非常高,经过多轮测试,小车通电自由运动10分钟左右,角度误差只有0.3度,精度是可以接受的。)

4.5 处理器选型
通过在绪论中常见的自动驾驶小车使用的处理器的市场调研和分析,一般的小车处理器都是Jetson Nano和树莓派4两种。Raspberry Pi(树莓派)是一种优秀的小型计算机与物联网开发主板。它不仅是一个低功耗的物联网设备,而且还是一个很好的原型设计工具,甚至还可用于构建物联网相关设备,目前已经升级到第四代。NVIDIA发布了很多种物联网主板,其中NVIDIA Jetson Nano是最新的主板。该主板作为开发工具包提供了物联网解决方案在设计原型时所需的所有输入和连接。通过查找资料,对两款处理器做了以下比较,如下表4.5:
表4.5 两款处理器的对比
型号 CPU 内存 USB端口 GPU
树莓派4b 四核
Cortex-A72 LPDDR4
4GB 2USB2
2
USB3 双4K显卡
Jetson Nano 四核
Cortex-A57 LPDDR4
4GB 4*USB3 NVIDIA Maxwell
两者之间最大的区别在于NVIDIA Jetson Nano包含性能更高、功能更强大的GPU(图形处理器),而Raspberry Pi 4具有低功耗的VideoCore多媒体处理器。所以,对于人工智能自动驾驶系统的图像处理和运行人工智能框架来说,虽然Jetson Nano的价格会贵一些,但是更适合作为人工智能自动驾驶系统的处理器。我最终选择了Jetson Nano作为小车的处理器(如图4.3)
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图4.3 Jestson Nano产品介绍图

4.6 遥控器硬件选型
主控芯片选择:Arduino Nano,Arduino Nano 是一款类似Arduino UNO的开发板,区别是Nano的尺寸更加小巧,基于 ATmega328P的开发板。Arduino Nano 与Arduino Uno十分类似。它与Uno的区别是Nano没有直流电压供电接口同时Nano通过Mini-B USB 接口与电脑连接,主要技术参数如下表4.6:
表4.6 Arduino Nano主要参数
型号 输入电压 数字引脚 PWM 模拟输入引脚
Arduino Nano 7-12V 22 6 8
摇杆模块:遥控器采用的方案是单摇杆加多个按键的方案,为了方便开发减小遥控器的体积,选择了摇杆模块Joystick Shield for Arduino。摇杆模块提供七个按钮开关(六个独立按钮和摇杆下方的按钮)和一个带有两个电位计的拇指摇杆。同时模块还提供了蓝牙模块的接口(摇杆模块实物图如图4.4)
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图4.4 摇杆模块实物图
蓝牙模块:蓝牙模块就是集成了蓝牙芯片的模块,用于无线通讯和数据传输等等,区别于我们平常说的手机和电脑中使用的“蓝牙”是指蓝牙适配器,对于用户来说,蓝牙适配器的使用比较方便,而蓝牙模块可以获得传输的初始数据,简单来说蓝牙模块是未完全的半成品而蓝牙适配器是一个完善的产品。蓝牙之间一般通过特定的蓝牙协议进行通信,在蓝牙连接后蓝牙可以直接当成串口使用。蓝牙在通信过程中是区分发射端和接收端的,即分发射端为主机,接收端为从机。我选择了HC05主从一体机模块,它的参数如下表4.7:

表4.7 蓝牙模块主要参数
型号 工作电压 默认波特率 模式 通信方式
HC05 3-3.6V 9600 主从一体机 双工串口,无需协议
蓝牙HC05是主从一体的蓝牙串口模块,简单的说,当蓝牙设备与蓝牙设备配对连接成功后,我们可以忽视蓝牙内部的通信协议,直接将将蓝牙当做串口用。当建立连接,两设备共同使用一个通道也就是同一个串口,一个设备发送数据到通道中,另外一个设备便可以接收通道中的数据[11]。具体使用的时候,主机模块连接手柄,从机模块连接小车的主控,通过蓝牙串口传输一些代表不同运动指令的信号来实现手柄对小车的控制。

4.7 控制电路设计
由于时间比较紧张、加工能力有限,电路设计以市面上能购买到的模块为主,这样大大提升了开发效率缩短了开发周期,同时系统的稳定性更有保证,遇到各种硬件问题的概率小同时方便找到类似的问题来参考解决。
4.7.1 小车电源供电电路
整个供电电路分成电池和电源模块两个部分。
对于小车来说,电池使用9节18650芯定制的12V 8400mAh锂电池。12V电压可以直接给L298N模块和电机供电,8400mAh的大容量可以足够支撑包含处理器在内的整个系统的用电要求,同时定制为长条型更有助于小车整体空间的安排。
电源模块使用的是网络购买的可调自动升压模块(主要参数如表4.8),模块采用升降压芯片作为主要控制器,外置60V 75A MOS管作为开关管,双60V 5A SS56肖特基做整流。可以做到宽电压输入5-30V, 宽电压输出0.5V-30V,既能升压也能降压,适用范围广且效果好。有三种作用,首先可以作为有过流保护能力的稳定升压模块,也可以恒流输出当作电池充电器使用,最后还可以作为大功率LED恒流驱动模块使用。完美匹配直接给给处理器供电,处理器再直接給主控供电。

表4.8 电源模块主要参数
输入电压 输出电压 输出电流 输出功率 工作频率
5-30V 0.5-30V 稳定3A 自然散热35W 180KHZ
对于遥控器来说,电池使用一节18650可充电3.7V锂电池,容量2000mAh。电源模块使用的是网络购买的的3.7V升5V/9V可调模块(模块主要参数如表4.9),将电池所提供的3.7V电压升到9V给Arduino Nano供电,然后主控再给手柄模块供电,手柄模块给蓝牙模块供电。电池参数如下表4.10。
支持电池 输入电压 输出电压 输出功率 冲击电流
3.7V锂电池 4.8-8V 4.3-25V 恒定7W 1A(max)
表4.9 升压模块主要参数
表4.10 18650电池主要参数
型号 最小放电电压 充电电压 标称电压 直径 高度
18650钴酸锂电池 2.75V 4.2V 3.7V 18mm 65mm

4.7.2 电机驱动电路
本设计选择的六线AB相直流减速电机不能直接用直流电源进行驱动,所以需要与相应的驱动器相连。这里选择的是L298N,再将L298N引脚与主控引脚直接相互连接,才能使用单片机进行相应的控制,每个L298N驱动有OUTA和OUTB两组输出,可以控制两个电机,所以小车一共需要两个L298N。
驱动模块还能通过PWM输出口进行更精确的控制,严格控制电机转速从而提高系统的控制精度。板载5V跳线帽拔出,电池直接给电机供电,主控给编码器供电,IN1 2 3 4 连接主控数字引脚,编码器输出连接主控中断口。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图4.5 小车底盘硬件连接图

4.7.3 遥控器电路设计
遥控器的模块比较简单,电池在电池座固定,经过升压模块升压之后给主控供电,主控再给手柄模块供电,蓝牙模块直接连接在模块提供的接口处,整体露在外壳之外,有助于蓝牙信号的发射和指示灯状态的观察。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图4.6 遥控器硬件连接图
4.6 本章小结
本章主要依据系统的主要需求,结合开发流程中的时间成本等因素对硬件设备进行了选择,除了处理器Jetson Nano的选择之外,对于小车,首先是Arduino Mega2560主控的选择,其次是直流无刷电机的选择-带霍尔增量式编码器的六线AB相电机JGB37-520,另外是电机驱动模块L298N,最后是6轴陀螺仪和电池电源模块的选择。对于遥控器,选了主控Arduino Nano、手柄模块Joystick Shield for Arduino、蓝牙模块、电池电源模块等。

第五章 控制系统软件设计
5.1 控制流程设计
自动驾驶小车系统的控制分为小车移动控制和遥控器远程控制两部分,分别对应小车自主移动和图像采集这两个部分。
5.1.1 采集图像
在采集图像的过程中,先由处理器运行采集图像的程序,程序只包括开启摄像头和保存图像的工作并与处理器建立联系。同时遥控器蓝牙与小车蓝牙配对成功,遥控器可以通过摇杆和按键来控制小车直行转弯等运动方式,同时由主控将实时的图像以及对应的当前小车的角度和速度传回处理器进行记录。当采集图像的数目或者采集的时间达到程序设定的要求,处理器将向主控发出终止信号,小车停止运动保持静止,随后停止图像采集工作。流程图如图5.1:
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图5.1 图像采集流程图
5.1.2 自主移动
在图像采集完成之后,得到了小车在行驶过程中的全部图像以及实时对应的角度和速度。把这些数据的一部分作为数据集,进行人工智能的模型训练(这一部分不是我的主要工作,不做赘述),当模型训练好之后,它能对在自主移动过程中的图像进行角度和速度的反馈,进而使得小车自主移动成为可能。
在自主移动过程中,开始运行自主移动的程序之后,处理器先和小车主控通过串口建立通信,小车的默认状态应该是以一定速度向前直行,并开始不断地拍摄实时照片交由处理器进行分析,处理器再结合之前训练得到的框架计算出小车当前的目标速度和目标角度。主控的控制程序会根据目标值进行实时的调整,完成矫正直行、转弯、停车等自动驾驶的必要操作,对自动驾驶功能进行验证。自主移动过程的流程图5.2:
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图5.2 自主移动流程图
5.2 主程序设计
主程序即自动驾驶小车系统控制中的主要程序,是对整个系统进行控制的主要过程。是主控上电之后所执行的程序,由于单片机的逻辑决定主程序贯穿控制的整个过程,会不停地重复执行。同时主程序对各个模块的程序进行宏观的把控,对自动驾驶小车系统的控制过程十分重要,主程序的流程图如图5.3所示:
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图5.3 主程序流程图
主程序覆盖控制程序执行的整个过程,主程序先进行初始化过程,这个过程包括、串口初始化、蓝牙所用的软串口初始化、定时中断的初始化、各种参数变量的初始化等等。然后就开始进入loop循环过程,程序逻辑是:整个系统是通过四个轮子转速来决定小车的状态,在loop函数的开始位置就根据目标值计算四个电机对应的PWM值并赋值,接着小车根据接收到的信息进行调整,如果是在自主移动这一过程中,需要不断接收处理器通过串口发出的信息并根据信息进行调整,最终完成目标任务。

5.3 程序模块设计
有了主程序进行整体调整控制之后,每个模块的功能需要分别设计和完善,小车的带电机算法控制程序是程序设计的非常重要一部分,把这一部分作为电机算法程序部分单独做阐述,其他各个模块像电机驱动、蓝牙模块初始化和通信、遥控器的整体程序设计和小车各种运动的程序设计都是总体控制算法非常重要的一部分。
5.3.1 电机驱动程序设计
电机驱动程序是控制系统最重要的程序之一。因为每个电机及配套的L298N驱动模块都有很多接口,所以设置一个四行五列的二维数组Motor_Pins来代表四个电机的所有端口,每一行的四个端口分别是IN1、IN2、PWM、EncodeA、EncodeB(即中端A和中断B),(但在实际变成过程中由于Mega2560外部中断接口个数受限,只使用了每个电机的中断A。
当需要驱动电机的时候,先进行端口初始化,IN1、IN2、PWM设置为OUTPUT且默认状态为LOW,中断设置为INPUT。PWM的范围是0-255,通过控制输入PWM值的大小可以决定电机得转速(经过测试,空载速度在0-50,对应的PWM值是40-255)。IN1、IN2根据L298N的真值表,可以决定电机是正转、反转、还是不转。
表5.1 L298N真值表
电机旋转方式 IN1 IN2
正转 高 低
反转 低 高
停止 低 低

5.3.2 小车运动程序设计
电机驱动之后,根据四个电机转速的不同,小车可以有不同的运动状态,根据自动驾驶小车实现的实际情况,主要写了直行和左右转弯两种状态。
直行的时候,保证四个电机转速相同即可,即四个电机都输入相同的PWM值,但其实实际操作起来比较复杂,由于小车质量分布不均匀、四个电机之间的个体差异等等原因,很难保证在直接输入相同PWM的情况下保证四个轮子的转速相同,当然直线行驶也会非常困难。
转弯的时候,主要是通过四个轮之间的差速使小车的姿态发生改变,经过前面的仿真模拟分析,我们采取的使同侧两个轮子转动方向相同,不同侧两个轮子转动方向相反的方法。因为这样小车只有转弯的分量而基本没有前进的分量比较容易分析转弯的角度及其对小车状态的影响。
程序的实现也比较简单,在左转的时候只要使小车的1、2号轮的IN1、IN2两个端口取反就可以,反过来右转只需要改变0、4号轮的IN1、IN2值。

5.3.3 蓝牙模块程序设计
蓝牙模块作为遥控器和主控通信的重要模块,在整个系统中有着非常重要的地位,前面介绍过HC05是主从一体机可以设置到底是主机还是从机还是自连检测,这一切都需要通电后先长按使能开关,然后借助AT指令对模块进行波特率修改、模式设置、地址设置、密码修改等初始化过程,然后再进行配对并成功才可以使用,下次使用时蓝牙通电后会自动连接。同时AT指令还可以进行,清空配对列表、蓝牙的名称修改等操作。
先选择购买的两个模块的其中一个配置为主机,用USB转串口模块连接主机之后,在串口调试助手的发送框输入以下指令进行设置,AT+NAME=BT-Master将蓝牙名称设置为BT-Master;AT+ROLE=1将蓝牙模块设置为主模式,每一步如果设置正确都会返回OK。同理把另外一个模块设置为从机,并改变名称为BT-Slave,蓝牙的密码、波特率、连接地址等都是默认相同的,如果是新买的蓝牙模块可以不用修改。
两个模块都设置完成之后,返回工作模式,并重新上电,模块会先分别快速闪烁,然后开始同步慢闪,则表示蓝牙连接成功,之后就可以当作串口直接使用。

5.3.4 遥控器程序设计
遥控器作为在采集图像阶段控制小车的重要部分之一,非常重要。遥控器通过摇杆控制小车前进、后退、左转、右转等运动形式。摇杆通过两个模拟口来传输数据来表示手柄摇杆所在的当前位置,摇杆最左下角时A0、A1均为0,当摇杆在最右上角的时候,A0、A1的值随电压不同而变化,3.3V供电时值为720。定义一个状态变量style,当style为0-4,代表五种不同的状态,X在200到500之间且Y在200到500之间时,状态为0,表示车原地不动,同时因为理论上小车转弯时并没有前进的分量,所以当X小于200,且Y介于200到500之间时,状态为4,代表小车左转。如图5.4:
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图5.4 摇杆操作示意图

5.4 电机算法程序
5.4.1 计算电机转速
因为使用的是带编码器的电机,所以可以通过使用主控的外部中断读取到电机的脉冲频率,再结合电机的加速比等信息可以计算出电机的转速。
外部中断,通俗点来说,就是主控会监控某几个端口的点位状态,当电位满足一定的触发条件之后就可以被检测到并运行中断函数。常见的Arduino Uno只有两个外部中断引脚,此次使用的Mega2560由6个中断引脚,但仍不满足四个电机的使用,所以每个电机只连接了编码器两个输出其中的一个,但是足够用了。
Arduino外部中断的使用,使用函数attachInterrupt(interrupt, function, RISING),上升沿检测信号脉冲,function设置MotorCount变量计数在50ms内的脉冲的个数。
最后速度v = ((MotorCount / (11 * 56)) * 6.5 * PI) / 0.05 其中11表示,电机每转过一圈有11个脉冲,电机减速比是56,轮子的直径是6.5cm,0.05表示在50ms以内。

5.4.2 PID控制算法
PID是Proportional(比例)、Integral(积分)、Differential(微分)三者的缩写。PID调节是连续控制系统中技术最成熟、应用最广泛的调节方式。PID调节实质是根据输入的偏差值,按照比例、积分、微分的函数关系进行运算,运算结果用以控制输出。PID有增量式PID和位置式PID两种,由于我们使用的是增量式霍尔编码器所以我们着重研究增量式PID。使用前面提到的增量PID的公式第二条:
△U0(n)=K_p {[ε(n)-ε(n-1)]+K_i ε(n) + K_d [ε(n)-2ε(n-1)+ ε(n-2)]}
(5-1)
U(k)= △u(k)+U(k-1) (5-2)
在进行代码实现的时候,PWMInc表示PWM的增量,Ek表示目标值与当前值的差,Ek1、Ek2保存上一步的Ek值,Kp、Ki、Kd分别是比例、积分、微分三个系数,计算表达式为PWMInc=KpEk-KiEk1+Kd*EK2。
再加上利用millis()函数的每5ms一次的时间中断。 
然后再每次主程序循环开始之前通过PWM = PWM + PWMInc来不断更新,以改变不同电机的转速。
PID参数的调整,PID三个参数的调整对电机的控制效果有很大的影响且三个参数会相互影响,根据前面章节提到的调参公式和模拟效果,确定最终参数位Kp=5,Ki=0.3.Kd=0.5 。
5.5 本章小结
本章主要对人工智能小车控制系统的软件部分进行了设计,绘制了控制流程图,然后编写了控制系统的主程序以及程序模块化的编写和电机算法程序、遥控器程序设计。

第六章 测试与优化
6.1 控制系统的测试与优化
从方案评估,到仿真试验,再到软硬件的设计,再经过材料加工、装配、调试、维护,完整的人工智能控制系统终于完成,小车实物图如下图6.1,遥控器实物图如下图6.2。接下来非常重要的一部分就是对该系统进行测试和优化。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图 6.1 小车实物
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图 6.2 遥控器实物
测试场地在西安电子科技大学E楼实验楼内如图6.3,场地由若干模块组成,每个模块长度和宽度均为 1200mm,场地按照标准道路尺寸的 1/10 设计。绿色和蓝色为触发区,红色为终点区,除了起点、终点和普通路面,还包含一段斑马线,每个模块使用哑光喷绘工艺制作,完美模拟常见道路。整个道路分为直行、十字路口转弯、斑马线停车等,分别进行多个自动驾驶功能的验证。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图 6.3 测试场地图
6.1.1 测试方案
在人工智能自动驾驶小车控制系统搭建完成之后,先进行控制系统的测试,由于时间紧张,选择测试两项小车最基本的运动模式,制定了两个对应的测试方案:
方案一,直线行驶测试。小车在无陀螺仪提供角度校准的情况下,连续前进两米。测量到达终点时小车的位置与小车出发位置的横向距离。根据距离和电机的转速来判断小车四个电机的情况。
方案二,转弯行驶测试。小车再直线行驶电机无过大误差时,将转动目标值设定为90度,通过陀螺仪配套资料中的上位机的拟合的曲线趋势来判断小车转动时的角速度是否均匀。
6.1.2 测试结果及分析
方案一:小车在直行两米后,横向偏差为向左偏差10cm。由于小车依靠四个轮子差速转弯,直行测试时发生偏转最可能的原因就是电机转速出现偏差。通过主控串口输出的各电机数据进行分析,截取了其中组数据展示,如表6.1:
表6.1 直线测试数据
序号 1 2 3 4 5 6 7 8 9 10
Motor0 4.97 13.77 20.35 33.87 38.11 38.45 38.33 39.14 41.44 39.58
Motor1 10.34 19.38 27.85 34.56 38.25 38.14 38.14 39.78 40.32 41.45
Motor2 7.35 16.33 24.76 33.28 38.44 38.11 38.04 38.89 39.12 42.53
Motor3 5.12 14.47 21.88 33.78 37.98 37.99 37.99 38.97 40.44 38.24

分析数据可以看出,在电机刚驱动的时候,电机转速差距较大,且转动速度按照快慢排序依次为Motor1 > Motor2 > Motor3 > Motor0,小车右侧的1、2号电机的转速略大于左侧的0、3号两个电机的转速;同时,随着时间的推移,四个电机的转速都稳定到程序中目标值40附近,但是波动略大。
方案二:小车稳定后进行转弯,转过90度,根据上位机的Z轴角度曲线可以看出(如图6.4),曲线随着时间非常平滑地从0度到达90度,可见小车在转动过程中的速度非常稳定,远远超过预期。在实际的自主移动过程中,角度不但有PID调节还有视觉识别车道线检测做辅助,所以实际效果会比测试结果更好,达到预期。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图 6.4 陀螺仪上位机波形

6.1.3 解决测试中的问题
经过分析,方案一在测试中出现了两个问题,而方案二则达到了预期,所以我们着重来解决方案一中出现的两个问题。
问题一,电机在刚启动时速度差距较大导致车身偏转。
经过一系列测试发现,由于小车的四个电机之间的较大的个体差异,用二分法进行不断测试,从电机编码器蜂鸣器响起到刚好能够启动电机的PWM值各不相同:Motor0为40、Motor1为25、Motor2为34、Motor3为27,所需PWM值的顺序为Motor1 < Motor2 < Motor3 < Motor0,完全符合试验测试的结果。
为了解决这一问题,在程序对电机进行初始化时,PWM的初始值不再设置为0,而是将PWM的初始值直接设定为一个与所有电机最小启动PWM差距最小,且不至于让车开始运动的值。经过反复进行二分法试验测试,这个PWM初始值最终设定为30。修正后带各电机的转速数据如下表6.2,完全满足自动驾驶控制的条件。
表6.2 直线修正数据
序号 1 2 3 4 5 6 7 8 9 10
Motor0 7.97 17.77 25.35 33.89 38.51 38.95 39.33 40.14 41.84 40.38
Motor1 9.34 19.45 27.85 34.36 37.35 37.34 39.88 41.78 40.38 41.54
Motor2 8.34 16.33 24.76 33.76 38.44 38.55 38.92 40.89 39.82 40.39
Motor3 8.12 17.47 24.88 33.28 38.98 39.05 39.58 40.97 40.74 40.88

问题二,各个电机在速度接近稳定之后,偏差依然较大。
经过各种原因的排除以及资料的查询,最终确定是由于所有的电机都公用一套PID参数,而这套参数由于电机个体化差异的原因,不能完美适配所有电机,所以部分电机转速出现轻微的超调,稳定时间长。
为了解决这一问题,借助Arduino IDE自带的输出图像化功能,逐一生成每个电机的输出图像,并且将程序中的PID设为一个数组,每组PID的值分别对应不同序号的电机,经过修改之后,仿真结果如下图6.5。
Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统,精选毕业设计完整源码+论文,人工智能,课程设计,自动驾驶

图6.5 电机转速仿真图

6.2 工业设计优化
前面介绍的自动驾驶小车控制系统虽然功能已经基本实现,但是如果对比市场中一些作为教育套件的自动驾驶小车系列产品来说还相差很远。我认为在设计方面需要做一些优化,我自己已经优化了一部分,剩下的也提出了优化的思路:
已经做出的优化部分效果显著,我举一些简单的例子:电池开关方便开断电源方便测试和使用、电源电压显示模块实时显示电池电压方便排除问题和及时充电、小车功能指示灯显示小车所处的各种状态和模式、主控安装位置将串口露出,方便与放在小车底盘上的处理器通信等等,还有遥控器,做了完整的亚克力外壳并且加上开关等重要部件同时合理安排所有部件的位置,已经非常方便使用。这些虽然都是一些小的优化,但对于功能实现和测试来说都极其重要。

对于一些其他必要的较为复杂的优化,我也列出了解决思路。对于需要空气来说,因为结构简单,已经优化非常完整,后期再做一些美化的工作就好了。对于小车来说,结构复杂,且作为自动驾驶的主体,需要进行大量优化。小车使用的成品模块比较多,例如电源稳压模块、电机驱动模块等等,不但需要接许多线造成了不便,同时占用了小车大量的空间,计划将所有的模块芯片、对应电路、指示灯以及主控芯片等等都集成到定制的PCB上,这样可以增强系统的完整性和可靠性。对于小车的机械结构,在底盘轮组部分适当加上悬挂增加小车在不平整路面的稳定性。设计小车兼具美观和实用的外壳和整体设计,使得整个小车系统更像是一个真正的产品。

6.3 本章小结
这一章,通过对小车基本功能进行测试,并对测试中出现的问题进行分析和解决,借助Arduino仿真工具和上位机等等,解决问题的手段和方法效率明显提升。同时对小车的工业设计等方面进行了完善和优化,为自动驾驶小车功能的实现提供了条件。

第七章 结论与展望
7.1 结论
本文旨在通过自己完成自动驾驶小车系统的控制,再结合自动驾驶程序实现自动驾驶的功能,进而了解自动驾驶了解人工智能这一项先进技术的开发流程。获得的主要结论如下:
(1) 确定了自动驾驶小车的总体设计方案,并进行动力分析,最终确定系统的控制目标并对系统相关方案进行设计。
(2) 完成了针对系统的控制目标进行模型的仿真设计,使用Matlab进行了控制过程仿真建模,使用Solid Works完成了外形和各模块布局的仿真。
(3) 进行了对系统的硬件部分进行搭建,确定主控芯片、驱动电机、驱动模块、传感器等的选型,对系统电路部分进行设计。
(4) 完成了对系统软件部分进行设计,对主要控制进行分析、设计控制的流程图、完成系统的程序设计和编写。
(5) 搭建完成的控制系统进行测试并对问题进行解决,同时进行优化。

但自动驾驶功能的实现部分略有遗憾,没有能进行完整的自动驾驶验证,在结束论文的写做之后,我会继续加油,把人工智能自动驾驶的算法部分也做好,争取搭建出一辆结构和功能都非常完整的人工智能自动驾驶小车。
7.2 展望
从1885年,卡尔本茨研究的第一辆汽车在德国诞生、到二战结束后,工业技术发展带动汽车大力发展、到20世纪七十年代后,电子信息技术飞速发展让汽车技术更加完善、到十多年前新能源汽车的提出和实施、再到近几年人工智能辅助自动驾驶技术和一批新势力车企的出现,整个汽车历史的发展史就是工业技术发展的一个缩影。通过人工智能自动驾驶小车控制系统的设计,我全面了解了整个人工智能的开发流程以及在流程中各个部分的重要作用。

致谢
省略

参考文献
[1] 方敏,张立新,于星胜.浅谈智能网联汽车的发展[J].内燃机与配件,2020.
[2] 佚名.5G商用或为无人驾驶提速[N].信息时报,2019-06-20.
[3] 中国科学技术协会,中国自动化学会.控制科学与工程学科发展报告 2007-2008[M].中国科学技术出版社:北京,2008:1.
[4] 王瑞丰. 水田大跨度埂上行走装置控制系统设计[D].沈阳农业大学,2020.
[5] 何芝强. PID控制器参数整定方法及其应用研究[D].浙江大学,2005.
[6] 范立南,李雪飞.计算机控制技术[M].机械工业出版社:北京,2009:1.
[7] 王小建,胡长胜,陈宁,等.单片机设计与应用[M].清华大学出版社:北京,2011:83.
[8] 李鑫,王晟全.通过实现Arduino的基础功能阐明其优势[J].工业控制计算机,2019,32(01):100-101.[3]徐嘉璐.自动跟随购物筐[J].科学技术创新,2019.
[9] 徐嘉璐.自动跟随购物筐[J].科学技术创新,2019,1:1.
[10]王青,戴剑锋,李维学.物理原理与工程技术[M].国防工业出版社:北京,2008:22.
[11]朱鹏.ARDUINIO开发板与ANDROID手机蓝牙通信的设计与实现[J].电脑知识与技术,2016.


5、资源下载

本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。文章来源地址https://www.toymoban.com/news/detail-738613.html

序号 毕业设计全套资源(点击下载)
本项目源码 基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(源码+文档)_Arduino_自动驾驶小车控制系统.zip

到了这里,关于Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包