基于摄像头的自主循迹智能小车系统的设计_第1页
基于摄像头的自主循迹智能小车系统的设计_第2页
基于摄像头的自主循迹智能小车系统的设计_第3页
基于摄像头的自主循迹智能小车系统的设计_第4页
基于摄像头的自主循迹智能小车系统的设计_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于摄像头的自主循迹智能小车系统的设计学号:10804020311姓名:梁相宾指导老师:郝建军时间:2011.62011.7目录第一章 引言4第二章 智能车硬件设计52.1机械设计52.1.1前轮定位52.1.2 后轮差速机构调整52.1.3 摄像头的安放位置,高度及重心62.2硬件电路设计62.2.1 电源电路62.2.2视频图像电路82.2.3电机控制电路92.3小结11第三章 控制算法的研究123.1 智能车控制思想123.2 图像处理与赛道识别123.3 智能车系统软件123.3.1 智能车系统软件设计思想123.3.2 软件构成133.4 创新点153.5 小结15第四章 程序开发和调试164.1 软件开发环境164.1.1 CodeWarrior IDE164.1.2调试器174.1.3 串口调试软件18第五章 总结205.1 智能汽车技术指标205.2 目前尚存在的不足与改进方向20附录 部分程序清单第一章 引言在第五届“飞思卡尔”杯全国大学生智能车比赛中,我们采用面阵CCD作为路面检测信息的传感器,以飞思卡尔16位微控制器MC9S12XS128作为核心控制模块,引导改装后的模型汽车按照规定路线行进。整个智能汽车制作过程中,我们主要做了以下工作:1、硬件平台的搭建:首先对模型车进行了机械部分的改造和调节,在不违反大赛规则的前提下对舵机进行了机械方面的设计和研究,一定程度上提高了舵机的灵敏度。在硬件电路方面,精心设计了CCD图像采集和驱动电机电路;同时,为了调试方便和根据场地等外界环境需要,设计了人机交互的键盘输入和LCD输出硬件电路,并且加入了无线调试的硬件接口电路。2、软件平台的搭建:在软件设计方面我们搭建了无线调试平台,主要包括无线视频模块和无线数据传输模块两部分。前者提供CCD获取的图像信息,可以录制智能车在赛道上的图像信息,便于分析研究控制算法;后者通过无线串口收发器发送的指令,执行转向及车速控制。无线调试平台不仅给程序调试带来了很多方便,可以在计算机上调试各种控制算法的性能,还保证了赛车在调试过程中的运动轨迹的可控性。3、控制算法的研究:通过对CCD图像传感器所摄取的路面图像进行处理,从而获得准确的赛道信息。同时,在PC机上搭建了控制算法仿真平台,可以把设计好的图像处理算法和控制算法先在PC机进行模拟,待模拟成功后再移植到MC9S12XS128单片机中去。我们编写的基于PC机的控制算法仿真软件可以直观的模拟智能车在不同赛道的运行情况,通过改动相关参数,就可以方便、直观的观察智能车运行效果。第二章 智能车硬件设计2.1机械设计 车模结构的好坏是小车运行动平稳,拐弯流畅的基础。任何好的算法和软件程序都需要有一个完整的系统来执行,以便达到预期的结果。小车结构包括:前轮定位;后轮差速机构调整;重心位置的调整,小车摄像头的安放位置,高度等。 2.1.1前轮定位 车轮定位主要参数包括:主销后倾,主销内倾,车轮外倾和前束。在车模调整过程中发现,使其前轮略微前束,其余倾角调整保持在13之间。能够使小车在正常行驶过程中直道行驶平稳,拐弯轻便流畅。在华北赛区调试小车时,发现赛道摩擦系数比我校赛道的摩擦系数大,因此小车在拐弯(九十度以上)时,前轮有明显的跳动现象,小车速度越快越明显,严重影响了拐弯的效果及稳定性(小车的前轮前束过小导致)。通过调整加大前轮前束角,可消除拐弯时前轮跳动现象。2.1.2 后轮差速机构调整 差速机构的作用是:在车模转弯的时候,降低后轮与地面之间的滑动,并且可使车转弯时阻力更小。车模右后轮轮轴轮处装有差速器。 当车辆转弯时,内外两侧车轮的转弯半径明显不同,车轮不打滑的前提就是两侧车轮转速不同。在摩擦力的作用下,差速机构发挥作用,使两侧车轮都能与地面无滑动的转动,这对于保持车身的稳定性十分重要,同时也能减小轮胎的磨损。由于车模使用的差速机构是由滚珠组成,在两端预紧力较小时,差动效果较好,但齿轮容易与车轴间打滑,影响速度控制以及加速的响应速度,尤其是小车在瞬间加速时发现差速器有空转现象;如果两端预紧力过大,则又使差速效果很差。在调整差速机构的预紧力时,应该使其大小合适,既不会影响速度又不会使差速失效。经过反复试验最佳的差速为:将小车置于赛道上按住其中的一个轮子不动,拉动小车沿按住的轮子方向转弯另一轮胎在跑道上半滑动为佳,松紧合适。2.1.3 摄像头的安放位置,高度及重心 汽车重心指汽车重力的作用点,其位置的改变会影响汽车的动力性,制动性,操纵稳定性,平顺性,通过性和舒适性等重要特性。通过参阅相关文献和测试得出:重心靠近后轴,对车模的动力性能有益;重心靠近前轴,对车模的制动性和操纵稳定性有益。车模所需要达到的最快车速也远没有现实中那么高,只有4m/s。所以在安装传感器、CMOS 摄像头、电池和电路板时,都尽量布置于车身中间略靠近后轴。2.2硬件电路设计除了大赛提供的MC9S12XS128开发板以外,硬件电路主要分为四部分:CCD传感器部分;MC9S12XS128开发板扩展板部分;电机驱动部分。电源电路2.2.1 电源电路硬件电路的主电源由7.2V的蓄电池提供,而由于电路中不同模块的工作电压和电流容量各不相同,因此需要将电池电压转换成各个模块所需电压。CCD图像传感器是采用12V工作电源,该电压由MC34063提供。MC34063芯片转换效率高,升压的范围也比较广,所需的外围器件也较少,最大能够提供1.5A的电流,足够CCD使用。S12最小系统板等数字电路需要稳定5V电源,选用了LM2576作为稳压芯片。当输入大于7V时,输出电压稳定在5V上。当输入电压小于7V时,输出电压比输入电压低2V。本系统的电池电压为7.2V,而控制系统要求输入电压范围为50.5V。所以,即使电池电压下降到6.5V,系统依然可以继续工作。而且该芯片最大的优点就是转换效率高,线形度好。2.2.2视频图像电路图像采集器件使用的是模拟输出的CCD传感器,主要采用同步分离芯片LM1881。将视频信号通过一个电容接至LM1881的2脚,即可得到控制单片机进行A/D采集的控制信号:一行同步BURST与奇偶场同步信号O/E。需要注意的是,CSO信号中的上升沿表示一行视频信号的开始,而BURST信号中的下降沿也表示一行视频信号的开始,由于S12的IRQ输入端只支持低电平触发和下降沿触发,因此,应该使用BUSRT信号作为行同步信号。因此控制器视频采集的过程就是,将模拟信号转换为数字量,提供给控制程序使用。由于一行视频信息输出的周期只有约60微秒,如果使用S12内部的AD模块,时间是非常紧张的,一行的图像信息中能采集到的像素数会非常有限,因此图像信息的精度会降低,也就会影响最终的识别和控制。为此,我们对这一部分也做了精心的设计:采集高速AD芯片,由外部晶振控制其采集、转换的时间间隔,在约60微秒的行周期内采集两百多个像素点。大大提高了图像的精细度,为软件上的准确识别工作打下了很好的基础。以这样快的采集速度得到的图像信息,如果采用中断的方式进行读取,CPU将会非常频繁的进入中断,必然会影响其控制算法程序的正常运行。为解决这一矛盾,我们使用外部扩展存储器的方式解决这个问题。在电路设计中,我们扩展了一个线性的存储器,该存储器的数据输出连接到S12的外部扩展数据口,使S12工作在外部扩展模式。线性存储器的读写控制由S12输出的一个控制信号即可完成。经过这样的处理,整个图像采集的工作基本上已由硬件完成,MCU所做的工作只是在需要采集的行信号即将到来前,控制存储器完成信号数据的存储,存完这一行之后,控制存储器将数据输出,读出的操作只需申请一个外部变量,连续对其进行读操作即可。2.2.3电机控制电路电机控制从控制方法上可以分为开环控制和闭环控制两种。开环控制在用法上比较简单,只需考虑输出,不需要反馈信号,使用上比较简单,但是其缺点是速度控制的精度比较低,不能适应不同的赛道环境。另外一种为闭环控制,电机的速度控制信号输出由需要的速度和电机的实际转速二者决定,即需要对电机的实际转速进行采集和反馈。这种做法的好处是控制精度比较高,对赛道的适应性会好很多。通常情况下的电机转速的闭环控制,是通过软件的自动控制算法实现的,需要将电机的转速反馈给S12,通过软件上的自动控制算法,由需要的速度同实际的速度的偏差,给出纠正值,达到对速度的稳定控制。但是这样一来将会增加S12的负担。而我们的智能车利用CCD进行识别,使微控制器更多的关注图像的采集及处理是我们设计时一直注意的问题。因此我们在电机驱动电路上下了很大的功夫,最终确定了一种硬件的闭环控制方案。这种方案使用了测速发电机完成电机速度信号的采集。测速发电机输出的电压大小表征了电机的实际转速。这一电压同S12输出的PWM信号的积分值进行比较,由它们的偏差控制电机该加速还是减速。在电机驱动上,我们用MOS管作为分立元件搭建了H桥驱动电路。通过逻辑设计,可以让电机处于多种模式下工作,经过在赛道上对赛车进行试验,电机的加减速效果很好,完全可以满足赛车对不同赛道加减速的要求。本设计采用PWM直流脉宽调速,该方法有效地避免了串电阻调速其调速范围小,平滑性低的缺点,尽管也存在开关过渡过程损耗大,在供电回路中产生谐波等缺点,但可以通过合理选择开关频率等办法弥补不足。驱动芯片采用飞思卡尔半导体公司的半桥式驱动器MC33886。我们考虑以下三种方案:(一)使用单片的电机驱动芯片:实现简单,但驱动电流仅5A左右。(二)两片电机驱动芯片并联:驱动电流达10A左右。(三)由一片电机驱动芯片驱动CMOS全桥电路,最大驱动电流达75A左右。比较:使用一片驱动芯片MC33886驱动全桥电路,其驱动电流大,而且实现起来也不复杂,故而采用方案三,并使用双路PWM信号进行驱动。2.3小结在硬件设计方面,我们尽量做到可靠、高效,这样才能为整个系统提供一个良好的平台。 第三章 控制算法的研究3.1 智能车控制思想智能车的控制思想的核心就是:将传感器返回的赛道偏差,转换为正确的调整量实现在车辆的执行机构上。将核心延展成两个个部分。传感器偏差的读取与控制擦略。在这里,我们可以把传感器偏差的理解为基础,而控制策略可以理解成是上层建筑。下面我们将逐一叙述这两个部分。3.2 传感器偏差的读取摄像头为传感器来读取偏差主要具有以下几个特点:1.数据量大,干扰较多。2.偏差的种类较多。3.在时间上有场中断20ms的障碍,所以数据并不是在时间上连续。这些都是我们在调试程序过程中主要遇到的问题。下面是我们的解决方案。在黑线提取方面,我们采用的是双边缘法。既在图像不二值化的基础之上,进行双边缘检测。我们采集黑线的数据范围是每行60个点,一共采集28行。正常的黑线的特点是,具有双边缘切符合特定的宽度。这样在一行的处理上可以滤去一些砸点。接着是通过上下两行的连续性来判断数据的正确性。例如,本行采集的黑线位置为40,与上一行做差。如果差值大于10证明该点给砸点。这样通过二阶连续性的判断,基本上可以保证,采集出来的黑线是正确的。 这样采集的过程却忽略了起跑线,但在这个过程的基础上识别起跑线并不难。只需要将黑线宽度,放宽即可。既原来要求的范围是13。而起跑线的宽度,通过在线调试可以确定是1020。只要两个范围内进行起跑线和正常赛道的识别即可。还需要注意一点的就是,起跑线的识别通常采用的方法是双侧宽黑区加上中间的正常黑区。这样就要求车辆在直道上要非常的直,否则无法保证在一行黑线上会出现起跑线的图形。所以经过反复的实验,我们发现其实只要识别单侧的起跑线即可达到要求。既限制条件为:一块起跑线黑区,加一块正常黑区。再加上两块黑区之间的差值符合要求,即可判断为起跑线。通过实验表明,此方法可行。在弯道出完后马上遇见起跑线也可以完成识别。完成了起跑线和正常黑线的提取,可以说基本完成了赛道数据的提取。接下来要做的就是在提取的数据中,计算出车辆与赛道的偏差。 表示车辆的偏差有很多种,我们采取的基本策略是:偏差+赛道趋势=最后偏差。我们下面将着重叙述赛跑趋势的判断与偏差的选取。(1) 赛道趋势的判断 我们可以大致把三道分为以下几种情况:1.大弯。2.急弯。3.大s弯与小s弯。4.十字弯。 大弯通常指半径80以上的弯道,这种弯道要求车辆可以保持很高的速度,并且可以以较小的舵机调整量通过。鉴于这样通过特性,所以通常不用刻意去识别。大可以当做直道来跑。 急弯是比赛的要点和难点。并且急弯的类型比较多,有u型急弯,s型急弯,圆形急弯等。对于这种弯道的判断方法,我们主要采用的是差值判断。既行与行之间依次逐差。例如一组直道数据为biao27=30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30。逐差的结果就为0,既可以判断为直道。如果逐差的结果大于一个定值的话,既可以判断为急弯道。 大s弯和小s弯的判断相对复杂。在速度不达到一定情况之下,这个是没有必要判断的。但一旦车速上去以后,就会导致在S弯中超调,导致车辆的出轨。所以还是很有必要识别的。识别小S弯的方法和上面识别急弯的方法形同,也是用差值法进行判断,通常差值会很小(在线调试是找出这个阈值的很好方法)。而大S弯的识别就和摄像头的视野有很大的关系了,倘若摄像头无法看全整个S弯的话,识别起来会很复杂。如果能看全的话,识别方法如同小S弯。由于我们摄像头的视野范围所限和片内A/D的转换能力所限,我们的视野是不能看全一个S弯。所以我们识别的方法是,差值判断加上有效行判断。通常在S弯中差值会很大,这样就导致了赛车识别成弯道。但是S弯与普通弯道最大的不同既有效行数比普通弯道要多。我们实验的结果是普通弯道有效行数通常在14行以下,而S弯通常是全场图像有效。通过这一个条件完成了S弯的识别。但是这样的方法也是有缺点的。因为车辆在S弯的位置并不固定,所以有时候也会丢失很多黑线。所以该方法还是有待改进的。 十字弯的识别与车辆入十字弯的位置很有关系,如果一个50半径的弯马上进入十字弯的话。如果对十字弯无法良好识别的话,会导致车辆无法正常行驶。但考虑到实际比赛的时候,该种情况出现的情况不是很大。所以本车并没有采取特定的十字弯识别策略,此处有待改进。(2)偏差的选取 在完成了赛道趋势的识别以后,偏差的选取就可以依据赛道的趋势来选取。基本原则是直道用远处的偏差作为偏差,弯道的用进出行作为偏差。S弯用全场的平均值的偏差作为参考。3.3 控制策略 控制策略又可分为速度策略和转向策略。通过上文的叙述,基本上可以搭建出合适的转向策略。下面主要介绍速度控制策略。 速度策略和转向策略息息相关。倘若速度控制不合适的话,会导致入弯的时候调整量不够,或者是低速入弯的时候调整量较大导致超调。 所以我们采取的是准匀速策略。 既全部采用统一占空比。遇见弯道的时候,检测当前速度是否超过预定值,如果超过预定值采用零占空比减速。(因为我们的电机驱动,有电磁刹车的功能,所以在零0占空比是刹车效果较明显)。该套策略基本上可以保证车辆的顺利运行。但缺点是出弯时加速点比较靠后,导致弯道速度较慢。如果能较好的控制加速点,则可以更好的提高弯道速度。第四章 程序开发和调试好的开发和调试工具以及测试环境能够加快产品的开发速度,提高调试精度,减少工作量。本章将对开发和调试工具以及测试环境作相关说明。本车在开发和调试中所使用的开发环境为Metrowerks公司的集成开发环境Metrowerks Corewarrior IDE4.6和与之配套使用的调试软hiwave,调试器为清华大学工程物理系开发的BDM,辅助调试工具有电视机、刻度尺,串口调试软件等。通过以上各软件工具的配合使用,再加上良好的测试环境,使得小车的开发和调试能够顺利而快速地完成。4.1 软件开发环境CodeWarrior是由Metrowerks公司提供的专门面向Freescale所有MCU与DSP嵌入式应用开发的软件工具。其中包括集成开发环境IDE、处理器专家、全芯片仿真、可视化参数显示工具、项目工程管理、C 交叉编译器、汇编器、链接器以及调试器。赛车开发调试过程最常用的是集成开发环境IDE和调试器。 4.1.1 CodeWarrior IDE通过CodeWarrior IDE你可以选择C或C+语言进行编程,然后进行编译、链接和调试。通过BDM头,你可以把程序烧入单片机,还可以进行在线调试。CodeWarrior IDE使用方便且功能强大,是赛车开发调试必不可少的工具。 CodeWarrior IDE在新建工程中的mc9s12dp512.h(以相对应单片机型号为文件名)文件对所有寄存器对应的存储映射地址都进行了宏定义,可供开发者在软件开发时直接调用。 要进行软件编程,必须先在CodeWarrior IDE中建立一个新的工程,然后才能输入代码,进行编译链接最终写入单片机中。打开CodeWarrior,然后单击“FileNew”,再根据向导提示输入相关信息,就能建立一个新的工程。CodeWarrior运行界面如图4.1所示:图4.1 CodeWarrior运行界面4.1.2调试器CodeWarrior IDE中的调试器不仅可以进行在线调试,还可以进行在线的仿真。在调试器中,我们可以看到定义的全局变量的变化和各个寄存器的当前值,还可以看到单片机内存中内容等。此外,还有许多其他的实用功能,在赛车的调试过程中使用很是方便有效。具体调试器界面如图4.2所示。图4.2调试器界面4.1.3 串口调试软件 利用此软件可以方便的把AD转后的数据发送到电脑上,用来查看采集的数据是否正确,实际道形经单片机采集后是什么样的,为我们调试提供了方便。如图4.3采集的一幅图像。图4.3串口调试软件发送的数据4.14 软件设计思想开始系统初始化赛道数据采集、处理、保存启动控制舵机控制电机系统时钟中断赛道数据采集脉冲数采集计算偏移量计算速度值PD算法第五章 总结5.1 智能汽车技术指标模型车的主要技术参数说明:1、 改造后的车模总体重量为1.3kg;长度为260mm;宽度为180mm;高度为440mm。2、 电路功耗15W,所有电容总容量1880uF。3、 传感器种类以及个数:测速传感器 1个;CCD传感器 1 个;4、 除了车模原有的驱动电机、舵机之外伺服电机个数为0。5、 赛道信息检测精度为1mm,频率为50Hz。5.2 目前尚存在的不足与改进方向目前我们采用的CCD图像算法稳定性需要进一步提高,对经过图像处理后的数据,控制算法比较简单,通过实际赛道调试可以改进更加完善。通过优化代码,减少控制算法消耗的系统时间,继续寻找一个稳定可靠的CCD控制算法。最终我们可以根据具体赛道情况采用最为合适的方案,这样就保证了我们在参赛中可以发挥自己的最好成绩。附录:部分程序清单#include #include #pragma LINK_INFO DERIVATIVE mc9s12xs128unsigned short int chesudu; int aa,bb,cc,c,b,d; /*手创科技摄像头信号采集程序*/-淘宝店:/-/客服联系人:刘生/欢迎联系技术qq:974205767(因工作繁忙,一般晚上在线)/采集到的数据在二维数组taliehang_end里;/接口定义: 行同步接PT2 场同步接PT1 信号线是接PA0 /- #define lie_end 260 #define hang_end 92 #define lie 32/51 #define delay(num) unsigned int i,j; for(i=0;inum;i+) for(j=0;j68;j+); unsigned char c_lie=0,g_lie=0; unsigned int lie_count=0,hang_count=0; unsigned char taliehang_end; unsigned int get_n= 29,41,52,62,71,79,86,92,98, 103,108,112,116,120,124,128,132,135,138, 141,144,147,150,153,156,159,162,165,168, 170,172,174,176,178,180,182,184,186,188, 190,192,194,196,198,200,202,204,206,208, 210,211,212,242,243,245,246,247,248,249,250;#define uchar unsigned char #define uint unsigned int; void chaopin(void); void TIM_init(void);void shijian(void);void atd_init(void); void pwm_init(void); void main(void) DDRA=0X00;DDRJ=0X02;DDRK=0X30;PTJ_PTJ1=1;/RS 0输入指令 1输入数据PORTK_PK5=1; /R/W 0向lcd输入指令或数据、1从lcd读取数据PORTK_PK4=1; /E 使能信号 1读取信息 1到0的下降沿执行指令 DisableInterrupts; chaopin(); atd_init(); TIM_init();/计数器函数初始化 shijian(); pwm_init(); delay(900) ; EnableInterrupts; unsigned int e,w; for(e=1;e6;e+) for(w=0;w10;w+); for(;) for(aa=4;aa=4;aa-) if(ta8aa=1) b=aa; break; bb=(d+b)/2; c=(bb-45)*38; if(c1500) c=1500; if(c500)|(c-500) PWMDTY23=350; void chaopin(void) CLKSEL=0X00; PLLCTL_PLLON=1; SYNR =0xc0 | 0x07; REFDV=0xc0 | 0x01; POSTDIV=0x00; _asm(nop); _asm(nop); _asm(nop); _asm(nop); while(!(CRGFLG_LOCK=1); CLKSEL_PLLSEL =1; void atd_init(void) ATD0CTL1=0x00; ATD0CTL2=0X40; /禁止中断 转换后自动清除寄存器 ATD0CTL3=0X88; /没有断点 没有FIFO 通道0开始 单通道 继续转换右对齐 转换序列1 ATD0CTL4=0X00; /4周期,64/2,最快 ATD0CTL5=0X30; / 连续转换 多通道转换 通道AN0开始 ATD0DIEN=0x00; /相应的数字信号输入禁止 void TIM_init(void) PACTL=0X50; PACNT=0X0000; TIOS =0x00;/定时器通道0,1 为输入捕捉 TSCR1=0x80;/定时器使能 TCTL4=0x18;/通道 1 捕捉下降沿通道 2 捕捉上升沿 TIE=0x06; /通道 1,2 中断使能 TFLG1=0xFF;/清中断标志位 void shijian(void) PITCE_PCE0=1; PITLD0=15999; /1 毫秒 PITMTLD0=20; PITMUX=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论