学 校:武汉理工大学
队伍名称:WHY     
参赛队员:何镇豪   
殷芳锐   
汪正华   
      
带队教师:邹斌,夏婉扬

 

第一章


  国大学生智能车竞赛受教育部高等教育司委托,由教育部高等自动化专业教学指导分委员会(以下简称自动化分教指委)主办全国大学生智能汽车竞赛。该竞赛以智能汽车为研究对象的创意性科技竞赛,是面向全国大学生的一种具有探索性工程实践活动,是教育部倡导的大学生科技竞赛之一,为加强大学生实践、创新能力和团队精神的培养,促进高等教育教学改革。该竞赛以“立足培养,重在参与,鼓励探索,追求卓越”为指导思想,旨在促进高等学校素质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神,为优秀人才的脱颖而出创造条件。该竞赛由竞赛秘书处为各参赛队提供/购置规定范围内的标准硬软件技术平台,竞赛过程包括理论设计、实际制作、整车调试、现场比赛等环节,要求学生组成团队,协同工作,初步体会一个工程性的研究开发项目从设计到实现的全过程。该竞赛融科学性、趣味性和观赏性为一体,是以迅猛发展、前景广阔的汽车电子为背景,涵盖自动控制、模式识别、传感技术、电子、电气、计算机、机械与汽车等多学科专业的创意性比赛。该竞赛规则透明,评价标准客观,坚持公开、公平、公正的原则,保证竞赛向健康、普及、持续的方向发展。

  在这份报告中,我们小组通过对小车设计制作整体思路、电路、算法、调试、车辆参数的介绍,详尽地阐述了我们的思想和创意,具体表现在电路的创新设计,以及算法方面的独特想法,而对单片机具体参数的调试也让我们付出了艰辛的劳动。这份报告凝聚着我们的心血和智慧,是我们共同努力后的成果。
 

第二章 体方案设计


  章主要简要地介绍智能车系统总体设计思路,在后面的章节中将整个系统分为机械结构、控制模块、控制算法等三部分对智能车控制系统进行深入的介绍分析。

■ 2.1系统总体方案的设计

  根据十六届智能车竞赛规则相关规定,智能视觉组可采用竞赛指定的C车模,允许使用各类电磁、红外光电、摄像头、激光、超声传感器器件进行赛道和环境检测,车模微控制器使用NXP系列 RT1064单片机,在IAR开发环境中进行软件开发。赛道图像经总钻风摄像头采集后, 输入到控制核心,并经过相应图像算法处理,用于赛车的运动控制决策。通过编码器测速模块来检测车速,并采用RT1064 的输入捕捉功能进行脉冲计数计算速度;电机转速控制采用增量式PID 控制,通过 PWM 控制驱动电路调整电机的转速,完成智能车速度的闭环控制。

  在车模前部,安装有OpenART mini摄像头,用于数字标靶、AprilTag、水果和动物,并返回相应的信号,控制车模做出相应动作。在OpenART mini摄像头上方有激光模块,用于激光打靶。

■ 2.2系统总体方案设计图

▲ 图1.1系统总体方框图

▲ 图1.1系统总体方框图

  根据以上系统方案设计,赛车共包括六大模块:K66主控模块、传感器模块、电源模块、电机驱动模块、速度检测模块、辅助调试模块。各模块的作用如下:

  1.RT1064主控模块:作为整个智能车的控制核心,将采集摄像头、编码器等传感器的信号,根据控制算法做出控制决策,驱动直流电机和两个舵机完成对智能车的控制。
  2.传感器模块:主要是两个摄像头模块,一个总钻风摄像头有,用于识别前方赛道,是智能车的“眼睛”,可以通过一定的前瞻性,提前感知前方的赛道信
  息,为智能车做出决策提供必要的依据和充足的反应时间。另一个是OpenART mini摄像头,完成三岔路选择,停车、打靶等任务。
  3.电源模块:两节18650电池串联,并有电池保护板,为整个系统提供合适而又稳定的电源。
  4.电机驱动模块:驱动直流电机和伺服电机完成智能车的加减速控制和转向控制。
  5.速度检测模块:检测反馈智能车后轮的转速,用于速度的闭环控制。

 

第三章 能车机械结构设计与优化


  能车中的控制都是在一定的机械结构基础上实现的,因此在设计整个软件架构和算法之前一定要对整个车模的机械结构有一个感性的认识,然后建立相应的数学模型。从而再针对具体的设计方案来调整赛车的机械结构,并在实际的调试过程中不断的改进和提高。本章将主要介绍智能车车模的机械结构和调整方案。

3.1模型车整车设计

  此次比赛选用的赛车车模采用C型车模。赛车机械结构只使用竞赛提供车模的底盘部分及转向和驱动部分。控制采用前轮转向,后轮驱动方案。

▲ 图2.1 模型车器件布局图

▲ 图2.1 模型车器件布局图

3.2智能车前轮定位的调整

  现代汽车在正常行驶过程中,为了使汽车直线行驶稳定,转向轻便,转向后能自动回正,减少轮胎和转向系零件的磨损等,在转向轮、转向节和前轴之间须形成一定的相对安装位置,叫车轮定位,其主要的参数有:主销后倾、主销内倾、车轮外倾和前束。智能车竞赛模型车的四项参数都可以调整,但是由于模型车加工和制造精度的问题,在通用的规律中还存在着一些偶然性。

3.2.1主销后倾角

  所谓主销后倾,是将主销(即转向轴线)的上端略向后倾斜。从汽车的侧面看去,主销轴线与通过前轮中心的垂线之间形成一个夹角,即主销后倾角。主销后倾的作用是增加汽车直线行驶时的稳定性和在转向后使前轮自动回正。由于主销后倾,主销(即转向轴线)与地面的交点位于车轮接地点的前面。这时,车轮所受到的阻力的作用点总是在主销轴线之后,相当于主销拖着车轮前进。这样,就能保持行驶方向的稳定性。当车转弯时,由于车轮所受阻力作用线,不通过主销轴线,这样,车轮所受阻力在主销方向有力矩作用产生,迫使车轮自动偏转直到到车轮所受阻力作用线通过主销轴线,此时,车轮已回正,这就是转向车轮的自动回正功能。

  主销后倾角越大,方向稳定性越好,自动回正作用也越强[1],但转向越沉重。汽车主销后倾角一般不超过3°,由前悬架在车架上的安装位置来保证。现代轿车由于采用低压宽幅子午线轮胎,高速行驶时轮胎的变形加大,接地点后移,因此主销后倾角可以减小,甚至为负值(变成主销前倾),以避免由于回正力矩过大而造成前轮摆振。
  模型车通过增减黄色垫片的数量来改变主销后倾角的,由于竞赛所用的转向舵机力矩不大,过大的主销后倾角会使转向变得沉重,转弯反应迟滞,所以设置为0°,以便增加其转向的灵活性。

3.2.2主销内倾角

  所谓主销内倾,是将主销(即转向轴线)的上端向内倾斜。从汽车的前面看去,主销轴线与通过前轮中心的垂线之间形成一个夹角,即主销内倾角。主销内倾的作用是使车轮转向后能及时自动回正和转向轻便。对于模型车,通过调
  整前桥的螺杆的长度可以改变主销内倾角的大小,由于过大的内倾角也会增大转向阻力,增加轮胎磨损,所以在调整时可以近似调整为0°-3°左右,不宜太大。

  主销内倾和主销后倾都有使汽车转向自动回正,保持直线行驶的功能。不同之处是主销内倾的回正与车速无关,主销后倾的回正与车速有关,因此高速时主销后倾的回正作用大,低速时主销内倾的回正作用大。

3.2.3车轮外倾角

  轮外倾角是指通过车轮中心的汽车横向平面与车轮平面的交线与地面垂线之间的夹角,对汽车的转向性能有直接影响,它的作用是提高前轮的转向安全性和转向操纵的轻便性。在汽车的横向平面内,轮胎呈“八”字型时称为“负外倾”,而呈现“V”字形张开时称为正外倾。如果车轮垂直地面一旦满载就易产生变形,可能引起车轮上部向内倾侧,导致车轮联接件损坏。所以事先将车轮校偏一个正外倾角度,一般这个角度约在1°左右,以减少承载轴承负荷,增加零件使用寿命,提高汽车的安全性能。

  模型车提供了专门的外倾角调整配件,近似调节其外倾角。由于竞赛中模型主要用于竞速,所以要求尽量减轻重量,其底盘和前桥上承受的载荷不大,所以外倾角调整为0°即可,并且要与前轮前束匹配。

3.2.4 前轮前束

  所谓前束是指两轮之间的后距离数值与前距离数值之差,也指前轮中心线与纵向中心线的夹角。前轮前束的作用是保证汽车的行驶性能,减少轮胎的磨损。前轮在滚动时,其惯性力自然将轮胎向内偏斜,如果前束适当,轮胎滚动时的偏斜方向就会抵消,轮胎内外侧磨损的现象会减少。像内八字那样前端小后端大的称为“前束”,反之则称为“后束”或“负前束”。在实际的汽车中,一般前束为0-2mm。

  在模型车中,前轮前束是通过调整伺服电机带动的左右横拉杆实现的。主销在垂直方向的位置确定后,改变左右横拉杆的长度即可以改变前轮前束的大小。在实际的调整过程中,我们发现较小的前束,约束0-2mm可以减小转向阻力,使模型车转向更为轻便,但实际效果不是十分明显。

  虽然模型车的主销后倾角、主销内倾角、车轮外倾角和前束等均可以调整,但是由于车模加工和制造精度的问题,在通用的规律中还存在着不少的偶然性,一切是实际调整的效果为准。

3.3智能车转向机构调整优化

  理想的转向模型,是指在轮胎不打滑时,忽略左右两侧轮胎由于受力不均产生的变形,忽略轮胎受重力影响下的变形时车辆的的转向建模。在这种理想的模型下,车体的转向半径可以计算得到。

▲ 图2.2 智能车转向示意图

▲ 图2.2 智能车转向示意图

  如图2.2,假设智能车系统为理想的转向模型,且其重心位于其几何中心。车轮满足转向原理,左右轮的轴线与后轮轴线这三条直线必然交于一点。

  转向机构在车辆运行过程中有着非常重要的作用。合适的前桥和转向机构可以保证在车辆直线行驶过程中不会跑偏,能保证车辆行驶的方向稳定性;而在车辆转向时,合适的转向机构可以使车辆自行回到直线行驶状态,具有好的回正性。正是由于这些原因,转向系统优化设计成为智能车设计中机械结构部分的重点,直接关系到赛车能否顺利地完成比赛。在实际操作中,我们通过理论计算的方案进行优化,然后做出实际结构以验证理论数据,并在实际调试过程中不断改进。

  在模型车制做过程中,赛车的转向是通过舵机带动左右横拉杆来实现的。转向舵机的转动速度和功率是一定,要想加快转向机构响应的速度,唯一的办法就是优化舵机的安装位置和其力矩延长杆的长度。由于功率是速度与力矩乘积的函数,过分追求速度,必然要损失力矩,力矩太小也会造成转向迟钝,因此设计时就要综合考虑转向机构响应速度与舵机力矩之间的关系,通过优化得到一个最佳的转向效果。经过最后的实际的参数设计计算,最后得出一套可以稳定、高效工作的参数及机构。

  如图2.3,我们最终设计的这套转向拉杆,我们综合考虑了速度与扭矩间的关系,并根据模型车底盘的具体结构,简化了安装方式,实现了预期目标。

▲ 图2.3 转向拉杆图

▲ 图2.3 转向拉杆图

3.4智能车后轮减速齿轮机构调整

  模型车后轮采用RS380电机驱动,电机轴与后轮轴之间的传动比为 4.25。齿轮传动机构对车模的驱动能力有很大的影响。齿轮传动部分安装位置的不恰当,会大大增加电机驱动后轮的负载,会严重影响最终成绩。调整的原则是:两传动齿轮轴保持平行, 齿轮间的配合间隙要合适,过松容易打坏齿轮,过紧又会增加传动阻力,浪费动力;传动部分要轻松、顺畅,不能有迟滞或周期性振动的现象。判断齿轮传动是否良好的依据是,听一下电机带动后轮空转时的声音。声音刺耳响亮,说明齿轮间的配合间隙过大,传动中有撞齿现象;声音闷而且有迟滞,则说明齿轮间的配合间隙过小,或者两齿轮轴不平行,电机负载变大。调整好的齿轮传动噪音很小,并且不会有碰撞类的杂音,后轮减速齿轮机构就基本上调整好了,动力传递十分流畅。

3.5轮胎的保养与使用

  本届比赛C车模采用橡胶的有胎纹的橡胶,在使用的过程中主要暴露出的问题有:高速行驶时轮胎抓地力不足;轮胎材料强度不足,长期使用容易磨损。规则中不允许对轮胎进行任何改变轮胎性能的处理,因此在调试过程中,我们
  尽量选择对称、圆的轮胎;尽可能改变前轮倾角,使轮胎与地面的接触面积在各个工况下综合最大;在不调试的时间里尽量避免四轮与地面接触,保证轮胎的形状不发生改变。

  同时,赛车在高速下每跑完一圈,轮胎与轮毂之间通常会产生几个厘米的相对位移,严重影响了赛车的加速过程。为了解决这个问题,我们在实际调试过程中对车轮进行了粘胎处理,可以有效地防止由于轮胎与轮辋错位而引起的驱动力损失的情况。

 

第四章 路设计


4.1主控板和驱动板的硬件设计

  从最初进行硬件电路设计时我们就既定了系统的设计目标:可靠、高效、简洁,在整个系统设计过程中严格按照规范进行。

  可靠性是系统设计的第一要求。我们对电路设计的所有环节严格考虑了过流、散热、信号传输能力,做好各部分的接地、屏蔽、滤波等工作,将高速数字电路与模拟电路分开,使本系统工作的可靠性达到了设计要求。

  高效与实用性是指本系统的各模块能充分完美的实现相应的功能。新C车模采用双电机驱动,我们设计了单独的驱动芯片组成驱动器,瞬间驱动电流最大可以达到几十安培。

  简洁是指在满足了可靠、高效的要求后,为了尽量减轻车模的负载,降低模型车的重心位置,应使电路设计尽量简洁,尽量减少元器件使用数量,缩小电路板面积,使电路部分重量轻,易于安装,在设计完原理图后,注重PCB板的布局,优化电路的走线,整齐排列元器件,最终做到电路板的简洁。

4.1.1 电源管理模块

  电源模块对于一个控制系统来说极其重要,关系到整个系统是否能够正常工作,因此在设计控制系统时应选好合适的电源模块。竞赛规则规定,比赛使用智能汽车竞赛统一配发的标准车模用7.2V 2000mAh Ni-cd供电或者使用锂电池(两节18650,2AH,配备保护板),我们在实际尝试对比之后选择锂电池供电方案。

  为满足需要,本车模上存在4种供电电压:
  1)智能车使用锂电池(两节18650,2AH,配备保护板)供电,充满时电压在7.8~8.4V,可直接用于直流电机供电。

  2)一些数字器件使用直流5V,5V电源选用线性稳压芯片MP2482为了隔离电机的干扰,MP2482的输入端加磁珠。

  3)使用3.3V为单片机系统,人机交互模块和电磁传感器模块供电,采用线性稳压芯片ZQC_RT9013-33
  一般来说,线性电源是将输出电压取样然后与参考电压送入比较电压放大器,此电压放大器的输出作为电压调整管的输入,用以控制调整管使其结电压随输入的变化而变化,从而调整其输出电压,技术成熟,制作成本较低,稳定度可以达到要求。

  4)电机驱动模块使用直流12V,使用一款5-12V 升压电源模块。加若干LED显示各类电源工作状况。

4.1.2 电机驱动模块

  电机驱动电路为一个由分立元件制作的直流电动机可逆双极型桥式驱动器,其功率元件由四支 N 沟道功率 MOSFET 管组成,额定工作电流可以轻易达到50A 以上,大大提高了电动机的工作转矩和转速。该驱动器主要由以下部分组成: PWM信号输入接口、逻辑换向电路、死区控制电路、电源电路、上桥臂功率 MOSFET 管栅极驱动电压泵升电路、功率 MOSFET 管栅极驱动电路、桥式功率驱动电路、缓冲保护电路等;专用栅极驱动芯片通常具有防同臂导通、硬件死区、欠电压保护等功能,可以提高电路工作的可靠性。

  常用的电机驱动有两种方式:
  一、集成电机驱动芯片;

  二、采用N沟道MOSFET和专用栅极驱动芯片设计。市面上常见的集成H桥式电机驱动芯片中,IR2104型芯片性能较为出色,该芯片具有完善的过流、欠压、过温保护等功能,内部MOSFET导通电阻为120毫欧,具有最大5A的连续工作电流。使用集成芯片的电路设计简单,可靠性高[2],但是性能受限。由于比赛电机内阻仅为几毫欧,而集成芯片内部的每个MOSFET导通电阻在120毫欧以上,大大增加了电枢回路总电阻,此时直流电动机转速降落较大,驱动电路效率较低,电机性能不能充分发挥。

  由于分立的N沟道MOSFET具有极低的导通电阻,大大减小了电枢回路总电阻。另外,专门设计的栅极驱动电路可以提高MOSFET的开关速度,使PWM控制方式的调制频率可以得到提高,从而减少电枢电流脉动。并且专用栅极驱动芯片通常具有防同臂导通、硬件死区、欠电压保护等功能,可以提高电路工作的可靠性。

  经过考虑,我们的电机驱动包含74lvc隔离保护芯片、IR2104全桥驱动芯片,MC34063 12V升压芯片,八个4833N MOS组成。

  1.升压芯片的选择:
  MC34063芯片将电池电压升压到12v为IR2104芯片供电,MC34063芯片由温度自动补偿功能的基准电压发生器、比较器、占空比可控振荡器、 触发器和大电流输出开关电路等组成,具有功能齐全、价格低廉、体积小、效率高、仅需少量外部元器件等优点。

▲ 图3.1 MC34063应用图

▲ 图3.1 MC34063应用图

  2.MOSFET的选择:
  选择MOSFET时主要考虑的因素有:耐压、导通内阻和封装。智能汽车电源是额定电压为7.2V的电池组,由于电机工作时可能处于再生发电状态,所以驱动部分的元件耐压值最好取两倍电源电压值以上,即耐压在16V以上。而导通内阻则越小越好。封装越大功率越大,即同样导通电阻下通过电流更大,但封装越大栅极电荷越大,会影响导通速度。常用的MOSFET封装有TO-220、TO-252、SO-8等,TO-252封装功率较大、而栅极电荷较小。于是我们最终选择了IR公司TO-252封装的4833型N沟道MOSFET,VDSS=55伏、RDS(on)=8.0毫欧、ID=110安。

  3、驱动芯片的选择:
  IR公司号称功率半导体领袖,所以我们主要在IR公司的产品中进行选择。其中IR2104全桥驱动芯片可以驱动高端和低端两个N沟道MOSFET,能提供较大的栅极驱动电流,并具有硬件死区、硬件防同臂导通等功能。使用四片IR2104全桥驱动芯片可以组成完整的直流电机H桥式驱动电路。由于其功能完善,价格低廉容易采购,所以我们选择它进行设计。

▲ 图3.2 电机驱动分析图

▲ 图3.2 电机驱动分析图

 

第五章 AI模型的部署与训练


  工神经网络是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型,在这种模型中,大量的节点之间相互联接构成网络,即“神经网络”,以达到处理信息的目的,神经网络通常需要进行训练,训练的过程就是网络进行学习的过程,训练改变了网络节点的连接权值,使其具有分类的功能,经过训练的网络就可用于对象的识别和实际问题的解决。

5.1神经网络模型基本原理

  卷积神经网络,其实是通过图像卷积运算实现对图像的特征提取[3]的学习过程,由两个过程组成 :初始化核函数以及卷积运算。输入层的各神经元要负责接收来自外界输入的图像并传递到中间层的各神经元;中间层就是内部的图像处理层,对图像变换进行处理,按照图像特征,设计为单隐层或者多隐层结构的中间层;最后的一个隐层传递各神经元的信息到输出层,经过进一步地处理后。完成了一次正向传播中的处理过程,再由输出层向外界输出图像的分类结果。

  这里提到了四个重要的概念:输出层、输入层、隐藏层和核函数,卷积神经网络可以理解为由这三层和各层之间的权重组成的网络。

  • 输入层:图像的输入端,下图中有六个节点,实际的网络中可能有很多个。
  • 隐藏层:信息的处理端,用于模拟一个计算的过程,下图中,隐藏层有两层,节点数为七个。
  • 输出层:信息的输出端,输出我们想要的结果。下图中,输出层一个节点,实际上可能有很多个输出节点。
  • 核函数:每次卷积运算的卷积核,实则为连接每层信息之间的参数,下图中通过乘积的方式来体现。

▲ 图 4.1神经网络的架构

▲ 图 4.1神经网络的架构

  反向传播算法由向前向后两个阶段组成。

  向前传播阶段:1.从样本中取一个样本(Xp, Yp),将Xp入到网络中;2.计算实际输出Op,在这一阶段,信息将在输入层经过每层级的变换,传送到输出层。 这一过程也就是网络在完成了训练后,再正常运行时的执行过程。

  向后传播阶段:1.计算出实际输出Op与相应的理想输出Yp的差的过程;2.以极小化误差的方式调整关于权矩阵。
  这两个阶段的工作要受到精度要求的控制,在这里取Ep=∑12(yp−op)2

  Ep代表神经网络关于第p个样本的误差测度。
  输入样本Xi经过隐含层节点作用于输出节点,经过变换,产生输出信号Yk,网络训练的每个样本包括输入向量Xi和期望输出量Yk,网络输出值Op与期望输出值Yk之间的偏差,通过调整输入节点、隐层节点与输出节点之间的联接强度取值Wij和Bij,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和偏置),训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。

  正向传播和误差反向按照设定周而复始的进行,网络各层的权值和偏置不断进行调整,同时也是神经网络进行学习训练的过程,这一过程一直进行到预先设定到的学习次数或者到网络输出的误差减少到能被接受的程度。

5.2数字识别卷积神经网络

  1.输入层图像大小
  神经网络的输入层决定了输入图像大小,越大的图像,越能够良好的保存原始图像信息,但是也会极大地增加运算时间。反之,小图像能够很快的完成矩阵运算,但是对原始图像信息保存并不完整。考虑到openmv的工作性能,在经过多次实验之后,最终选择将图像同步缩放为4848像素的正方形大小。其一,4848像素大小与openmv感知的像素多少并无太大偏差,其二,48*48像素足够满足所需卷积核的感受野大小。

  2.卷积层、池化层叠加
  由于卷积运算过于消耗算力,同时0-9的特征相对明显,并不难以提取。所以并不需要太多的卷积层连接,同时池化层能够减小运算后图像大小,节约算力的同时降采样,防止过拟合。故将网络模型设计为3层卷积层与池化层连接,最终以全连接层输出实现10分类。

▲ 图4.2卷积流程图

▲ 图4.2卷积流程图

  3.数据集文件制作
  网络模型需要搭配合适的数据集才能更好的发挥效果。为了实现数据集与小车实际运行过程中的一致性,我们在实际赛道上对数字图片进行拍照,作为基础图像。使用Keras数据增强库,完成对原始图像的不同光照以及旋转角实现。

5.3水果动物分类模型

  1.输入层图像大小
  神经网络的输入层决定了输入图像大小,越大的图像,越能够良好的保存原始图像信息,但是也会极大地增加运算时间。反之,小图像能够很快的完成矩阵运算,但是对原始图像信息保存并不完整。考虑到openmv的工作性能,在经过多次实验之后,最终选择将图像同步缩放为4848像素的正方形大小。其一,4848像素大小与openmv感知的像素多少并无太大偏差,其二,48*48像素足够满足所需卷积核的感受野大小。

  2.卷积层、池化层以及注意力机制
  与0-9的数字识别不同,水果动物由于其本身特征难以提取,加上背景图像的复杂化,不能在使用简单的3层网络结构完成对水果动物的分类任务。同时,简单的卷积层池化层叠加已无法完成对分类任务的需求。为了遏制背景对网络实现效果的影响,故使用注意力机制,使网络模型在运行过程中,能够同步增大关键图像的参数而忽略背景图像。

  结合原始的输入层与最终全连接层。最终设计为卷积、池化层与注意力机制的混合10层网络。

  3.数据集文件制作
  网络模型需要搭配合适的数据集才能更好的发挥效果。为了实现数据集与小车实际运行过程中的一致性,我们在实际赛道上对数字图片进行拍照,作为基础图像。使用Keras数据增强库,完成对原始图像的不同光照以及旋转角实现

5.4模型训练过程

  在完成数据集制作以后,我们使用Tensorflow1.14.0的Keras库完成对网络的搭建与训练,设置一定的训练次数,通过正向计算和反向计算来使神经网络的实际输出和理想输出的误差不断减小,当误差小于某种程度或者训练次数达到设定次数,结束训练,输出此时的神经网络权重模型,并将大模型进一步轻量化为TFLite使用。

5.5卷积神经网络的缺陷

  卷积神经网络作为人工智能领域的前沿技术,具有坚实的理论依据,严谨的推导过程,清晰的算法流程。由于通用性十分强,识别和控制非线性系统的功能强大,卷积算法成为应用最广泛的人工神经网络。但通过这短时间我们对神经网络的学习和理解,可以发现卷积神经网络存在的如下缺陷:

  1.学习过程中,误差收敛速度慢。
  标准卷积算法学习速度非常慢,尤其是网络的训练达到一定程度后。标准卷积算法在误差下降时,难免产生振荡现象,这会严重影响网络的收敛速度。对于某些复杂问题,卷积算法可能要进行几个小时甚至更长时间的学习训练,学习的最大弱点是收敛性很难掌握。

  2.学习过程中,容易陷入局部极小值。
  卷积网络的学习误差在下降过程中常会处于停滞状态。在训练过程中,出现误差下降的停滞状态,往往是由于网络陷入了局部极小点。陷入局部极小点的卷积神经网络,误差很难继续下降,很可能因误认为找到最佳权重而停止学习。

  3.卷积神经网络结构的确定缺乏充分的理论依据。
  使用卷积神经网络时,遇到的第一个难题就是确定网络的最佳结构。如何确定网络的层数和每层应选的节点数,目前大多是靠经验来确定,理论依据尚不充分

5.6经验总结

  1.卷积神经网络中,更宽更深的网络,能够学到更加复杂的特征,可以应用于更复杂的情况,但是网络的计算过程也越繁琐,求解的参数越多,越容易出现过拟合的情况,所以需要根据实际问题和数据情况来设计网络的层数与节点数,激励函数类型以及学习率。

  2.对于卷积神经网络来说,训练神经网络的数据集如何很大程度上决定了网络的实际效果。数据类型越多样越完整,神经网络越能够贴近实际问题的情况,效果越好。

  3.卷积神经网络是区别于传统数据处理的一种方法,其特点在于寻找数据之间的相关性,并非严格地数学关系,因此是一种有效但是并非严格地网络。对于实际问题的处理非常有用,但不能作为严谨数学计算的方法。

 

第六章 件系统设计及实现


6.1赛道边界获取

  提取边界的算法基础思想如下:

  1. 通过大津法获得每一帧图像的阀值,将灰度图转化为黑白二值化图像
  2. 因近处图像比远处图像更稳定,所以图像由近及远扫描图像,并提取边线,得到左右边线位置数组,丢线数组。
  3. 先从近处起点开始,依次向上,扫描前2行,由中间向两边寻线,寻找黑—白—白交界处,判断是否找到左右边线,如果找到记录其边线的列数,如果找不到则记左边线为0,右边线为159,并记为丢线。
  4. 由于边线是由有规律的相邻像素点组成,所以当找到一个边线像素点,下一个边线像素点定在其附近,通过此方法寻找边线数组,如果找不到则下一边线像素点继承当前边线的列数,并为丢线,直到找到下一处边线。
  小结,通过实际小车的行驶轨迹来看,这种提取边界的方法有效提高了运算的效率,规避图像边缘的一些噪点,避免将噪点作为边界的情况,和不在赛道上时误判赛道,也同时方便图像特殊元素的处理。

6.2特殊元素识别及处理

  16届比赛中,智能视觉组出现的特殊赛道元素有出库,入库,十字,环岛,坡道和三叉。以下就各特殊元素识别进行说明。

6.2.1出库

  智能车比赛时首先要执行的是出库,当车辆放在车库靠一边时,如右出库,则将车辆放在车库的左侧,方便出库,首先设定一个固定的目标编码值,车辆启动后舵机打角随编码值不断增大,并进行相应限幅,达到一定编码值时,车身在赛道上摆正,停止给定舵机脉冲值,舵机转动根据图像控制。

6.2.2入库

  斑马线的标志位是有多个黑白块交界,当车辆在远处时看到车库标志位就给电机一个较低的期望值,防止在跑道时过高的速度使车辆在车库处无法正确
  入库,在靠近车库时则给舵机一个固定的脉冲值,从此时开始记录电机的编码值,达到一定编码值判断车辆已经进入车库,给舵机一个中值,使车轮摆正,并让车辆停止。

6.2.3十字

  车辆行驶十字的过程分为初入十字,处于十字中心处,出十字等多过程。 十字元素类型分为中间十字,斜入十字等多类型。

  十字的处理:识别十字(屏蔽圆环)—>判断十字类型—>判断十字过程。

6.2.4坡道

  当所获取的图像拟合出来的赛道宽度比真实赛道赛道宽度大一定范围,且两边线斜率符合一定变化范围,判定为坡道,并进行延时,在延时的时间段内使智能车直走。

6.2.5环岛

  环岛是难度较大的元素,须考虑大小环岛的图像差异,将环岛处理分为以下几步:发现环岛(直走)过环岛中间(补线打角)入环岛(正常巡线)出环岛(补线打角)

6.2.6三叉

  三叉是今年新增加的元素,可用以下方法判断。一、两边线出现拐点,且拐点上下边线斜率符合一定数组,二、图像中间偏上出现明显黑块,可通过判断中间列黑点数量进一步判断。

6.3控制算法

  对于C车,有两个动作需要控制,其一是舵机转角,其二是后轮差速,此处舵机转角采用模糊pid进行控制,后轮速度采用位置式pid。

6.3.1模糊pid转角控制

  在智能车比赛中,我们使用的是通用二输入一输出系统,其中两个输入量是中心线偏移量,和相邻两次检测的偏移量差值;再见输出量做一定的限幅与单位转换输出为舵机转角pwm。
  中心线偏移量的隶属度函数表为7级:

▲ 表5.1中心线偏移量的隶属度函数表

▲ 表5.1中心线偏移量的隶属度函数表

  偏移量差值的隶属度函数表为7。

  在实际中需要根据使用进行调整。

▲ 表5.2中间电感标定差值的隶属度函数表

▲ 表5.2中间电感标定差值的隶属度函数表

  由表5.1和表5.2对转角值进行计算,得到的计算值进行累加,即得到转角值。这些模糊系数的调试占据了程序调试工作的大部分时间。

6.3.2基于位置式PID的方向控制

  PID控制是工程实际中应用最为广泛的调节器控制方法。问世至今70多年来,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。

  单位反馈的PID控制原理框图如图5.3:

▲ 图5.3 单位反馈的PID控制原理框图

▲ 图5.3 单位反馈的PID控制原理框图

  单位反馈e代表理想输入与实际输出的误差,这个误差信号被送到控制器[4],控制器算出误差信号的积分值和微分值,并将它们与原误差信号进行线性组合,得到输出量u。

  其中,Kp、Ki 、Kd分别称为比例系数、积分系数、微分系数。u接着被送到了执行机构,这样就获得了新的输出信号,这个新的输出信号被再次送到感应器以发现新的误差信号,这个过程就这样周而复始地进行。

  数字控制系统中,PID控制器是通过计算机PID控制算法程序实现的。计算机直接数字控制系统大多数是采样-数据控制系统。进入计算机的连续-时间信号,必须经过采样和整量化后,变成数字量,方能进入计算机的存贮器和寄存器,而在数字计算机中的计算和处理,不论是积分还是微分,只能用数值计算去逼近。
  用矩形数值积分代替上式中的积分项,对导数项用后向差分逼近,得到数字PID控制器的基本算式(位置算式):

  其中T是采样时间,为三个待调参数,在实际代码实现算法时,处理成以下形式:

  此处使用上一步得出的转角值为误差送入速度pid,在左右轮基础速度上加减偏差速度并乘以一定的差速系数,将得出pwm送入左右轮电机驱动从而实现差速控制。具体程序如下:

 

第七章 发工具、制作、安装、调试过程说明


7.1 开发工具

  程序的开发是在IAR下进行的,包括源程序的编写、编译和链接,并最终生成可执行文件。

  IAR Embedded Workbench IDE(简称EW)的C/C++交叉编译器和调试器是今天世界最完整的和最容易使用专业嵌入式应用开发工具。EW对不同的微处理器提供一样直观用户界面。EW今天已经支持35种以上的8位/16位32位ARM的微处理器结构。

  EW包括:嵌入式C/C++优化编译器,汇编器,连接定位器[5],库管理员,编辑器,项目管理器和C-SPY调试器中。使用IAR的编译器最优化最紧凑的代码,节省硬件资源,最大限度地降低产品成本,提高产品竞争力

7.2 调试过程

7.2.1 上位机系统

  要分析车模在赛道行驶的实时情况,必须采集小车在行驶过程中各个功能模块的实时数据,我们采用两个上位机联合调试,可将摄像头采集到的图像保存并进一步分析。包括软件和硬件部分
  RT1064发送图像信息 将摄像头采集到的数据,通过RT1064单片机,经过串口发送至上位机,此时上位机接收波特率需和发送波特率相符合。

  2)利用“逐飞科技智能车传感器调试助手”上位机接收并保存图像

  3)利用“智能车图像处理系统”处理保存的图像,可进行中线拟合、标志位监测等。

▲ 图6.2 图像处理界面

▲ 图6.2 图像处理界面

7.2.2 利用屏幕调整摄像头“前瞻”

  通过观察显示屏,调整摄像头高度和俯仰角,将摄像头“前瞻”调整到一个合适的值。

▲ 图6.3 屏幕实际测试画面

▲ 图6.3 屏幕实际测试画面

7.2.3 控制算法的参数整定

  运用 PID 控制的关键是调整三个比例系数,即参数整定。PID 整定的方法有两类:一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数。由于智能车整个系统是机电高耦合的分布参数系统,并且要考虑赛道具体环境,要建立精确的智能车运动控制数学模型有一定难度,而且对车身机械结构经常进行不断修正,模型参数变化较频繁,可操作性不强;二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单,采用了这种方法。

  方向控制算法的参数整定:方向控制采用模糊PD控制。由于小车循赛道本质上是一个随动系统,积分项在弯道累积的偏差错误地加在直道的跟踪上,造成在进入直道时转向不够准确,跑直道时虽然能跟踪赛道中线,但是转向调整往往超调,导致车身在直道上左右震荡,这种震荡严重影响了车的整体表现。因此车模需要在转弯弧度大的时候进行一个大的转角,转弯弧度小的时候进行一个较小的打角,同时应该具有快速回中的特性。

  理解了上述问题,那么就可以“辩证施治,对症下药”了。比如说,如果系统响应速度慢,我们就加大Kp的取值,如果超调量过大我们就减小Kp的取值等等。可是问题这些语言的描述该如何用数学形式表达出来呢。我们所知道的,反馈系统的实质就是系统的输出量作为反馈量与系统的输入量进行作差,从而得到系统的误差e,那么这个误差e就能够反应目前系统所处的状态。误差e可以表明目前系统的输出状态到底偏离要求多少。而误差e的变化律ec,表示误差变化的速度。这样,我们可以根据这两个量的状态来分析三个参数此时应该如何取值,假如e为负方向比较大,ec也为负方向增大状态,此时比例环节要大一些,从而加快调节速度,而积分环节要小一些,甚至不加积分环节,从而防止负方向上出现饱和积分的现象。微分环节可以稍加一些,在不影响调节时间的情况下,起到改善系统动态性能的作用。
  速度控制算法的参数整定:速度控制采用增量式PID控制,同样采用上一小节的工程整定法。经多次试验得出,Kp,Ki ,Kd 分别取30,3,2,调节死区V_DEADLINE设置为1,调节范围设置为950(全速时为1000),车模行驶直道和弯道加减速反映迅速,整体速度良好。

 

第八章 型车的主要技术参数


 

考文献


[1] 邵贝贝. 单片机嵌入式应用的在线开发方法. 北京, 清华大学出版社, 2001
[2] 刘慧银, 龚光华, 王云飞等. Motorola(Freescale)微控制器MC68HC08原理及其嵌入式应用(新版). 北京, 清华大学出版社,1993
[3] 卓晴, 黄开胜, 邵贝贝等. 学做智能车. 北京, 北京航空航天大学出版社, 2001
[4] 潘新民, 王燕芳. 微型计算机控制技术. 北京, 高等教育出版社, 2001
[5] 何立民. 单片机应用系统设计. 北京, 北京航天航空大学出版社, 1997

■ 附录A电路原理图

  附录B核心程序

int main(void) 
{ 
   // int i=0; 
    DisableGlobalIRQ(); 
    board_init();    //务必保留,本函数用于初始化MPU 时钟 调试串口  
    systick_delay_ms(100); //延时100ms,等待主板其他外设上电成功 
     
    uart_init(USART_1, 115200,UART1_TX_B12,UART1_RX_B13); 
    NVIC_SetPriority(LPUART1_IRQn,15); 
    uart_rx_irq(USART_1,1); 
    example_receivexfer.dataSize=1; 
    example_receivexfer.data=&example_rx_buffer; 
    uart_set_handle(USART_1,&example_g_lpuartHandle,example_uart_callback,NULL,0,example_receivexfer.data,4); 
 
    lcd_init();     //初始化TFT屏幕 
    all_gpio_init(); 
    FTM_Init();//电机舵机初始化 
    mt9v03x_csi_init();  //初始化摄像头 使用CSI接口 
    pit_init();                     //初始化pit外设 
    pit_interrupt_ms(PIT_CH0,1);  //PIT中断 1ms 
    NVIC_SetPriority(PIT_IRQn,1);  //设置中断优先级 范围0-15 越小d优先级越高 四路PIT共用一个PIT中断函数 
    EnableGlobalIRQ(0); 
    while(1) 
    {  
      if(mt9v03x_csi_finish_flag)    
      { 
        mt9v03x_csi_finish_flag = 0;//清除采集完成标志位 
        Get_Pixle();//二值化 
        get_route();//判断断路 横断 圆环 十字 
        get_deviation();//偏差加权 
        Track_Line();//赛道类型判断 
        Control_Speed();//变速控制 
        differential_control();//差速 
        Carport_Del();//出入库处理 
       //csi_seekfree_sendimg_03x(USART_1,&Pixle_text[0][0],60,120); 
       // lcd_displayimage032_zoom(&Pixle[0][0], Col, Row,120,60); 
        
        //lcd_showstr(0,5,"end_ident"); 
       //lcd_showint8( 0,5,end_identify_flag); 
        //lcd_showstr(0,6,"barcode"); 
        //lcd_showint8( 0,6,barcode_flag); 
       // lcd_showstr(0,7,"barcode_back"); 
        //lcd_showint8( 80,6,barcode_back_flag); 
        //lcd_showint8( 0,7,openmvdata); 
       // lcd_showint8( 0,5,ringflag); 
        //lcd_showfloat(0,6,Error,3,2); 
        //lcd_showint8( 100,5,barcode_flag); 
       // lcd_showint8( 0,6,third_road_flag); 
        //lcd_showint8( 100,6,scratchflag);  
        //lcd_showint8( 0,5,ru_cross_flag);  
        //lcd_showint8( 0,6,xie_cross_flag);   
       // lcd_showint8( 0,7,chu_cross_flag); 
        //lcd_showint8(0,6,openmvdata);  
        //lcd_showint8(100,6,fruit); 
        //lcd_showfloat(0,6,Error, 3, 2); 
        // lcd_showfloat(0,6,yuan_huan_xie_lv,3,2); 
        /* 
        if(startflag==1) 
        { 
          i++; 
          if(i>=50) 
           startflag=2; 
        }*/ 
         
        key2_last_status = key2_status; 
        key3_last_status = key3_status; 
        key4_last_status = key4_status; 
         key2_status = gpio_get(KEY2); 
        key3_status = gpio_get(KEY3); 
        key4_status = gpio_get(KEY4); 
        if(key2_status && !key2_last_status)    key2_flag = 1; 
        if(key3_status && !key3_last_status)    key3_flag = 1; 
        if(key4_status && !key4_last_status)    key4_flag = 1; 
         if(key2_flag)    
        { 
          key2_flag=0; 
          startflag=2; 
          //uart_putchar( USART_1, 2);//找数字 
        }       
        if(key3_flag)    
        { 
            key3_flag = 0;//使用按键之后,应该清除标志位 
            startflag=2; 
           //uart_putchar( USART_1,3);//找二维码 
        } 
         
        if(key4_flag)    
        { 
          key4_flag = 0;//使用按键之后,应该清除标志位 
          startflag=2; 
          //uart_putchar( USART_1, 4);//找动植物 
         } 
         
      } 
  } 
} 
 


● 相关图表链接:

Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐