智能车视觉 - 首都师范大学 - 首师智能视觉
扫描二维码
随时随地手机看文章
简 介: 本文主要介绍了第十六届智能车竞赛智能视觉组别参赛车模的相关设计思想。此四轮车模使用C型车模、RT1064作为核心控制单元。利用总钻风灰度摄像头采集的图像数据进行基本循迹和元素识别;利用OPENART mini进行部署神经网络模型进行图像分类识别;利用PID控制调节电机的输出,达到对车模速度的闭环控制。为了提高模型车的速度和稳定性,使用山外调试助手、匿名上位机等软件硬件进行了大量调试测试工作。实际调试结果表明,该系统设计方案确实可行。学 校:首都师范大学关键词
: RT1064,电路设计,传感器,摄像头循迹,机器学习,PID控制
队伍名称:首师智能视觉
参赛队员:李秉蔚
王琪
陈翔宇
带队教师:张盛博
第一章 引言
全国大学生智能汽车竞赛是以立足培养、重在参与、鼓励探索、追求卓越为指导思想,鼓励创新的一项科技竞赛活动。智能视觉组别要求在规定的汽车模型——C型车模上,使用NXP公司的微控制器作为核心控制模块,通过增加道路传感器、电机驱动模块以及编写相应控制程序,制作完成一个能够自主识别道路的模型汽车。特别地,智能视觉组别还加入了图片识别分类的赛题任务,要求参赛选手不仅要完成赛道组的元素,还要对固定位置处的图片标靶进行识别并完成相应的动作任务,于我们来讲是一项难度不小的挑战。 在这份报告中,我们小组通过对小车设计电路制作、机械结构、电控算法的介绍,详尽地阐述了我们的思想和创意,具体表现在硬件上的创新设计,以及软件上的独特想法,凝聚着我们的心血和智慧。此次备赛过程中,我们在付出了艰辛的努力劳动去调节软件中算法与参数,调节车模机械结构和电路板焊接测试等工作。我们小组的三位组员相互配合,分别涉及了控制、传感器技术、AI识别、电工电子技术、计算机、机械等多个学科,这对我们的知识融合和实践动手能力的培养有极大的推动作用。当然由于准备时间有限,我们的方案还有许多不足之处,在比赛中还暴露出了很多问题,这些问题会在我们学习更多专业知识、掌握更多经验后,在未来逐步解决。第二章 电路设计
我们车上有三块电路板:负责所有控制、为各种元件提供电源,带有各种接口的主板;负责电机驱动的驱动板;负责收集电磁信号,带有电感的电磁棍。2.1 主板(PCB35221)
2.1.1 核心板
在我们车上直接用的是逐飞科技所给的核心板。2.1.2 电源部分
我们车上的传感器和器件需要不同电压的供电:单片机,摄像头,屏幕,蜂鸣器,按键,拨码开关,按键扩展板,五轴按键等器件需要3.3V电压;编码器,无线串口,有线串口等需要5V电压;舵机需要6V电压。故为了满足不同器件的需求,我们采用多个电源芯片供电。 电源由XT30接口接入,在通过一个470mF电解电容滤波后,经过主电源开关,再通过电路保护后,输入给电源芯片。 由于RT1064有上电时序问题所以先要给核心板进行供电,才能对外设进行供电,核心板支持5V和3.3V供电,我用的是5V供电,使用ME6118(5V)将输入电压转为5V,给核心板上电。 由于舵机供电需要6V,而且外设供电要求晚于核心板供电,所以我选用TPS54302输出6V。1脚接地,2脚为输出电压,3脚接输入电压,4脚接反馈电阻,通过反馈电阻的分压值来确定输出电压的大小,5脚用来对TPS54302一反面进行开关控制,另一方面是为了在CR引脚为低时让TPS54302的电平为低,因为TPS54302的EN引脚有电压限制所以并联电阻分电压,6引脚接一个0.1uF 的陶瓷电容与SW脚相隔。 分别使用RT9013和ME6118解决除摄像头外的3.3V和5V用电器的供电问题。 由于摄像头属于金贵器件,为保护摄像头,使其供电尽可能正常所以特别用一个单独的电源芯片为其产生电压。我这里使用的是RT9013。2.1.3 接口部分
车上所有的传感器和模块需要连接到主板,我们的主板上设置了这些传感器和模块所需的接口。 因为舵机、摄像头和激光都在车的前部所以把它们放在主板的前面,所有的开关都放在板子的外侧,因为电机和编码器电池都在车的后侧所以把编码器、电机信号和电源输入都放在了主板的后方2.1.4 辅助调试部分
为辅助调试,主板上设计有4个LED作为电源指示灯,指示电源芯片工作状态,当他们不正常熄灭时应立即断开电源;此外还有1个RGB灯,1个有源蜂鸣器用于辅助调试。2.2 电机驱动板(PCB35221)
2.2.1 电机驱动双桥模型
电机驱动的核心部分由IR2104半桥驱动芯片和LR7843MOS管组成,IR2104的1脚接VCC12V,2脚为PWM控制信号输入,4脚接地,5脚为LO为低输出,其输出信号与输入信号反相,幅值加大为20V,7脚HO为高输出,其输出信号与输入信号同相,幅值加大为20V,3脚SD为使能,接地时输出为低。 LR7843为N沟道增强型场效应管,其1脚为G级,2脚为D级,3脚为S级,当G级与S级有一个正电压时,D级与S级会导通。故将控制信号接G,电池和电机分别接到D和S级,即可用控制信号控制电池与电机间的通断,从而实现驱动电机的功能。 RT1064输出的PWM信号进入电机驱动板后,经过IR2104后变成了两个幅值为20V的方波,其中一个与最开始的PWM信号同相,另一个反相,这两个信号分别接入其后的LR7843的G级,分别控制电机的一个引脚与电池正或电池负的通断,由于两个控制信号反相,所以当电机引脚和电池正极被导通时,与电池负极会被断开。以上一个IR2104控制两个LR7843驱动电机的一个引脚为一路,我们的电机驱动板上一共有这样的四路,从而可以控制两个电机以不同转速正反转。 需要注意的是,MOS管的D、S级与电池、电机间的连线会有很大电流流过(尤其是在电机不正常运行时,如:堵转)(超过3A),故建议这些线越粗越好。2.2.2 隔离模块
使用74hc245进行信号隔离,当OE脚接低电平时信号导通,当OE脚接高电平时信号不导通,这取决于DIR引脚是高电平还是低电平2.2.3 电压转换模块
在驱动板中74hc245需要5V的电压所以需要进行电压转换为5V, 而IR2104芯片和LR7843MOS管需要12V电压,可以使用B0512对5V电压转换为12V。2.3 电磁传感器(PCB35710)
我们使用了五组由10mH电感和6.8nF电容并联组成频率约为20kHz的谐振电路,可以感应出几十mV的正弦电压信号,用放大电路对该信号进行放大检波将其转换为直流电压,用ADC读取该电压以计算赛道中线位置。2.4 陀螺仪加速度计
我们使用FXAS21002陀螺仪和FXO8700加速度计作为姿态传感器。2.5 调试和比赛过程中发现的电路部分的问题
第三章 机械结构
3.1 车模
此次竞赛的四轮赛车车模选用C1型车模。3.2 云台
为了方便OPENART mini对图片进行识别并对水果进行打靶,在车的前部使用了自主设计的云台,在固定了OPENART mini的高度后使用一个舵机,实现使OPENART mini在车的舵机上方可以左右的转动,从而可以较好的完成比赛任务。第四章 微控制器控制
4.1 开发工具及模块功能库
针对本组采用的NXP i.MX RT1064芯片,我们使用了主流的Keil uVision5(5.28)作为微控制器软件开发工具,搭配逐飞科技提供的DAP-Link下载编程烧录器进行程序烧录。在获取相关资料后,在Keil中安装该芯片的Pack包即可完成软件开发环境的搭建。 我们参考了逐飞提供的各功能模块的范例程序和库函数,并将库函数整理成实验室通用函数,符合个人的编程习惯,提高使用效率。4.2 PID控制原理
4.3 基于摄像头的赛道信息检测
我们采用总钻风灰度摄像头进行图像获取,通过软件二值化的方法来获取图像中的轨迹特征。根据阈值选取的不同,二值化的算法分为固定阈值和动态阈值。 固定阈值的二值化,一个阈值往往只对应一类图像,如果图像的光照变暗了,或者其他因素改变了,那个单阈值情况的二值化效果会大打折扣,其适应性很低。动态二值化是根据图片的灰度直方图,得到一个适合本图像的二值化阈值,显然这种方法得到的阈值是适合实时的图像的,但也随之带来了对整幅图像数组进行计算的要求,若调教不好,则会每处理一张图片耗费过长时间,影响整个程序的效率。 二值化方法我们尝试了大津法和均值法求阈值。对比两种方法,大津法确实能够在光线均匀的情况下有很好的表现,能够很好提取出赛道特征,但是在赛道的某些部分由于光线或背景干扰,因该方法计算图像前景和背景求类内方差的原因,对灰度分布不均匀的情况下表现很差。且该方法是通过比较类内方差最小来获得最好的阈值,因此在没有优化过的该方法是耗时的且普适性较低的。而均值二值化是求取整个图像的像素点,进行相加然后求平均值获得的阈值,他的计算显然要节省很多,并且效果较优。若在过亮过暗背景下,可通过直接在求得均值后加或减OFFSET_AVE来进行调整即可。 我们直接获取的图像大小为188120,经过处理压缩获得图像大小为8260。首先,是在对图像的保真影响很小的前提下,通过在原获取图像上每两个像素点取一个像素点进行压缩,压缩后的图像数组的减小可以提高程序的运行效率。其次,为了解决采集图像不正的问题,经过测试,82*60图像最为居中,在取列时进行缩减,来保证图像的对称,方便处理。4.4基于摄像头的基本循线
对于基本循线来讲,我们采取了最普通的搜线方式,通过上一行中点的列坐标向左向右进行搜线,寻找黑白色跳变点,找到左右边线后即可计算出新中点的坐标。我们通过当前中值上方为黑且没顶格的规则来判断有效行,该检测规则对于弯道与直道都适用,能够在一定程度上避免赛道外的图像对我们的处理造成影响。 在方向环控制中,将求取的各行中线纵坐标与图像中值的偏差参与方向环PD的控制计算,通过系数的整定来确定舵机的转向打角。根据车模运行速度的不同,我们所取用参与计算的图像行也不同,低速运行的车模取用图像靠下部分的权重较大,在提速后,对于前瞻性的要求更高,则需要在偏差计算中将图像上方的权重增加,让车模在过弯时较早响应并转向。4.5 基于摄像头的特殊元素处理
4.5.1 十字处理
由于摄像头的高度较高,车模在以斜入十字的姿态下通过十字元素的时候可能会左转或右转,所以必须要对十字进行特殊处理。 最初,对十字处理的方式比较粗暴,由于过十字时会先远处行两侧丢线,这时直接将近处未丢线行的中线直接复制到远处丢线行。当近处行都丢线时,在将远处未丢线行复制到近处行。但是,这就存在着一个问题,当十字接弯道时,十字中补到的线就会偏向一侧。因此最终这个方法没有被采用。 另外一种则是在检测到十字标志位时,则去找到左上左下、右上右下的拐点,记录四个拐点的横纵坐标,将左右两侧的拐点分别拉线即可补出线来,经测试该方法效果较优。4.5.2 车库处理
车库元素的解决相对简单,只要在几行检测到多个跳变点即可。但是在本赛题内的赛道中会贴有AprilTag码,其在几行内的跳变点和斑马线的特征相似,误判两个赛道元素会导致在斑马线处停车、车模运行几周的计数错误等问题出现。由于斑马线相较于车库,车库的一侧无黑色边线,因此需要通过该特征进行区分,在车库的判断中加入有多个跳变点的一行的一侧丢线、一侧不丢线的判断条件加以限制。4.5.3 三岔处理
判断三岔赛道元素采用三个条件同时判断来避免和其他赛道元素误判,条件一是找到左下拐点和右下拐点,条件二是上方某两行左右皆丢线,条件三是图像上方黑点数大于某个值。只有这三个条件同时成立时,方进入三岔标志位。4.5.4 环岛处理
我将整个环岛处理为一个状态机,该方案计算量较小,但是该方案为流程化方案,若在判断过程中有一个步骤意外出错都无法正确判断为环岛入口,将导致车模无法入环甚至冲出赛道。 如上图,我们进入环岛的方案分为多个标志位进行判断,必须在上一个标志位判断完毕后再进入下一个标志位。 以找到右环岛为例,找到右下拐点且找到弧形的拐点用来判断确认该元素为环岛,将找到的弧形拐点和右下的拐点记录下来,将两个点进行补线,并且标志位置1,开始进入状态机判断;当找到右下的弧形拐点且右上有拐点时,环岛标志位置2;当赛道宽度减小,左右两侧皆不丢线,环岛标志位置3;当检测到某几行左右两侧皆丢线时,标志位置4,在该标志位下,左边不再丢线且找到右上拐点时,将右上拐点与弧形拐点或者与屏幕右下的像素点进行拉线,在两侧边线恢复正常后,清标志位,出环岛。4.6 基于OPENART mini的AI视觉任务实现
4.6.1 识别方案及技术路线
4.6.2 人工神经网络
① 数据采集及分析
数据集通过OpenART mini采集,提供模型训练时所需要的训练集、验证集和测试集。② 模型的搭建及训练
完整的卷积神经网络先通过几个卷积层(conv) 和池化层(pool) 处理,然后再由几个全连接层(fc) 进行处理。- 离线训练:采用由Python编写的开源人工神经网络库Keras进行搭建模型,其是一个高级神经网络API,能够以Tensorflow作为后台运行。
- 在线训练:EDGE IMPULSE平台