还剩9页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
北京航左航天人摩BE IHANG UNIVERSITY《计算机测控系统》实验报告院(系)名称专业名称学自动化科学与电气工程学院生学号学生姓名指导教自动化师年月201806董韶鹏•Sbnef二值化医俅解玉void img_extractuint8*dst uint8*src uint32srclenr r{一uint8colour
[2]={01};ruint8tmpsrc;whilesrclen——★tmpsrc=src++;*dst++=colour[tmpsrc»70x01];*dst++=colour[tmpsrc»660x01];*dst++=colour[tmpsrc»50x01];*dst++=colour[tmpsrc»40x01];*dst++=colour[tmpsrc»30x01];*dst++=colour[tmpsrc»20x01];*dst++=colour[tmpsrc»10x01];*dst++=colour[tmpsrc»00x01];把得到的二值化数组由十六进制转化为二进制程序如下:void Spacefilter{int i j k=0;r rfori=0;i600;i4-+forj=0;j8;j++{buffer_space[k+7-j]=imgbuff[i]%2;imgbuff[i]/=2;k+=2;1获取赛道边界和中心线的算法如下:void Searchintijk;r rm=40;//intfori=0;i60;i++{k=0;forj=0;j80;j++{ifbuffer_space[80*i+j]==1{middle[i]+=j;k++;}middle[i]/=k;1由摄像头数据计算出舵机所需打角的算法如下:zhuanjiao=Q;fori=30;i60;i++zhuanj iao+=middle[i];zhuanjiao/=30;zhuanjiao=zhuanjiao-40*5;舵机模块控制程序
4.
2.2舵机采用FTM1的CH0通道来驱动在PWM的占空比为15%时,舵机保持中立,占空比在10%-20%之间变动时,舵机摆角在最左到最有来回摆动实际中需要根据具体情况修正舵机中立时的占空比测试后我们发现当占空比为14%时舵机保持中立具体的舵机初始化和驱动程序如下所示void duojiintzhuanjiaoint speed;led_init;//初始化LEDint duty=0,flag;ifzhuanjiao25zhuanjiao=25;ifzhuanjiao-25zhuanjiao=-25;if
0.16*1-abszhuanjiao/10=
0.07speed=-16*1-abszhuanjiao/IQ;elsespeed=-7;dianjispeed;last=speed;FTM_PWM_init FTM1,FTM_CH0,100,sever_middle+zhuanjiao;/能机PWMRT22输出,频率为100hz,周期为\萌$LED_RED_TURN;}一一程序中为了防止舵机摆角过大烧坏舵机,我们对其输出进行了限制,可以防止其因为大幅摆动造成的损坏和其他机械不稳定性电机模块控制程序
4.
2.3电机模块采用FTMO的CHO和CH2通道进行控制,电机的驱动电路采用典型的H桥驱动,电机转速与占空比成正比具体的初始化和驱动程序如下图所示void dianjiintxint duty=Or flag;duty=x;led_init;//亳机PWM ETC输出,菠率为1处z、FTM_PWM_initFTMO,FTM_CH0,10*1000,0;//电机PTC2^^频率为IGKg、FTM_PWM_init FTMOrFTM_CHlf10*1000r0;P¥M//电机PHM RTC3辘出,领率为1蹄z、FTM_PWM_initFTM0rFTM_CH2r10*1000r0;FTM_PWM_init FTMOrFTM_CH3r10*1000,0;//电机PXM RTC4输出.频率为1标z.//转彳匕为实际占空比motorl_out=duty*
0.01;motor2_out=duty*
0.01;Motor_Out;编码器模块控制程序
4.
2.4编码器采用512线mini编码器,即可输出表示转速的脉冲波又可输出正反转信息程序中我们使用FTM2的正交解码功能来读取编码器脉冲数得到小车速度初始化程序如下void bianmaqiintzhuanshu uart_init0^^,**5200\;“女口果使用名优科包卜1£1模块就用工石丫\二由七UART01800000;fOLEDZlnitO;//初始化液晶屏没有Gt励的可以不管布关的.上位机也可以看数据OLED_Draw_Logo;DELAY_MS2000;OLED_CLS;OLED_P6x8Str102,WMINI_ENCODER_TESTW1/J第2行笫3列开始显示rOLED_P6x8Str204wPulsel=n;f rOLED_P6x8Str205wPulse2=;f rFTM_QUAD_Init FTM1;//初始化正交解码计数通道FTM_QUAD_InitFTM2;//初始化正交解码计数通道whilePulse2zhuanshu{Pulsel=FTM_QUAD_get FTM1;//获取模块的读数Pulse2=FTM_QUAD_get FTM2;//获取^^2模块的读数sprintf buff,%d,Pulsel;//将读数glsei转换为字符串里面不值的百度spmtf函数OLED_P6x8Str20+56,4buff;//将数值显示在液晶屏幕上rOLED_P6x8Char0,;/j末尾放个空格防止显示错误末尾不刷新sprintf buff,%d Pulse2;“,寻读数^Ase2转经为字符串7^-^buff里面不值的百度spnatf函数rOLED_P6x8Str20+56,5buff;//将数值显示在液晶屏幕上rOLED_P6x8Char•»;//末尾放个空格昉止显示错误末尾不刷新printf wPulsel=%d Pulse2=%d\r\n Pulsel,Pulse2;/J将读数显示在上位机里r r模块控制程序
4.
2.50LED实验中我们采用OLED液晶屏来显示摄像头扫描得到的赛道信息LED作为新一代显示技术,广泛用于各种仪器仪表的显示终端,实时显示字符、汉字、曲线等信息0LED12864显示模块显示屏为128歹U、64行,使用1片有64行输出的行驱动器和2片列驱动控制器,其中每片列驱动器有64路输出行驱动器与MCU没有关系,只要提供电源就能产生驱动信号和同步信号,模块的外部信号仅与列驱动器有关列驱动器内置64X64位显示存储器,RAM被分为8页,每页8行;显示屏上各像素点显示状态与显示存储器各位数据一一对应,显示存储器的数据直接作为图形显示的驱动信号,为“1”显示,为“0”不显示在本次实验中我们移植了0LED12864的库,库中包含相应的管脚和时序定义,包含写命令,写数据,显示字符,显示图像以及清屏等功能我们在主函数循环中调用显示图像函数,来让OLED屏幕在小车运行中实时显示赛道信息具体程序如下void OLED_Draw_camera{一一uint8xr y,ir temp;fory=0;y8;y++//b疝表示灵页”OLED__WrCmd0xb0+y;//0x00+0表示将12®列分成16组其地址在某里中的第几列OLED__Wr€mdOxOO;表示侬2R列分成16组苴地址所在第几组OLED_Wr€mdOxlO;forx=Q;x80;x++temp=0;fori=0;i8;i++//行转换,为列temp+=img[y*640+i*80+x]«7-i;ify=7i=3break;OLED__WrLogo temp;控制算法程序
4.
2.6实验中转角的控制我们采用了PD控制,对中线距离屏幕中间位置的误差进行微分后,利用公式实验结果
4.3上述就是整个控制程序的各个部分实现思路和具体实现算法,通过不断调试程序,我们的小车最终能够正确识别弯道,成功快速稳定的跑完全程,所用时间
8.6秒,实验结果符合预期
五、实验总结本文介绍了摄像头智能小车的总体设计方案,硬件布局,模块功能,软件设计等在本次实验中我们遇到过很多问题,从最初的各个传感器使用,到后来的软硬件联合调试但我们不断查阅各种资料,阅读示例程序,并向老师请求帮助,一个一个的解决困难,了解了一个计算机控制系统的实现方法,并结合这次具体的动手操作实验,我们在技术上和认知上都有一不小的进步在这过程中,离不开老师和同学的支持当小车能够按照赛道跑完全程时内心十分激动,也充分体会到计算机控制的神奇和动手实践的乐趣,收获很多!同组同学实验编号组03
一、实验目的
1.了解计算机控制系统的基本构成和具体实现方法
2.学会使用IAR软件的基本功能,掌握K60单片机的开发和应用过程
3.学会智能小车实验系统上各个模块的使用,掌握其工作原理
二、实验内容
1、了解各模块工作原理,通过在IAR环境编程,实现和演示各个模块的功能
2、编写程序组合各个模块的功能,让小车能够沿着赛道自行行使
三、实验原理小车的主板如下图所示:主板上包括Freescale MK60DN512ZVLQ10核心板,J-Link下载调试接口,编码器接口,电机驱动接口,舵机接口,CCD结构等主要功能模块接口,无线模块接口,蓝牙模块接口,0LED接口等主要功能模块和相应的辅助按键和电路在本次实验中我们主要使用的接口为编码器接口,CCD接口,舵机接口,电机驱动接口,OLED接口来控制小车运行,采用
7.2V电池为系统供电我们采用512线mini编码器来构成速度闭环控制,采用0V7725来进行赛道扫描,将得到的图像二值化,提取赛道信息,并以此控制舵机来进行转向
四、实验步骤车架及各模块安装
4.1小车整体车架结构
4.
1.1车模的整体结构如上图所示,包含地盘,电机等,为单电机驱动四轮车车模为但电机驱动,
4.L2摄像头的定和安装电机安装位置如下摄像头作为最重要的传感器,它的固定和安装对小车的影响是十分巨大的,摄像头的布局和安装取决于系统方案,反过来又会影响系统的稳定性与可靠性以及软件的编写我们的车模为四轮车,所以摄像头架在车子的中间部分,介于电池和舵机之间,这样节省空间而且也不会让重心偏移太大,而摄像头的角度也很有讲究,角度低的时候能看到很远的赛道信息,但是图像较为模糊,不适合图像处理的编写,角度较高是,能看到的图像信息较少,但是分辨率明显更好,在程序的编写中,我们发现摄像头视野的宽广往往直接影响赛道信息提取的精准度摄像头的安装如下图摄像头与支撑杆之间的安装能否稳定是整个采集图像是否可靠地重要原之一考虑到CCD摄像头本身就比较笨重,要尽量减轻附加固定结构的重量我们采用比较轻便的碳棒为支架进行安装,除了摄像头与支撑杆之间的连接会影响摄像头采图之外,支撑杆与底盘之间的固定也同样重要,本届车模为四轮车,在车子跑动时,受到速度变化或者打脚影响,车子会有左右倾的状态,因此底盘需要特别的结实才可以的具体安装如下图所示编码器的安装
4.L3为使整个控制形成闭环,当前速度反馈是必须的为了测出当前速度,我们用了两个512线mini编码器在安装编码器的时候要保证有合适的齿轮咬合咬合完美的原则是两个传动齿轮轴保持平行,齿轮间的配合间隙要合适,过松容易打坏齿轮,过紧又会增加传动阻力;传动部分要轻松、顺畅,容易转动判断齿轮传动是否调整好的一个依据是,听一下电机带动后轮空转时的声音声音刺耳响亮,说明齿轮间的配合间隙过大,传动中有撞齿现象;声音闷而且有迟滞,则说明齿轮间的配合间隙过小,咬合过紧,或者两齿轮轴不平行,电机负载加大调整好的齿轮传动噪音小,并且不会有碰撞类的杂音安装好的编码器如下图所示舵机安装
4.
1.4舵机是另一个重要的功能模块,用来控制小车的前进方向,它根据摄像头二值数据的处理结果来进行一定角度的打角控制小车的前进方向,其安装部位和方法如下图所示主板安装
4.
1.5主板上包含各个功能模块的接口电路以及单片机核心板,是整个系统的控制中心,十分重要,用螺丝将其紧固在支架上,方便各模块的连接其安装效果如下图所/K软件系统设计
4.2程序整体设计思路为在系统各模块初始化后,开始摄像头扫描,得到二值化数据,然后对得到的扫描数据进行运算得到下一时刻所需的舵机打角来控制方向,控制方向的同时单片机FTM模块输出PWM来控制速度主函数如下void mainvoiddianji-5;OLED_Init;OLED_Draw_Logo;DELAY_MS2000;OLED_CLS;//注意!根据实际的波特率来修改!uart_initUARTO1500000;camera_init;rset_vector_handlerPORTC_VECTORn PORTCIRQHandler;f_set_vector_handlerDMAO_VECTORn DMAO_IRQHandler;rset_vector_handlerUARTO_RX_TXJ7ECTORn UARTO_RX_IRQHandler;ruart_rx_irq_enUARTO;NVIC_SetPriorityUARTO_RX_TX_IRQn0;rwhile1ifnew_img一new_img=0;//filter;get_edge;//line;Spacefilter;Search;Send_Begin;Send_Variable;//发送至U上传机=sendimg;img_extract img,imgbuff_process CAMERA_SIZE;rOLED_Draw_camera;}一一接下来介绍各个模块的控制程序原理图像采集与处理
4.
2.1摄像头的主要工作原理是[8]将摄像头的像素点从上到下,从左到右逐个输出,虽然部分芯片可以配置输出顺序,但是对于智能车来说,正常输出即可,有些摄像头将一帧图像分成奇偶两场,v7725并没有这项配置摄像头工作时序如下图所示⑴行中断时序中断里需要处理事情再开始采集,则显然用HREF的上升沿是很容易来不及采集第一个像素PCLK是整个控制摄像头指令的时序,在上升沿时MCU会采集图像,下降沿时摄像头输出图像行消隐区如果不按照时序来采集,便会采集到值为的消隐区,即黑色行与行之间,场与场之间,都是存在消隐区的PCLKHREFHSYNC像素值⑵场中断时序VSYNC3DMA简要介绍DMA是直接内存存取技术,它允许不同速度的硬件装置来沟通,而不需要依赖于CPUHREF的大量中断负载DMA传输将数据从一个地址空间复制到另外一个地址空间当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成在实现DMA传输HSYNC时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应像素值立即把总线控制权再交回给CPU一个完整的DMA传输过程必须经过DMA请求、DMA场中断信号VSYNC来了,便可以开始采集每帧的数据,可以在程序里选择上升沿或者下降沿触发中断场中断和行中断的时序关系必须处理好,否则将出现异常响应、DMA传输、DMA结束4个步骤4图像采集由于图像处理是路径识别的基础,也是控制策略能否发挥作用的重要影响因素,因此,本文将对此部分进行详细介绍ov7725数字摄像头在硬件上做了二值化处理,所以阈值作为程序底层中一个十六进制的数值来体现如果想要获得效果明显清晰的图像,当环境改变口寸,阈值要做相应的调整来适应光线场地,这个是运行上层采线函数获得正确赛道信息的首要条件采集图像思路如下,图像采集的方案是不使用行中断信号,直接DMA模块计数来完成一场结束的判断需要采集图像时,开场中断,场中断来了,初始化DMA传输,并启动DMA传输,每个PCLK上升沿来了都触发DMA传输,把摄像头输出的值读取到内存数组里当触发n次n二图像像素数目后就停止DMA传输场中断服务程序如下★Sbrief场中断服务函数★Ssince0v
5.void PORTC_IRQHandler一弓I脚号uint8n=0;uint32flag=PORTC_ISFR;//清中断标志位PORTC_ISFR=~0;//场中断n=13;ifflag1«n//四63触发中断;PORTC_ISFR=1«PT13DMA_DADDRDMA_CH0=uint32imgbuff;打清空标志位;DMA_ENDMA_CH0//恢复地址}一一//使能通道*n硬件请求DMA停止传输时触发中断,中断里关闭场中断,图像采集完毕DMA中断服务程序如下Sbrief DMA0中断服分函数*Ssince v
5.0*void DMAO_IRQHandler一“清除通道传输中断标志位DMA_IRQ_CLEAN DMA_CH0;new_img=l;memcpy uint8*imgbuff_process uint8*imgbuff,sizeofimgbuff;r⑸图像处理图像处理采用了赛道边沿提取的方法,基本思想如下多扫描得到的二值化数据解压后数据进行逐行扫描原始图像,根据设定的阈值提取黑白跳变点;赛道宽度有一个范围,在确定的赛道宽度范围内提取有效赛道边沿,这样可以滤除不在宽度范围内的干扰;利用赛道的连续性,根据上一行白块的位置和边沿的位置来确定本行的边沿点;在弯道的时候赛道有回拐的情况,所以提取本行边沿之前还要向前搜索回拐的边沿点;在弯道行进过程中,保持系统搜索最远有效行,为未来进一步打角做出判断,尤其是在速度比较快的时候,获取较远赛道信息变的非常重要解压函数如下。
个人认证
优秀文档
获得点赞 0