智能车竞赛技术报告 | 智能车视觉 - 西南科技大学 - 西科二队
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智能车竞赛技术报告 | 智能车视觉 - 西南科技大学 - 西科二队相关的知识,希望对你有一定的参考价值。
简 介: 本车以恩智浦公司的 32 位单片机MI.MXRT1064DV高内核处理速度核心控制器,可提供卓越的CPU性能和最佳实时响应。以MT9V034摄像头为核心传感器,通过摄像头采集道路图像信息送入单片机,在单片机中对输入的原始图像信息进行处理,判断赛道元素,据此对舵机进行打角控制和电机进行速度控制。整个系统设计包括了车模机械结构设计和软/硬件系统设计。车体机械结构设计主要包括Open-ART摄像头识别数字、水果以及动物图像、前后轮的调节、车模重心调节、主控板和驱动板的安装、各传感器的安装、舵机以及编码器的安装等;硬件部分的设计契合智能车的功能需求,遵循低功耗、高转化率、高安全性、高耐用性以及操作简便等。为了提高模型车的速度和稳定性,使用Matlab、 MFC 上位机、 虚拟示波器、TINA、Proteus、OpenMV EDA等工具,进行了大量硬件与软件测试。实验结果表明,该系统设计方案确实可行。
关键词
: iMXRT1064DV,MT9V034,PID,Open-ART
队伍名称:西科二队
参赛队员:
詹永生、周梦、胡博文
带队教师:
武丽、汝卡
引 言
第十六届全国大学生智能汽车竞赛是以“立足培养、重在参与、鼓励探索、追求卓越”为指导思想,鼓励创新的一项科技竞赛活动。竞赛要求在规定的汽车模型平台上,使用STC, Infineon, NXP,沁恒,灵动等系列单片机作为核心控制模块,通过增加道路传感器、电机驱动模块以及编写相应控制程序,制作完成一个能够自主识别道路的模型汽车。参赛队员的目标是模型汽车需要按照规则以最短时间完成双圈(室内)或赛道。
作为第一届智能视觉组比赛,第十六届全国大学生智能汽车竞赛内容愈加丰富,竞赛要求在规定的赛道上,使用恩智浦半导体公司的微控制器作为核心控制模块,通过增加道路传感器、电机驱动模块以及编写相关的控制程序,制作完成一个能够自主识别道路的模型汽车。智能车竞赛的赛道是路面宽度不小 45cm 的白色面板,赛道两侧粘有黑色胶布,以帮助相关传感器的识别。赛道由直道、弯道、十字、环岛、坡道、三岔路口,识别动物、水果以及数字标靶等赛道元素组合而成。竞赛车模从车库出发沿着赛道运行两周,然后返回车模。车模需要根据在三叉路口周围的0~9阿拉伯数字的奇偶来分别通过三岔路口两条岔路,比赛时间从车模驶出车库到车模重新回到车库为止。当遇到赛道某一区域中心放置AprilTag二维码图片时,根据二维码对应数字,分别在赛道左侧,或者右侧,二维码前后50厘米范围内放置水果或者动物靶标牌。
在这份报告中,我们小组通过对小车设计制作整体思路、电路、算法、调试、车辆参数的介绍,详尽地阐述了我们的思想和创意,具体表现在电路的创新设计,以及算法方面的独特想法,而对单片机具体参数的调试也让我们付出了艰辛的劳动。这份报告凝聚着我们的心血和智慧,是我们共同努力后的成果。
几个月来的经历,培养了我们电路设计、软件编程、系统调试等多方面的能力,锻炼了我们知识融合、实践动手的能力,最重要的是锻炼了我们的心志。在疫情的冲击下,备赛条件匮乏,面对困难,大家团结一致不退缩,遇到问题解决问题,这些对我们今后的学习、生活以及工作都有着重要的实际意义。
一.系统总体设计
本章主要简要地介绍智能车系统总体设计思路,在后面的章节中将整个系统分为机械结构、控制模块、控制算法等三部分对智能车控制系统进行深入的介绍分析。
1 ,1系统总体方案设计
根据竞赛规则相关规定,智能视觉组智能车系统应采用竞赛指定车模中的C类车模,允许使用各类电磁、红外光电、摄像头、激光、超声传感器器件进行赛道和环境检测,车模微控制器使用NXP MI.MXRT系列单片机,在MDK开发环境中进行软件开发。赛车的位置信号由车体中后方的MT9V034图像传感器采集,通过摄像头采集道路图像信息送入单片机,用于赛车的运动控制决策。通过编码器测速模块来检测车速,并采用MI.MXRT1064的输入捕捉功能进行脉冲计数计算速度和路程;电机转速控制采用 PID 控制,通过 PWM 控制驱动电路调整电机的转速,完成智能车速度的闭环控制。
▲ 图1.2系统总体方框图
本组的系统整体结构如图1.1所示。主要处理是i.MXRT1064DV微处理器通过总钻风摄像头得到赛道边沿信息,经过处理得到图像偏差,根据图像偏差控制舵机的输出。通过采集光电编码器对车轮转速的脉冲计数,得到车行进的速度数据。通过微处理器对图像处理,对速度进行 PID 控制,最后以 PWM 信号输出驱动电机。在调试过程中,我们通过上位机观察摄像头采集的图像,便于对图像部分的参数进行调试,通过虚拟示波器观看编码器的采值和期望速度进行对比来调试PID的参数。根据以上系统方案设计,赛车共包括八大模块:MI.MXRT1064核心板、电磁传感器模块、电
源模块、电机驱动模块、速度检测模块、运算放大模块、图像处理模块和主控拓展板。各模块的作用如下:
1.MI.MXRT1064核心板:作为整个智能车的核心处理器,将采集电感传感器、编码器,图像处理等传感器的信号,根据控制算法做出控制决策,驱动直流电机、舵机和激光完成对智能车的控制。
2.图像处理模块:此智能车通过基于MT9V034的总转风摄像头,通过一定的前瞻性,提前识别前方的赛道信息,为主控芯片做出决策提供必要的依据和充足的反应时间,视觉识别处理上采用基于MI.MXRT1064的Open-ART图像处理模块,对动物水果标靶和奇数偶数标靶进行识别处理,与核心板MI.MXRT1064进行通信,由核心板MI.MXRT1064做出符合比赛任务规则的反应信号。
3.电源模块:为整个系统提供合适而又稳定的电源。
4.电机驱动模块:驱动直流电机和伺服电机完成智能车的加减速控制和转向控制。
5.速度检测模块:通过1024线带方向输出光电编码器,检测并反馈智能车后轮的转速,用于速度的闭环控制。
6.电磁传感器模块:通过电感赛道中央的信号源导线传播的磁场转化为电信号,主要防止智能车输出赛道导致硬件损坏,以及少部分赛道元素的辅助判别。
7.运算放大模块:对电磁传感器模块采集的电信号进行放大,以达到MI.MXRT1064 ADC采集范围要求。
8.主控拓展板:对MI.MXRT1064核心板部分使用到的功能引脚进行引出;为MI.MXRT1064核心板供电;放置其他传感器接口,并为其供电和提供输入输出信号线。
二.智能车机械结构调整与优化
智能车中的控制都是在一定的机械结构基础上实现的,因此在设计整个软件架构和算法之前一定要对整个车模的机械结构有一个感性的认识,然后建立相应的数学模型。从而再针对具体的设计方案来调整赛车的机械结构,并在实际的调试过程中不断的改进和提高。本章将主要介绍智能车车模的机械结构和调整方案。
2.1 智能车车体机械总体机械结构
应第十六届全国大学生智能汽车竞赛规则,智能视觉组使用的车模应为C类车模,竞赛车辆选用官方指定车模底盘,以及地盘指定搭配的舵机和后轮电机,即整个车的控制方法为后轮为驱动轮,前轮为转向轮。在车模的机械结构设计上,主要是摄像头的安装方式以及安装位置,由于需要两个摄像头,因此安装方案众多,对比和尝试不同的安装方案之后,选择总转风与Open-ART分立安装;后轮电机驱动选择覆盖于电机上选择使用图2.1的结构方式进行安装。主控拓展板安装于两个摄像头前,电池介于后轮电机驱动和摄像头支架之间,总图机械结构布局如图2.1所示,车模基本技术参数如表2.1所示。
▲ 图2.1 系统总体方框图
▲ 表2.1 车模基本技术参数
2.2 智能车前轮定位的调整
现代汽车在正常行驶过程中,为了使汽车直线行驶稳定,转向轻便,转向后能自动回正,减少轮胎和转向系零件的磨损等,在转向轮、转向节和前轴之间须形成一定的相对安装位置,叫车轮定位,其主要的参数有:主销后倾、主销内倾、车轮外倾和前束。智能车竞赛模型车的四项参数都可以调整,但是由于模型车加工和制造精度的问题,在通用的规律中还存在着一些偶然性。
2.2.1 主销后倾角
所谓主销后倾,是将主销(即转向轴线)的上端略向后倾斜。从汽车的侧面看去,主销轴线与通过前轮中心的垂线之间形成一个夹角,即主销后倾角。主销后倾的作用是增加汽车直线行驶时的稳定性和在转向后使前轮自动回正。由于主销后倾,主销(即转向轴线)与地面的交点位于车轮接地点的前面。这时,车轮所受到的阻力的作用点总是在主销轴线之后,相当于主销拖着车轮前进。这样,就能保持行驶方向的稳定性。当车转弯时,由于车轮所受阻力作用线,不通过主销轴线,这样,车轮所受阻力在主销方向有力矩作用产生,迫使车轮自动偏转直到到车轮所受阻力作用线通过主销轴线,此时,车轮已回正,这就是转向车轮的自动回正功能。
主销后倾角越大,方向稳定性越好,自动回正作用也越强,但转向越沉重。汽车主销后倾角一般不超过3°,由前悬架在车架上的安装位置来保证。现代轿车由于采用低压宽幅子午线轮胎,高速行驶时轮胎的变形加大,接地点后移,因此主销后倾角可以减小,甚至为负值(变成主销前倾),以避免由于回正力矩过大而造成前轮摆振。
模型车通过增减黄色垫片的数量来改变主销后倾角的,由于竞赛所用的转向舵机力矩不大,过大的主销后倾角会使转向变得沉重,转弯反应迟滞,所以设置为0°,以便增加其转向的灵活性。
2.2.2 主销内倾角
所谓主销内倾,是将主销(即转向轴线)的上端向内倾斜。从汽车的前面看去,主销轴线与通过前轮中心的垂线之间形成一个夹角,即主销内倾角。主销内倾的作用是使车轮转向后能及时自动回正和转向轻便。对于模型车,通过调整前桥的螺杆的长度可以改变主销内倾角的大小,由于过大的内倾角也会增大转向阻力,增加轮胎磨损,所以在调整时可以近似调整为0°-3°左右,不宜太大。
主销内倾和主销后倾都有使汽车转向自动回正,保持直线行驶的功能。不同之处是主销内倾的回正与车速无关,主销后倾的回正与车速有关,因此高速时主销后倾的回正作用大,低速时主销内倾的回正作用大。
2.2.3 车轮外倾角
轮外倾角是指通过车轮中心的汽车横向平面与车轮平面的交线与地面垂线之间的夹角,对汽车的转向性能有直接影响,它的作用是提高前轮的转向安全性和转向操纵的轻便性。在汽车的横向平面内,轮胎呈“八”字型时称为“负外倾”,而呈现“V”字形张开时称为正外倾。如果车轮垂直地面一旦满载就易产生变形,可能引起车轮上部向内倾侧,导致车轮联接件损坏。所以事先将车轮校偏一个正外倾角度,一般这个角度约在1°左右,以减少承载轴承负荷,增加零件使用寿命,提高汽车的安全性能。
模型车提供了专门的外倾角调整配件,近似调节其外倾角。由于竞赛中模型主要用于竞速,所以要求尽量减轻重量,其底盘和前桥上承受的载荷不大,所以外倾角调整为0°即可,并且要与前轮前束匹配。
2.2.4 前轮前束
所谓前束是指两轮之间的后距离数值与前距离数值之差,也指前轮中心线与纵向中心线的夹角。前轮前束的作用是保证汽车的行驶性能,减少轮胎的磨损。前轮在滚动时,其惯性力自然将轮胎向内偏斜,如果前束适当,轮胎滚动时的偏斜方向就会抵消,轮胎内外侧磨损的现象会减少。像内八字那样前端小后端大的称为“前束”,反之则称为“后束”或“负前束”。在实际的汽车中,一般前束为0-2mm。
在模型车中,前轮前束是通过调整伺服电机带动的左右横拉杆实现的。主销在垂直方向的位置确定后,改变左右横拉杆的长度即可以改变前轮前束的大小。在实际的调整过程中,我们发现较小的前束,约束0-2mm可以减小转向阻力,使模型车转向更为轻便,但实际效果不是十分明显。
虽然模型车的主销后倾角、主销内倾角、车轮外倾角和前束等均可以调整,但是由于车模加工和制造精度的问题,在通用的规律中还存在着不少的偶然性,一切是实际调整的效果为准。
2.3 智能车转向机构调整优化
理想的转向模型,是指在轮胎不打滑时,忽略左右两侧轮胎由于受力不均产生的变形,忽略轮胎受重力影响下的变形时车辆的的转向建模。在这种理想的模型下,车体的转向半径可以计算得到。假设智能车系统为理想的转向模型,且其重心位于其几何中心。车轮满足转向原理,左右轮的轴线与后轮轴线这三条直线必然交于一点。
转向机构在车辆运行过程中有着非常重要的作用。合适的前桥和转向机构可以保证在车辆直线行驶过程中不会跑偏,能保证车辆行驶的方向稳定性;而在车辆转向时,合适的转向机构可以使车辆自行回到直线行驶状态,具有好的回正性。正是由于这些原因,转向系统优化设计成为智能车设计中机械结构部分的重点,直接关系到赛车能否顺利地完成比赛。在实际操作中,我们通过理论计算的方案进行优化,然后做出实际结构以验证理论数据,并在实际调试过程中不断改进。
在模型车制做过程中,赛车的转向是通过舵机带动左右横拉杆来实现的。转向舵机的转动速度和功率是一定,要想加快转向机构响应的速度,唯一的办法就是优化舵机的安装位置和其力矩延长杆的长度。由于功率是速度与力矩乘积的函数,过分追求速度,必然要损失力矩,力矩太小也会造成转向迟钝,因此设计时就要综合考虑转向机构响应速度与舵机力矩之间的关系,通过优化得到一个最佳的转向效果。经过最后的实际的参数设计计算,最后得出一套可以稳定、高效工作的参数及机构。
如图2.3,这套转向拉杆是受广大车友欢迎的安装方式,我们综合考虑了速度与扭矩间的关系,并根据模型车底盘的具体结构,简化了安装方式,实现了预期目标。
▲ 图2.3 转向拉杆图
2.4 智能车后轮减速齿轮机构调整
在车模搭建初具雏形后,电机转动时时常出现异常响声,且明显可以查觉是后轮减速齿轮之间摩擦和滑丝导致的,安装减速齿轮时若安装过紧,会导致两齿轮间摩擦力增大,在电机高速运转时两齿轮之间转动时会发出响声,且会导致齿轮寿命降低,电机负载增大等问题;若两齿轮之间过松或者齿轮未对齐,都会导致两齿轮因接触不良而导致松动,电机运作时产生异响,虽然在一般情况下安装小松动不会导致传动比改变,但是因为松动导致齿轮尖的碰撞也会降低减速齿轮使用周期,因此,合理安装减速齿轮,不错位,齿轮间松紧合适,才能保证性能和器件使用寿命,车模验证方法为安装好后轮后,手动转动后轮,查看减速齿轮是否松动,若松动,则会产生异响,之后将电机控制信号给满转,若有异响,则减速齿轮安装过紧。通过不断测试,我们的车模齿轮传动噪声已经将近最低,无碰撞声响,电机的动力传递十分流畅。
2.5 轮胎的保养与使用
在室内组智能车的使用上,最常见的应该就是轮胎摩擦力不够,以及打滑的问题,而全国大学生智能汽车组委会明确规定了智能车轮胎禁止使用粘黏性物品增加其摩擦力(即A4纸测试粘黏性质),因此轮胎的保养与使用也是智能车跑出好成绩的必不可少的因素。智能视觉组作为室内组的一员,应比赛任务的要求,需时常停车,且赛道元素本身包含许多使用差速和减速的地方,因而智能视觉组对轮胎的要求在众多室内组中算是比较高的,由于轮胎需要有明显的纹路,因此,为符合比赛要求,并提升轮胎性能,我们对轮胎进行了预处理,即使用砂纸对轮胎进行轻微打磨,旨在将轮胎表面变得粗糙,但不影响整体圆型程度,由于摩擦过后轮胎表面比较粗糙,因此在一次又一次调试过程中,轮胎与赛道之间会有相对摩擦,我们认为一个好轮胎不是人为打磨出来的,而是跑出来的,通过半年的积累,轮胎与赛道的均匀受力摩擦,可使轮胎摩擦力增大,甚至完善本身不规范的地方,整个轮胎变得圆润,纹路清晰可见,摩擦力强,且不具备粘黏性,证明了想法可行。
2.6 编码器的安装
为了提高精度,达到速度闭环,本车使用了编码器。为了便于安装和减轻重量,我们选择利用原装车模自带的孔位进行编码器的安装,较好的保证了两啮合齿轮轴的平行度及传动的平顺性,编码器安装位置如图2.6所示。
▲ 图2.6 编码器安装位置
2.7 智能车重心位置的调整
为了达到适合的前瞻,且符合比赛任务要求的转向识别,整个车身的中心偏后,前轮正压力不足导致行驶时颠簸。为了使重心前移,我们将整个主控板及核心板,运算放大器等尽可能地安放于车身靠前的位置,且没有使用支架,目的是降低车辆重心,可使车辆在行驶中更加稳定。同时,我们把控制视觉处理的模块及其转向舵机往前移,保证了车模的重心维持在净装车模重心附近,达到了预期的效果。
2.8 其他机械结构的调整
在车身其他机械结构的调整上,主要是两个摄像头的放置高度和激光的放置位置,Open-ART安装在舵机上,难免会导致抖动,虽然停车识别确实影响不大,但是要想达到动态识别,就需要对整个摄像头的稳定性有严格要求,首先是下降了其高度,由于舵机和摄像头支架碳杆接口处的晃动,我们还为整个支架探杆安装了一系列稳固支架,大部分是绘制的PCB,最后达到了相对的稳定性,由于Open-ART安装在总转风前面,因此必须要保证后者高于前者,才能在不妨碍赛道识别的同时,进行视觉识别。
在激光的安装上,选择最简单便捷的安装方式,即激光于Open-ART共轴,放置于摄像头下方,通过转轴的系列机械结构设计,可实现其俯仰角,便于车辆测试时打靶高度的调节。
三.硬件系统实际及实现
3.1 硬件电路板的设计
从最初进行硬件电路设计时我们就既定了系统的设计目标:可靠、高效、简洁,在整个系统设计过程中严格按照规范进行。
可靠性是系统设计的第一要求。我们对电路设计的所有环节都进行了电磁兼容性设计,做好各部分的接地、屏蔽、滤波等工作,将高速数字电路与模拟电路分开,使本系统工作的可靠性达到了设计要求。
高效与实用性是指本系统的各模块能充分完美的实现相应的功能。C车模采用双电机驱动,我们设计了单独的驱动芯片组成驱动器,瞬间驱动电流最大可以达到几十安培。
简洁是指在满足了可靠、高效的要求后,为了尽量减轻车模的负载,降低模型车的重心位置,应使电路设计尽量简洁,尽量减少元器件使用数量,缩小电路板面积,使电路部分重量轻,易于安装,在设计完原理图后,注重PCB板的布局,优化电路的走线,整齐排列元器件,最终做到电路板的简洁。
3.1.1 电源管理模块
对于智能车的硬件设计上,最重要的模块之一就是电源管理模块,选好一块好的电源IC,一个好的布局设计,都是整个智能车硬件供电的重中之重,我们使用的电池时两节18350配备保护板的锂电池,正常工作电压在7.8V~8.4V,为此,经过对比选择,我们选择了三个供电方式,电源管理模块的原理图如图3.1所示:
1)后轮电机驱动器的供电,我们直接采用电池进行供电,通过驱动器后,输出的电压范围能保证电机正常工作。
2)对EMI噪声要求严格的部分,例如核心板供电和运放供电,编码器供电等等,我们分开单独供电,采用LDO稳压器ASM1117进行供电。
3)对功耗要求大的,且对EMI噪声要求不大的,我们采用开关电源进行供电,采用的IC是MPS公司的一款集成开关电源芯片,其优势是体积小,带载能力强,例如舵机和激光,蜂鸣器等等,以及其余比较零碎的模块,都采用此IC进行供电。
▲ 图3.1 电源管理IC的选择
3.1.2 电机驱动模块
电机驱动电路为一个由分立元件制作的直流电动机可逆双极型桥式驱动器,其功率元件由四支 N 沟道功率 MOSFET 管组成,额定工作电流可以轻易达到 100A 以上,大大提高了电动机的工作转矩和转速。该驱动器主要由以下部分组成: PWM信号输入接口、逻辑换向电路、死区控制电路、电源电路、上桥臂功率 MOSFET 管栅极驱动电压泵升电路、功率 MOSFET 管栅极驱动电路、桥式功率驱动电路、缓冲保护电路等;专用栅极驱动芯片通常具有防同臂导通、硬件死区、欠电压保护等功能,可以提高电路工作的可靠性。由于分立的N沟道MOSFET具有极低的导通电阻,大大减小了电枢回路总电阻。另外,专门设计的栅极驱动电路可以提高MOSFET的开关速度,使PWM控制方式的调制频率可以得到提高,从而减少电枢电流脉动。并且专用栅极驱动芯片通常具有防同臂导通、硬件死区、欠电压保护等功能,可以提高电路工作的可靠性。
基于以上原理,我们选择经典的电机驱动H桥,驱动芯片选择HIP4082,升压芯片选择MC34063,NMOS选择IR7843,电机驱动性能适中。电机驱动电路如图3.2所示。
▲ 图3.2 电机驱动电路原理图
3.1.3 模数转换模块(ADC)
ADC模块的用处为将电感采集的模拟信号转换为数字信号,以便主控认知电感值,由于RT1064内置ADC模块,因此我们只需将运放放大后的值接入对应引脚即可,但值得注意的是,我们使用的运放是轨对轨运放,供电电压过高会导致输出给芯片ADC口的电压超过其电压耐受值,导致击穿主控芯片,而且就算不是轨对轨运放,也应根据电感采值设置好相应的增益值,否则一旦超过ADC口耐受电压,尤其是对主控芯片昂贵的,后果难以接受。
3.1.4 单片机及其他电路部分设计
核心控制单元:MI.MX.RT1064。
▲ 图3.4.1 主控芯片核心板及使用到的引脚
- 运算放大器
运算放大器往往配合电感一起使用,在智能车控制中主要负责赛道元素识别等任务。
▲ 图3.4.2 运算放大器单路电路
主控板所有接口展示:
3.2 智能车传感器模块设计
根据竞赛组委会的相关规定,我们选用电磁传感器和摄像头,电磁传感器的应用首先在于选型,为了找出适合的电磁传感器,我们查阅了许多的产品资料,进行了大量的电感测试,发现只有在10mH电感中,得到感应电动势曲线是较为规整的正弦波,频率和赛道电源频率一致,为20kHz,幅值较其他型号的大,且随导线距离变化,规律为近大远小。其他电感得到信号不好,频率幅值变化杂乱,不宜采用。而对于摄像头传感器,道路识别和元素识别采用基于MT9V034的总钻风摄像头,而识别动物水果和数字,以及二维码,是使用基于MI.MX.RT1064的Open-ART。
3.2.1 电磁感传感器的原理
根据电磁学,我们知道在导线中通入变化的电流(如按正弦规律变化的电流),则导线周围会产生变化的磁场,且磁场与电流的变化规律具有一致性。如果在此磁场中置一由线圈组成的电感,则该电感上会产生感应电动势,且该感应电动势的大小和通过线圈回路的磁通量的变化率成正比。由于在导线周围不同位置,磁感应强度的大小和方向不同,所以不同位置上的电感产生的感应电动势也应该是不同。据此,则可以确定电感的大致位置。
3.2.2 电磁传感器信号处理电路
确定使用电感作为检测导线的传感器,但是其感应信号较微弱,且混有杂波,所以要进行信号处理。要进行以下三个步骤才能得到较为理想的信号:信号的滤波,信号的放大,信号的检波。
1)信号的滤波
比赛选择20kHz的交变磁场作为路径导航信号,在频谱上可以有效地避开周围其它磁场的干扰,因此信号放大需要进行选频放大,使得20kHz 的信号能够有效的放大,并且去除其它干扰信号的影响。使用 LC并联谐振电路来实现选频
▲ 图3.2 LC并联电路
其中,E是感应线圈中的感应电动势,L是感应线圈的电感值,R0是电感的
内阻,C 是并联谐振电容。电路谐振频率为:
已知感应电动势的频率f=20kHz,感应线圈电感为L=10mH,可以计算出谐振电容的容量为C=6.33×10-9 F 。通常在市场上可以购买到的标称电容与上述容值最为接近的电容为 6.8nF,所以在实际电路中选用 6.8nF的电容作为谐振电容。
四.软件设计
4.1图像处理及边界提取
4.1.1赛道巡线算法的选取
我们最开始的巡线方式是传统的巡线方式,搜每一行的跳变点,从左至右,从上至下。但是随赛道的元素的增多和非赛道杂物的影响,使得需要排除的干扰信息和需要的信息显得难以舍去。虽然之后经过努力可以勉强识别和区分,但是代码以及变得冗杂,条件变多的后果导致自己也开始捋不清了。于是开始另辟蹊径,开始去尝试其他方式。通常在进行边缘检测之后,需要通过边缘跟踪来将离散的边缘串接起来,常使用的方法为:边缘跟踪和区域生长两种方法。边缘跟踪又分为八邻域和四邻域两种,我们最终决定是采用像素点经过二值化之后根据八邻域算法去搜寻边界点的生长方向,一个点一个点的去遍历边界。
在最初边界点p0位置时,按照逆时针方向搜素当前像素p0为中心的3*3领域,从以下方式的方向开始寻找。八领域方向如图4-1-1所示:
▲ 图4-1-1:八领域方向
设在数字化网格平面的形状是封闭的,且只有一个连通的区域,这个连通的区域在二维 数组中用 1 (白色) 来标记,其余的数组元素用 0 (黑色) 来标记。算法中的坐标与程序中的 二维数组的下标对应。
Step 1. 对数组进行逐行查找,找到由数字 1 表示的封闭图形的最上端一行的最左边一 个点(其数组行下标应该是最小的),用 P0 表示。P0 是边界跟踪的起始点。如图5-1-2所示。定义变量 dir 表 示上述“关于方向码的概念”中的 8 个方向,所以 dir 的取值范围是 0,1 … 7 ,注意,后面 的计算过程,有 dir 对 8 的模(求余)运算。
▲ 图4-1-2:起始点及要遍历的连通域
Step 2. 按逆时针方向顺序依次判断当前点(一开始为 P0点)的8个是否为 1,开始的 邻居号为:
(dir+7)mod8如果当前的dir为偶数;即下一次搜索的方向是当前方向按顺 时针方向旋转45°。
(2(dir+6)mod8如果当前的dir为奇数;即下次搜索的方向是当前方向按顺时 针方向旋转90°。按上述的逆时针方向找到的第一个为1的点为找到的新的边界,记为Pn,并更新dir值(以当前找到为 1 的点为最后更新的dir 方向)。按上述的逆时针方向找到的第一个为 1 的点为找到的新的边界,记为 Pn,并更新dir值(以当前找到为 1 的点为最后更新的dir方向)。P0的八领域与八个方向对应的坐标位置如图4-1-3所示。
▲ 图4-1-3:八领域对应的坐标位置
Step 3.如果当前的边界点Pn的坐标等于找到的第2个边界点P1的坐标,而且它前一个边界点Pn-1的坐标又与起始点P0坐标相同,则算法结束。否则,重复Step 2.
Step 4.封闭形状的边界跟踪结果则为上述步骤记录的 P1,P2,P3 ….Pn-1 的坐标,或者是上述过程中保存的dir值。
4.1.2 图像边界提取
摄像头图像处理部分系统流程图如图4-1-4所示。
▲ 图4-1-4:图像处理系统流程图
本组别需要判断并处理的赛道元素主要包括三岔路口、十字路口、以及车库等。在每一次八领域遍历的时候,每一个点逆时针判断边界的生长方向并记录,在遍历边界点的时候,为防止意外情况卡死程序,一般限制最多遍历300个点便可遍历外整个边界。我们主要是四个像素点为一组,四个像素点可决定最下方边界像素点的信息。用三个八进制数组(Growth_Direction_Ary[3])来储存改点的位置信息,例如图5-1-5所示,设方框形状为赛道边界像素点,以黑色X为记录点,按照八领域生长方向查询此处的赛道信息。当索引到2为边界的时候,更新X位置到2(红色X)为新的记录点,此时Growth_Direction_Ary[0]=2,再次按照八领域生长方向索引新的边界信息,此时,生长方向为1为边界,Growth_Direction_Ary[1]=1。再次更新新的记录点。Growth_Direction_Ary[2]=1。此时最初黑色X点的生长信息就为Growth_Direction_Ary[3]={2,1,1},该像素点的信息就为 。并且记录第一个的生长方向curr_d为2。
▲ 图4-1-5:四个像素点为一组的位置信息
4.1.3 赛道元素的判别
以四个像素点为一组,然后对其形状进行分类,综合边界上每一组的种类及其对应数量就可以将赛道元素分别出来。也可以通过这样的特征组来作为标志点进行元素的补线处理。
4.1.4 赛道中线的提取
当边界遍历完成时,十字补线之类的需要补线的元素可根据遍历出的上下拐点信息直接相连,便可得到完整的赛道信息,之后可通过一定的算法计算出赛道的中线,由 PD控制算法的思想,我们正利用小车的图像中心与赛道的实际中心的偏移量来控制舵机的转动和电机的驱动力度。具体补线和提取中线的代码可看附录软件部分。
4.2 openart
二者使用串口相互通信。单片机发送不同的指令让openart来执行Tag码识别,数字识别,动物水果识别,标靶定位等任务。
4.3电机控制部分
在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制, 简称 PID 控制,又称=PID =调节。PID控制器问世至今已有近 70 年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用 PID 控制技术最为方便。即当我们不完全了解一个系统和被控对象,或不能通过有效的测量手段来获得系统参数时,最适合用PID 控制技术。PID控制,实际中也有 PI和PD控制。
PID控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差。将偏差的比例§、积分(I)和微分(D)通过线性组合构成控制量,对被控对象进行 控制,故称PID控制器,原理框图如图5-3-1所示。
▲ 图5-3-1 PID 控制器原理框
五. 系统开发与调试
5.1软件开发工具
程序开发在KEIL下进行,包括源程序的编写、编译和链接,并最终生成可执行文件,KEIL是一个完整的嵌入式应用开发工具链。它在一个易于使用的集成开发环境中提供了高性能的编译器和调试器。Keil是德国知名软件公司Keil(现已并入ARM 公司)开发的微控制器软件开发平台,是目前ARM内核单片机开发的主流工具。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器在内的完整开发方案,通过一个集成开发环境(uVision)将这些功能组合在一起。uVision当前最高版本是uVision5,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。因此很多开发ARM应用的工程师,都对它十分喜欢。其调试界面图如下:
▲ 图6.1 软件调试界面
5.2硬件开发工具
硬件在ALtium Designer 中进行设计与布局, Altium Designer是Altium 公司推出的一体化的电子产品开发系统,软件通过把原理图设计、电路仿真、 PCB 绘制编辑、拓扑逻辑自动布线,信号完整性分析和设计输出等技术的完美融合,为我们提供了全新的设计解决方案,使我们可以轻松进行设计,复杂的电路板布局 Altium Designer 都可以非常很容易地设计出有效无误的 PCB 板。同时可以进行文档输出与分享,凭借强大的布线技术,以及丰富的元件库,使用者很方便的完成硬件方面的制作。可以让我们做出属于自己的PCB板。Altium Designer 有一个十分好用的功能就是文件变更自保存功能,强大的数据管理工具,掌控使用者的设计数据和工作流程。使用灵活的生命周期管理系统,可以精确地控制设计数据;使用强大的版本控制系统,可以跟踪每一个设计变更。其开发页面如下:
▲ 图6.2硬件开发界面
5.3按键,显示屏调试工具
在调试过程中为了提高效率,一些小工具必不可少。对于 PID 和其他参数调节,我们采 用按键加 OLED 屏幕显示来调节。液晶屏、按键、拨码开关调试
在小车的调试过程中需要不断地修改变量的值来达到整定参数的作用,对此我们选用了液晶配合按键和拨码开关的调试方法。此外,比赛的时候,修改参数我们同样用这个模块进行修改。液晶我们选用OLED液晶。界面如图6.3所示:
▲ 图6.3液晶界面
六. 总结
自从报名参加“第十六届全国大学生智能车竞赛”,我们小组从开始的查阅资料、分工合作、设计结构、组装车模、编写程序、赛道调试,经历了已经记不清的夜晚,最终确立了现在的初级目标,实现了我们的成果,现在回想起来,就感觉就一个字“值”。
最开始,我们不断地查找资料,开始对整体的计划开始构思,就像老师所说的发现问题,然后提出问题、分析问题、解决问题,这样不仅让我们自己解决了问题,能够让我们在以后遇到问题时不会慌乱无章,能够有序的处理问题,给我们的人生以后的路有很大的启发。车模结构的搭建花了我们很长时间,我们需要考虑各种因素,比如说对于直立车的机械零点的选择、对于三轮车重心的选择、各个传感器的安装选择、电池的安装,所以我们搭建车模搭了好几次,再不断地实验中,我们搭出了现在的车模。在软件的方面,我们对于每一个细节都需要考虑到位,有时候会因为一个小的问题造成失误,有时我们也会在某一方面钻进死胡同等等,这都是我们经历过的,现在想一想,多亏当时坚持了下来,才有了现在的结果。接下来就是不断的调试,在这过程中我们也发现了许多的问题,并且随着赛道元素多元化,我们需要解决的不只是几个问题,也许是许多问题搅成一团麻,让我们无从下手。经过真的是记不清的夜晚,我们一遍一编的梳理我们的程序,调整我们的参数,改变我们的方法,不知不觉就在忙碌的生活中迎来了比赛,当我们的赛车冲到终点的时候,我们无比激动,但我们也十分坦然,激动的是我们再一次的证明了我们,不负年华,不负期望。坦然的的是我们辛苦的付出,所有回报就是从我们的汗水中而来。
在此,感谢我们的团队,共同的努力,也感谢那无数的日夜。从中我们学到了很多,不仅是从学习上,我们学到的可能会影响我们一生,对以后生活上的方方面面起到了很大的作用。”路漫漫其修远兮,吾将上下而求索”,我们将不断努力,继续前进,取得佳绩。
参考文献
[1].童诗白,华成英.模拟电子技术基础[M].北京:高等教育出版社, 2000
[2].阎石.数字电子技术基础[M].北京:高等教育出版社,1998
[3].周立功.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2008
[4].邱关源,罗先觉.电路[M].北京:高等教育出版社,2006
[5].潘新民,王燕芳.微型计算机控制技术[M].北京:电子工业出版社,2003
[6].王日明,廖锦松,申柏华.轻松玩转ARM Cortex-M4微控制器—基于 Kinetis K60[M].北京:北京航空航天大学出版社,2014
■ 附录 部分程序源代码
int main(void)
{
DisableGlobalIRQ();
board_init(); //务必保留,本函数用于初始化MPU 时钟 调试串口1的初始化,所以其他地方不用再初始化串口1了
systick_delay_ms(300); //延时300ms,等待主板其他外设上电成功
init_all();
mt9v03x_csi_init();//初始化摄像头 使用CSI接口、
// gpio_init(B23, GPO, 1, GPIO_POUT_CONFIG);
// pwm_init(PWM1_MODULE3_CHA_D0, 13333,0);//电机
// pwm_init(PWM1_MODULE3_CHB_D1, 13333,10000);
// pwm_init(PWM2_MODULE3_CHA_D2, 13333,10000);
// pwm_init(PWM2_MODULE3_CHB_D3, 13333,0);
EnableGlobalIRQ(0);
if(gpio_get(C22)==1){
Variable_Init();
ips114_showint8(190,0,1);
}
if(gpio_get(C23)==1){
Variable_Init_1();
ips114_showint8(190,0,2);
}
if(gpio_get(B10)==1){
Variable_Init_2();
ips114_showint8(190,0,3);
}
// if(gpio_get(B11)==1){
// Variable_Init_3();
// ips114_showint8(190,0,0);
// }
Expect_V_Base=0;
while(gpio_get(C3)==1){
Expect_V_Base=0;
}
//
systick_delay_ms(500);
Image_Differ=56;
Servo_Out();
Expect_V_Base=110;
systick_delay_ms(350);
Out_Garage_Flag=false;
Expect_V_Base=set_speed;
// if(gpio_get(B10)==1){
// if_show_1=true;
// }
if(gpio_get(B11)==1){
if_show_2=true;
}
while(1)
{
if(mt9v03x_csi_finish_flag){
if(if_Otsu){
Threshold=Otsu(mt9v03x_csi_image[0],COL,ROW);
}
image_variable_init();
uint8 Valid_Row_L=SaoXian_Left(L_Start_Point.col,ROW-1,30,COL-1,0);
uint8 Valid_Row_R=SaoXian_Right(R_Start_Point.col,ROW-1,30,COL-智能车竞赛技术报告 | 智能视觉组 - 北京科技大学智能视觉组
智能车竞赛技术报告 | 智能车视觉 - 中南林业科技大学 - 弃车人队
智能车竞赛技术报告 | 智能车视觉 - 三江学院 - 识别不别