赞
踩
简 介: 全国大学生智能汽车竞赛以“立足培养、重在参与、鼓励探索、追求卓越”为宗旨。本文介绍的AI视觉智能车结合了图像处理、神经网络、PID控制、机械设计等技术,实现了省赛国赛的比赛要求,具有很好的稳定性和扩展性。本系统以i.MX RT1064为主控芯片,配合总钻风摄像头识别赛道元素,完成循迹功能;另一方面在Open ART mini运行神经网络模型,完成动物、水果和数字的识别,调用Open MV提供的API识别AprilTag二维码。两个MCU使用串口通信传送指令码,实现自主的停车、识别等等功能。在调试过程中,我们使用了IPS屏、匿名上位机以及自己编写的图传界面,提高智能车的调试效率,为调参和修改代码提供方向。经过大量调试,我们逐步提高整体系统的鲁棒性和小车运行的速度,验证并优化该方案。
关键词
: 智能车,神经网络,PID,单片机
随着科学技术的发展,智能控制、神经网络应用越来越广泛,机械、电子等传统行业向纵深发展,掌握好这些学科的基础知识在大学生培养的过程更加重要。智能车需要综合众多学科技术,是目前的研究热点,并且已经在逐步实现产品化。
全国大学生智能车竞赛从2006开始举办,旨在加强学生实践、创新能力和培养团队精神,至今已经成功举办了十五届。竞赛以“立足培养、重在参与、鼓励探索、追求卓越”为指导思想,竞赛内容设置需要能够面向大学本科阶段的学生和教学内容,同时又能够兼顾 当今时代科技发展的新趋势。竞赛规则透明,评价客观标准,坚持公开、公平、公正的原则,从而保持了竞赛的健康、普及、持续的发展。
在十六届竞赛中,共有八个组别:基础四轮组、全向行进组、双车接力组、节能信标组、电磁越野组、单车拉力组、智能视觉组、专科基础组。智能视觉组需要完成普通的四轮组的赛道任务,同时需要训练AI模型识别动物水果、数字,具有较大挑战,因此我们选择该组别作为我们的比赛组别,本论文主要介绍智能视觉组智能车的制作。
在备战智能车竞赛的过程中,我们多方搜索资料。根据竞赛规则相关规定,智能车系统采用大赛组委会统一提供的C型车模。同时我们采用恩智浦半导体公司的i.MX RT1064作为主控芯片,并搭载基于RT1064开发的Open ART mini模块,自主构思控制方案进行系统设计,包括传感器信号采集处理、电机驱动、转向舵机控制以及控制算法软件开发等,完成智能车工程制作及调试,为了提高制作智能车的效率,我们还使用先有的并自行开发了一些上位机软件,与智能车的主控进行通信,帮助我们更好地完成调试。
基于光电摄像头的赛道识别使用了非常多经典的图像处理手段,识别赛道元素的首先基于人对赛道特征的理解和把握,随后再转化为代码,并进行大量的优化,才能实现稳定的识别,这样的方案能够较大程度提高稳定性和可重复性。硬件机械设计时,针对小车结构特点,我们设计并3D打印云台以及支撑板,搭载Open ART mini实现两自由度的运动,同时,对于其他一些车身结构,我们也做了优化。电路设计方面,我们绘制三块PCB,用于主板电机、舵机、ART的供电,与自行设计的支撑板完全配合,达到了较好的设计效果。
该车在准备国赛测试过程中可以稳定运行,识别也有较好的效果,程序的鲁棒性较强,并且易于修改和扩展。本次报告将详细介绍整个车的设计过程和设计思路,以及硬件电路和车模机械的设计方案,最后介绍软件控制系统建立的方式方法。
规则确定智能视觉组选用C 型车模,该车模容易产生直线走偏、转弯费力、轮胎磨损快等情况,这大多与轮胎安装角度有关,此处涉及到一个非常重要的转向轮位置角度定位问题,叫做“前轮定位”。主要功能为保障智能车直线运行时的稳定性,同时可以使得转向更加轻便并减少轮胎的磨损。前轮是转向轮,它的安装位置由主销内倾、主销后倾、前轮外倾和前轮前束等四个参数决定,具体反映了转向轮、主销和前轴等三者在车架上的位置关系。因此我们对这几个参数进行了调整。
转向轮(前轮)围绕主销进行旋转,前轴的轴荷通过主销传给转向轮,具备这两个特点的机械结构称为主销。
从车前后方向看轮胎时,主销轴向车身内侧倾斜,该角度称为主销内倾角。主销内倾角有使轮胎自动回正的作用,当小车转向轮在外力作用下发生偏转时,由于主销内倾,则车轮连同整个小车的前部将被抬起一定高度,在外力消失后,车轮就会在重力作用下力图恢复到原来的中间位置。
主销内倾角还使得主销轴线与路面交点到车轮中心平面与地面交线的距离减小,从而减小转向时舵机上的力,使转向更加轻便,同时也可减少从转向轮传到舵机上的冲击力。
主销向后倾斜,主销轴线与地面垂直线在赛车纵向平面内的夹 角称为主销后倾。主销向后倾斜,主销轴线与地面垂直线在赛车纵向平面内的夹角称为主销后倾。如图所示:
▲ 图1-1
前轮外倾角:前轮外倾是指前轮安装后,其上端向外倾斜,于是前轮的旋转平面与纵向垂直平面间形成一个夹角,称之为前轮外倾角,其主要作用是使转向轻便,使车轮紧靠轮毂内轴承,以减少外轴承及轮毂螺母的负荷,有利于安全行驶。一般前轮外倾角为1°左右,但对于有高速、急转向要求的车辆,前轮外倾角可减小甚至为负值。鉴于速度要求,我们没有对其进行调整。
通过车轮中心的汽车横向平面与车轮平面的交线与地面垂线之间的夹角,称为前轮外倾角。前轮外倾角是前轮的上端向外倾斜的角度,如果前面两个轮子呈现“V”字形则称正倾角,呈现“八”字称为负倾角。前轮外倾可以抵消由于车的重力使车轮向内倾斜的趋势,减少赛车机件的磨损与负重。前轮前束是前轮前端向内倾斜的程度,当两轮的前端距离小后端距离大时为内八字,前端距离大后端距离小为外八字。由于前轮外倾使轮子滚动时类似与圆锥滚动,从而导致两侧车轮向外滚开。但由于拉杆的作用使车轮不可能向外滚开,车轮会出现边滚变向内划的现象,从而增加了轮胎的形变,同时由于C车模的轮胎是空心材质,可以与地面进行有效的贴合,同时由于S3010舵机的响应速度较快,使用内八字有助于车模在直道行进的过程中更加贴合中线。
为了搭载Open ART以及舵机驱动板,合理分配小车的空间和重心,我们采用类比法,为C车模量身设计了一些承载结构,包括下底座、上底座、支撑架及摇臂。这些结构组合起来可以实现容纳电池,云台二自由度转动,稳固摄像头等功能。在车中心偏前方的云台和电池,平衡了车后方的两个电机,使得小车的重心移向几何中心。
我们使用3D打印将自己设计建模变为成品,部分机构建模图及整体实物图如下:
▲ 图1-2
摄像头是小车完成赛道识别任务的基础,我们使用逐飞的总钻风灰度摄像头,镜头张角为130°,畸变相对较小,并且易于矫正。对于整个车来说,摄像头的安装影响到整个车采集信息的准确性,同时,摄像头的位姿与图像处理的算法需要进行配合,才能保证识别的稳定性。因此在摄像头安装过程中,我们在简洁,保证强度的基础上,严格控制摄像头的安装位置和增量。
为使智能车能够平稳地沿着赛道运行,需要对车速进行精确控制,使赛车在急转弯时速度不至过快而冲出赛道。理论上,通过控制驱动电机上的平均电压即可控制智能车速度,但是如果开环控制电机转速,会受很多因素影响,例如电池电压、电机传动摩擦力、道路摩擦力和前轮转向角度等。这些因素会造成赛车运行不稳定,所以需要检测出智能车当前速度。通过速度检测,对车模速度进行闭环反馈控制,即可消除上述各种因素的影响,使得车模运行得更稳定。
我们使用逐飞的旋转式mini编码器,两个电机各加编码器并调节合适的啮合度,安装时应注意调整好齿轮间隙,使之啮合程度适中,便于传动。齿轮传动机构对车模的驱动能力有很大的影响。齿轮传动部分安装位置的不恰当,会大大增加电机驱动轮子的负载。调整 的原则是:齿轮间的配合间隙要合适,过松容易打坏齿轮,过紧又会增加传动阻力,浪费动力;传动部分要轻松、顺畅,不能有迟滞或周期性振动的现象。判断齿轮传动是否良好的依据是,听一下电机带动轮子空转时的声音。声音刺耳响亮,说明齿轮间的配合间隙过大,传动中有撞齿现象;声音闷而且有迟滞,则说明齿轮间的配合间隙过小,电机负载变大。调整好的齿轮传动噪音很小,并且不会有碰撞类的杂音,轮子减速齿轮机构就基本上调整好了,动力传递十分流畅。
鉴于赛道的摩擦力和复杂性以及车模的机械结构和强度,我们提出在尽可能不伤害赛道并且确保过掉障碍的情况下最大限度降低整车重心,因为车子重心高低和位置对车子行驶、转弯有很大影响。因此我们设计整体布局时尽可能平衡车模前后质量,降低重心,合理使用配重块。最终测得车模水平方向的重心位于车辆中部,提高了运行过程中的稳定性。
为了提高电路板的模块化水平,减小修改成本,提高稳定性,我们将硬件电路分为三部分:主板、舵机驱动板、ART供电板。其中主板给主控RT1064供电,获取各个传感器(如摄像头、编码器、ICM陀螺仪等等)的信息,包含H桥电路驱动电机,同时驱动转向舵机;舵机驱动板负责驱动二自由度云台的舵机;ART供电板负责给Open ART和激光模块供电。其中主板和ART供电板上留出了通信接口,可用于两个MCU的通信。
主板的功能是给主控RT1064供电、获取传感器信息、输出驱动,其电路模块也可以从这几个方面介绍。
首先是电源模块,电池电压在7.4V左右,我们增加一些旁路电容,同时通过电阻分压将其幅值限制在3.3V以内,通过RT1064管脚的ADC来监控电压,也就能监控电池电量。
给各类期间供电所需的电压不同,如MOS管需要12V电压加快其开启速度,而单片机最高只支持5V供电,舵机电压为6.5V,因此我们对电源采取了先升压后降压的处理方式,电路原理图如下:
主板连接了摄像头、编码器、ICM姿态传感器等传感器,其供电和信号传输参考了逐飞的例程,相对比较简单。同时主板还有显示模块IPS屏,配合波轮和旋钮可以刷新显示、调整参数,提高了调车效率。IPS屏幕电路原理图如下:
主板上还有电机驱动模块,通过H桥电路输出PWM,控制两个电机正反运动。我们选用半桥驱动芯片IR2104S和N通道增强型MOSFET芯片SE3082G构成全桥电路,单个电机的H桥原理图如下:
为了贴合C车模的外形,我们将主板PCB设计成贴合车模底盘的形状,一方面更加美观,另一方面也方便定位安装,最终成果如下图:
OpenART需要一到两个舵机作云台。我们用三个tps5430电路得到5V和6V分别给OpenART和两个舵机供电,留出足够的信号接口。另外,使用软件“临摹贴”和AD的“圆弧(任意角度)”功能,使得电路板和舵机安装版完全贴合,美观且便于安装。
ART供电板负责给Open ART mini供电,传递PWM信号驱动云台舵机,同时驱动激光进行打靶。因此该电路板只有激光驱动电路,由一个三极管和几个电阻构成,原理图如下,其余引脚只需按照使用情况留出接口即可。
软件架构部分分为两章,因为智能视觉组需要在完成四轮的基础上实现AI识别,因此使用RT1064获取总钻风的图像,利用传统图像处理中的特征提取实现赛道元素的识别;而在AI视觉部分则需借助神经网络,同时与主控RT1064通信完成任务,将在下一章详细介绍。
图像处理的主程序集合了众多传感与输出部分,其中最重要的信息来源是摄像头,图片数据通过CSI中断传入RT1064,使用大津法进行二值化后,识别赛道边沿并判断是否存在特殊的赛道元素。不同的元素对应不同的处理策略,通过轨迹计算确定舵机打角和电机速度值。
赛道元素有圆环、十字路口、三岔路和坡道,其中三岔路还需要两次进入不同的支路,这要求对岔路入口进行准确的识别和选择。我们的图像处理算法首先提取了赛道的边沿,通过对左右边沿的判断以及特征点的判断,就可以知道是否有赛道元素以及位置。
前方遇到圆环时,小车会判断入环点,当该点在图像上的坐标值低于设定值时,小车就会进入入环程序,进入圆环后会按照普通路径行驶,并开始判断是否能够出环,接近出环会看到路径前方有一条直线,即可判断应当出环,这样保证不会绕着圆环“打转”。
三岔路的识别是依靠岔路处的两个分叉角,前方的分叉角与普通的直线赛道差别较大,通过边沿的信息可以直接判断出来。由于分叉角是120°,是全对称的,因此第二次识别到三岔路就是出三岔路。
车辆行驶十字的过程分为初入十字,处于十字中心处,出十字等多过程。十字元素类型分为中间十字,斜入十字等多类型。十字的处理:识别十字(屏蔽三岔路)判断十字类型判断十字过程。
速度选用闭环控制方式。通过闭环反馈使系统的精确度提高,响应时间缩短,控制稳定性高。而开环控制没有反馈环节,稳定性、精确度不高。为了达到好的速度控制效果,速度控制要选用闭环控制方式。
在模拟控制系统中,数字PID控制器是最普遍的控制方法。系统由控制器和被控对象组成。PID控制主要有三部分组成:比例、积分、微分。比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。偏差一旦产生,调节器立即产生控制作用使被控量朝着减小偏差的方向变化,控制作用的强弱取决于KP。当仅有比例控制时系统输出存在稳态误差。为了消除稳态误差,引入积分控制。积分项对误差取决于时间的积分,随着时间的增加,积分项增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。为了预测误差变化的趋势,引入微分的控制器,这样就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。
舵机需要在转向时需要准确且快速的形成反应,实现小车的循迹行驶,因此使用PD控制,比例控制可以快速反应,微分控制可以预先控制,通过这两类控制可以减小突变,提高控制的稳定性和快速性。
电机的速度控制使用PID控制算法。调节PID参数时,给定一个PWM值,使用上位机监控编码器读取到的速度,从而确定响应速度、超调量和稳态误差,匿名上位机输出波形,据此调整比例、积分、微分三个参数。响应速度慢则增大比例值,超调量过大则提高微分量,实现预先调节,存在稳态误差则增大积分量。
AI视觉需要使用深度学习支撑,我们进行了许多尝试,包括使用caffe进行深度学习模型训练,并在Open MV RT上加载运行。但是该MCU搭载模型的能力较弱,堆栈容易溢出。因此我们最终选择逐飞开发的Open ART mini加载TensorFlow(Keras)平台训练的模型进行识别任务。
神经网络识别的效果和模型的体量取决于神经网络模型,当前深度学习技术发展已经取得了大量成果,并且网络模型也在向轻量化发展,更多的嵌入式设备也能运行神经网络进行识别,智能车比赛引入AI视觉也是基于这样的考虑。
我们在前期学习了大量的神经网络基础知识和网络模型,如LeNet、VGG19、CNN、Yolo等等,这些模型经历了诸多演变和发展,结构的灵活性较强,我们可以根据自己的需要进行调整。
卷积神经网络(CNN)模型由卷积、池化、全连接等。由于卷积运算可以极大地降低数据维度,例如一张高清无码的彩图,其像素非常多,可能一张图像就高达三百万个像素,如果直接进行回归或拟合,计算量非常巨大,并且泛化能力很弱。而卷积会对这些信息做一些简化和模糊处理,通过将图像与卷积核进行卷积运算,得到的输出会比输入小。比如 66的图片与33的滤波器卷积会得到4*4的输出,即把输入削减,从而减少参数数量、降低网络的计算量,同时也有助于防止过拟合,提高网络的鲁棒性。
全连接神经网络主要由前向传播与反向传播构成,其原理如下,是将二维的图像信息转化为向量,从而可以输出。
由于疫情原因,规则发生了变化,需要不间断地识别动物、水果、数字、二维码四种元素,我们认为对每个类型训练单独的模型将会影响识别速度,另外找到紫色边框后对框内图片进行识别的方案在速度和稳定性方面都有许多不足。于是我们将动物水果和数字图片一起作为训练集,训练了一个21分类模型。
数据集方面,我们为逐飞的官方数据集添加紫色边框,将带有边框的图片随机地添加到网络获取的开源数据集的图片中,并通过对图片做HSV增强、添加高斯模糊、加入随机噪点等方式构建了体量足够大的数据集(80000到120000张图片)。采用这样的数据集进行训练是为了使模型可以不用识别紫色边框直接运行,且面对不同的背景仍能正确识别。训练数据一共分为21类,包括10类数字和10类动物水果和负样本(无添加图片和添加了二维码的图片)。
经过多种尝试,我们最终采用了如下图所示的模型结构。
总共有22层卷积,在主要卷积层之下添加最大池化层(MaxPooling)和SpatialDropout层减小网络的参数量。中间穿插注意力转移模块(采用1*1卷积核对输入进行卷积,将结果与原输入层相乘后输出),以消除目标图片位置对识别的影响。另外,为了在不使体积增大太多同时避免梯度爆炸的情况下尽量加深模型深度,我们在模型中共加入了六个残差模块。最终得到的模型在精度、体积等方面都达到了预期的要求。
由于Open ART无法直接加载h5类型的模型,因此需要对模型进行量化。我们选择将模型量化为TFlite格式。首先将模型转化为TFlite格式,然后读取模型的权重,结合少量的训练集数据将模型进行量化,由float32转为int8格式,最终模型的体积能够缩小至原来的1/10左右。
最终在Open ART上进行识别实验,两分钟内随机播放数据集中的图片,能够做到识别结果全部正确。
省赛要求识别出不同的图片针对图片做出动作。我们采取的方案是不断运行训练好的模型对相机获取的图片进行识别,并返回结果;当结果为负类别时运行Open ART官方的二维码识别程序识别二维码,同样返回相应的结果。根据识别结果,通过串口向主控发送特定的标志位,并退出识别模式。当主控控制小车完成相应动作后,由主控发送标志位,Open ART在接收到标志位后重新开始识别。
另外,为了确保不会对同一张图片重复动作,在识别中加入了条件判断,当本次识别结果与上次一致时则不向主控发送标志位。
为了提高调试效率,能够在上位机实时获取速度、加速度、识别结果等信息,我们使用“匿名上位机”软件,自定义通信协议,将数据传输到上位机进行显示,如下图是显示在转弯过程中两个后轮的速度值。
调试过程中,尤其在识别赛道元素时,通过修改程序而后观察现象的方式难以看出问题,少数的标志位数量不足以支撑问题的分析。IAR提供了单片机的在线调试功能,通过单步Debug并观察变量的值,减小了程序运行的粒度,能够观察到单片机内部的变量和程序运行情况,这能够确保程序逻辑的正确性和完备性。
项目 参数
大学生智能汽车比赛在大学生各类学科竞赛中算的上是战线拉的非常长的了,经过大半年的准备,在调车中也发现了不少问题和困难,然后再一步一步解决改进,尝试过不同方案,比赛中看见其他优秀的方案,看见别人的优点和自己的不足,进行改正调整解决各种问题。
一个队伍中的三个人各自分工不同,但不代表我们不需要关注了解其他人的工作,软件和硬件是一个相互依存的关系,硬件是软件赖以工作的物质基础,软件的正常工作是硬件发挥作用的唯一途径,所以程序员了解硬件则能更好的发现程序上问题和对硬件的需求有哪些,帮助硬件负责人更好的工作。例如摄像头的算法离不开对摄像头内参外参的标定,良好的硬件电路可以简化许多软件算法等等。
智能车比赛结束了,无论成绩如何,通过这次比赛我们遇到了许多困难,但我们仍需不忘初心,砥砺前行。
● 相关图表链接:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。