您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 基于图像传感器的小车循迹控制
基于图像传感器的小车循迹控制常州工学院制作学生:杨义鹏,杨锟,高星宇指导老师:肖闽进,蔡纪鹤,马金祥一、设计方案工作原理1、摄像头图像识别的循迹小车设计背景当前,实用的图像处理系统都要求高速处理。目前广泛采用软件进行处理,但软件处理存在速度、成本的问题。近年来,随着现成可编程门阵列FPGA的发展,为提高图像处理系统的性能提供了新的思路和方法。FPGA的并行特性所带来的高速性,以及低成本低功耗等特性,都是计算机无法比拟的。摄像头循迹小车的FPGA以及PCB部分采用digilent公司Basys3FPGA开发板作为控制核心,此款开发板采用xilinx7系列芯片,板卡设计小巧,同时片上资源也足以满足大多教学应用场合。2、预期实现目标定位设计并制作基于basys3的FPGA运用ov7725摄像头进行图像识别的循迹小车,能够拍摄画面并经行捕捉,在小车偏离赛道时进行控制使其能够完成循迹的目的。3、技术方案分析比较方案1:采用带fifo的ov7670摄像头做二值化循迹图1-1带fifo的ov7670摄像头该摄像头自带fifo模块,是针对慢速的MCU能够实现图像采集控制推出的带有缓冲存储空间的一种模块,自带的fifo(先进先出)存储芯片使得处理图像拍摄数据存储时避免了SDRAM、DDR的使用,包含30w像素的图像感光芯片,操作和使用很方便,对读出的数据进行二值化处理,加上阈值后可以进行循迹使用。方案2:采用带硬件二值化的ov7725摄像头做二值化循迹图1-2带硬件二值化的ov7725摄像头此摄像头自带硬件二值化可以直接输出二值化后的0和1黑白图像,并且采样和输出速度要高于ov7670,在进行黑线循迹时优化二值化算法使得循迹变得简单。方案3:采用ov7725摄像头进行图像捕捉此摄像头相对于ov7670的优点仍为高速的采样和输出速度,相对于带有硬件二值化摄像头丧失了二值化的优势但是可以摒弃二值化单纯只能循迹黑线的问题,进行图像识别而可以直接对物体进行图像捕捉,增加了使用的范围。最后选用方案及理由:采用带fifo的ov7725摄像头,原因为相比于ov7670摄像头,其处理速度更加快,相比于带硬件二值化的摄像头其可以做的不仅仅为简单的二值化循迹,可以上升到图像识别和捕捉的层面从而可以满足更多的需要。4、系统结构工作原理系统的总体框图如图所示图1-3系统结构工作原理5、功能指标和实现方法(1)通过ov7725摄像头拍摄画面采用ov7725摄像头,对画面进行初步处理,检测能否拍到数据为后续的图像处理和控制打下基础。(2)对ov7725捕捉到的画面进行像素转换首先将采集到的RGB像素,转换成HSV像素,由于RGB色空间和HSV空间之间的转换为非线性的,硬件实现需要考虑时钟同步、算法优化、实时性等问题。采用了低延迟的除法器实现Hue分量与Saturation分量的高速计算,从而实现了RGB转换成HSV。(3)进行色彩提取和坐标计算原理是应用了色彩方面的理论,寻找类似黑线色彩的区域,然后计算这个区域的中心。首先需要人为提取黑线的HSV分量(只提取一次);之后的每一帧都进行如下操作:遍历图像每个像素,对HSV分量和黑线相近的像素进行标注,然后对标注后的区域去噪,去噪后,对此区域进行中心点的计算。每一帧结束都会将计算所得的中心坐标发送给舵机控制模块。在标注过程中,假如背景有黑色区域,就会产生噪声。本系统去噪、降噪的策略有两个方面:1.形态学处理,直接去除面积较小的噪点;2.设置权值的概念,降低较大噪点影响。对于权值降噪,运用一个权值计算算法,中心点的计算会和权值相关。对于每一个标注像素,都计算此像素和上一帧得到的中心点的距离,根据距离远近设定不同大小的权值,越接近中心的标注像素,权值越大,否则越小。这样就会降低和捕捉物体距离较远,但面积较大的噪点的影响。二、核心部件电路设计1、关键器件性能分析ov7725摄像头捕捉测试拍摄测试路线的图像通过VGA接口接显示器显示图像如2-1图所示图2-1摄像头捕捉图像2、关键电路驱动接口(1)ov7725摄像头电路如图2-2所示图2-2摄像头电路图(2)模数转换模块电路如图2-3所示图2-3ADC电路图三、系统软件设计分析1、系统总体设计主程序流程图如图3-1所示图3-1主程序流程图系统分为FPGA主控制器、摄像头采集、数据缓存机构、图像捕捉识别机构、图像追踪机构、VGA显示模块、舵机驱动模块以及反馈模块。(1)FPGA主控制器:完成采集和信号处理等核心计算。(2)摄像头采集机构:完成摄像头的数据采集。(3)数据缓存机构:通过双扣ram来缓存采集到的数据。(4)图像捕捉识别机构:捕捉特定区间的画面用来对比(5)图像追踪机构:与图像捕捉的特定区间进行比较,以此来追踪图像(6)VGA显示模块:现实摄像头拍摄和捕捉到的画面(7)舵机驱动模块:生成pwm波控制舵机和电机(8)反馈模块:反馈舵机的角度和当前追踪的位置运用PID算法进行闭环控制2、关键模块的主要代码(1)顶层设计文件如图所示图3-2顶层模块图moduledesign_1_wrapper(Config_Done,Move_EN,OV7725_D,OV7725_HREF,OV7725_PCLK,OV7725_SIOC,OV7725_SIOD,OV7725_VSYNC,OV7725_XCLK,btn_ColorExtract,clk100,pwm_out_x,pwm_out_y,rst,sw_ColorClear,vauxn14,vauxn15,vauxn6,vauxn7,vauxp14,vauxp15,vauxp6,vauxp7,vga_blue,vga_green,vga_hsync,vga_red,vga_vsync);outputConfig_Done;inputMove_EN;input[7:0]OV7725_D;inputOV7725_HREF;inputOV7725_PCLK;outputOV7725_SIOC;inoutOV7725_SIOD;inputOV7725_VSYNC;outputOV7725_XCLK;inputbtn_ColorExtract;inputclk100;outputpwm_out_x;outputpwm_out_y;inputrst;inputsw_ColorClear;inputvauxn14;inputvauxn15;inputvauxn6;inputvauxn7;inputvauxp14;inputvauxp15;inputvauxp6;inputvauxp7;output[3:0]vga_blue;output[3:0]vga_green;outputvga_hsync;output[3:0]vga_red;outputvga_vsync;wireConfig_Done;wireMove_EN;wire[7:0]OV7725_D;wireOV7725_HREF;wireOV7725_PCLK;wireOV7725_SIOC;wireOV7725_SIOD;wireOV7725_VSYNC;wireOV7725_XCLK;wirebtn_ColorExtract;wireclk100;wirepwm_out_x;wirepwm_out_y;wirerst;wiresw_ColorClear;wirevauxn14;wirevauxn15;wirevauxn6;wirevauxn7;wirevauxp14;wirevauxp15;wirevauxp6;wirevauxp7;wire[3:0]vga_blue;wire[3:0]vga_green;wirevga_hsync;wire[3:0]vga_red;wirevga_vsync;design_1design_1_i(.Config_Done(Config_Done),.Move_EN(Move_EN),.OV7725_D(OV7725_D),.OV7725_HREF(OV7725_HREF),.OV7725_PCLK(OV7725_PCLK),.OV7725_SIOC(OV7725_SIOC),.OV7725_SIOD(OV7725_SIOD),.OV7725_VSYNC(OV7725_VSYNC),.OV7725_XCLK(OV7725_XCLK),.btn_ColorExtract(btn_ColorExtract),.clk100(clk100),.pwm_out_x(pwm_out_x),.pwm_out_y(pwm_out_y),.rst(rst),.sw_ColorClear(sw_ColorClear),.vauxn14(vauxn14),.vauxn15(vauxn15),.vauxn6(vauxn6),.vauxn7(vauxn7),.vauxp14(vauxp14),.vauxp15(vauxp15),.vauxp6(vauxp6),.vauxp7(vauxp7),.vga_blue(vga_blue),.vga_green(vga_green),.vga_hsync(vga_hsync),.vga_red(vga_red),.vga_vsync(vga_vsync));endmodule(2)摄像头ov7725模块图3-3ov7725模块moduledesign_1_cam_ov7725_0_0(pclk,vsync,href,d,H_cnt,V_cnt,addr,dout,we,wclk);inputwirepclk;inputwirevsync;inputwirehref;inputwire[7:0]d;outputwire[11:0]H_cnt;outputwire[10:0]V_cnt;outputwire[16:0]addr;outputwire[15:0]dout;outputwirewe;outputwirewclk;cam_ov7725inst(.pclk(pclk),.vsync(vsync),.href(href),.d(d),.H_cnt(H_cnt),.V_cnt(V_cnt),.addr(addr),.dout(dout),.we(we),.wclk(wclk)modulecam_ov7670_ov7725(inputpclk,inputvsync,inputhref,input[7:0]d,output[11:0]H_cnt,output[10:0]V_cnt,output[16:0]addr,outputreg[15:0]dout,outputregwe,outputwclk);reg[15:0]d_latch;reg[16:0]address;reg[16:0]address_next;reg[1:0]wr_hold;reg[1:0]cnt;initiald_latch=16'b0;initialaddress=19'b0;initialaddress_next=19'b0;initialwr_hold=2'b0;initialcnt=2'b0;assignaddr=address;assignwclk=pclk;reg[9:0]hcnt,vcnt,href_post;assignH_cnt=(hcnt/2=0&&hcnt/2320)?hcnt/2:0;assignV_cnt=(vcnt=0&&vcnt240)?vcnt:0;always@(posedgepclk)beginif(vsync==1)beginaddress=17'b0;address_next=17'b0;wr_hold=2'b0;cnt=2'b0;endelsebeginif(address76800)address=address_next;elseaddress=76800;we=wr_hold[1];wr_hold={wr_hold[0],(href&&(!wr_hold[0]))};d_latch={d_
本文标题:基于图像传感器的小车循迹控制
链接地址:https://www.777doc.com/doc-6369942 .html