基于ARM的智能机器人图像采集系统_第1页
基于ARM的智能机器人图像采集系统_第2页
基于ARM的智能机器人图像采集系统_第3页
基于ARM的智能机器人图像采集系统_第4页
基于ARM的智能机器人图像采集系统_第5页
已阅读5页,还剩32页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

基于ARM的智能机器人图像采集系统软件设计SOFTWOREDESIGNOFINTELLIGENTROBOTIMAGEACQUISITIONSYSTEMBASEDONARM总计37页表格0个插图17幅理工学院本科毕业设计(论文)基于ARM的智能机器人图像采集系统软件设计SOFTWAREDESIGNOFINTELLIGENTROBOTIMAGEACQUISITIONSYSTEMBASEDONARMINSTITUTEOFTECHNOLOGY基于ARM的智能机器人图像采集系统软件设计1基于ARM的智能机器人图像采集系统软件设计自动化专业摘要本设计以S3C2440微处理器和LINUX操作系统为控制平台,以飞思卡尔比赛车模为控制对象,采用USB摄像头作为图像采集设备,控制智能小车沿赛道中心黑线行驶。根据项目需求裁剪内核文件下载到S3C2440控制器中,利用LINUX下视频设备应用编程接口实现图像采集,通过LIBJPEG库解压采集到的JPEG图片,同时将解压后的图像进行二值化提取赛道中心线的位置,通过液晶屏实时显示,并编写控制程序成功控制小车沿赛道行驶。关键词嵌入式;S3C2440;LINUX;图像采集;智能小车SOFTWAREDESIGNOFINTELLIGENTROBOTIMAGEACQUISITIONBASEDONARMAUTOMATIONSPECIALTYLINBIAOWENABSTRACTTHISDESIGN,WHICHCHOOSESFREESCALEGAMECARSASCONTROLLEDMEMBER,USESMICROPROCESSORS3C2440ANDLINUXOPERATINGSYSTEMASTHECONTROLPLATFORM,ANDTHEUSBCAMERAASTHEIMAGEACQUISITIONEQUIPMENTTOCONTROLTHESMARTCARDRIVINGALONGTHEBLACKLINEINTHEMIDDLEOFTHETRACKDOWNLOADKERNELFILETOMICROPROCESSORS30C2440ACCORDINGTOTHEPROJECTNEEDSUSELINUXVIDEOEQUIPMENTAPPLICATIONPROGRAMMINGINTERFACE,IMAGEACQUISITIONISREALIZEDJPEGIMAGEISCOLLECTEDBYDECODINGFROMLIBJPEGATTHESAMETIME,THEIMAGEISBINARIZEDTOEXTRACTTHEPOSITIONINTHEMIDDLEOFTHETRACKANDISREALTIMEREVEALEDTHROUGHLCDWRITECONTROLPROGRAMTOCONTROLTHESMARTCARRUNALONGTHEBLACKLINESUCCESSFULLYKEYWORDSEMBEDDEDSYSTEMS3C2440LINUXIMAGEACQUISITIONSMARTCAR基于ARM的智能机器人图像采集系统软件设计2目录1引言12智能机器人图像采集系统硬件平台121MICRO2440开发板322电源模块423电机驱动模块424摄像头43嵌入式LINUX开发环境建立431LINUX操作系统432宿主机和主控板连接环境搭建533建立交叉编译环境634系统移植7341BOOTLOADER7342内核定制7343根文件系统制作8344系统移植1035驱动程序设计10351LINUX设备驱动程序10352PWM驱动程序设计11353驱动程序安装124应用程序设计1341按键应用程序开发1542LCD液晶显示程序开发15421LINUX的帧缓冲设备FRAMEBUFFER15422液晶显示流程1643图像采集17431VIDEO4LINUX217432V4L2视频采集流程1844图像处理20441LIBJPEG库解压图像20442二值化方法22443中心线确定方法23基于ARM的智能机器人图像采集系统软件设计345控制策略27451舵机控制27452电机控制27结束语29参考文献30致谢31基于ARM的智能机器人图像采集系统软件设计11引言嵌入式系统是指用于执行独立功能的专用计算机系统。它由包括微处理器、定时器、微控制器、存储器、传感器等一系列微电子芯片与器件,和嵌入在存储器中的微型操作系统、控制应用软件组成,共同实现诸如实时控制、监视、管理、移动计算、数据处理、等各种自动化处理任务。嵌入式系统以应用为中心,以微电子技术、控制技术、计算机技术和通讯技术为基础,强调硬件软件的协同性和整合性,软件与硬件可裁剪,以满足系统对功能、成本、体积和功耗等要求,至今为止无论是消费电子领域还是工业领域、航空领域、军事国防领域到处到能见到嵌入式的身影,它的发展已经深入到人们的生活中了1。设计一个专用系统,传统的开发过程如下首先是用户需求分析,看看用户需要解决哪些问题;然后是选择处理器和相应的硬件平台;随后是硬件的设计(包括原理图和PCB)调试,先看硬件是否可以正常工作;接着是软件调试,包括处理器的初始化、中断、外设等,都需要自己编程控制,基本上每一次开发都需要经历这个流程。而对于一个嵌入式系统,基本的处理器和核心电路是固定的,操作系统是已经移植好的。做产品所需要做的工作就是看看是否要添加外设,然后编写所添加外设的驱动程序,最后就是编写应用程序。传统开发过程和嵌入式开发过程对比可以看出,一个成熟的嵌入式系统,可以避免重复劳动,缩短开发周期1,嵌入式系统具有通过系统调度实现多任务同时进行的功能,这是其他处理器所无法比拟的。本课题通过开发基于ARM的智能机器人图像采集系统,控制智能小车沿着赛道黑线行驶,旨在深入了解基于ARM和LINUX的嵌入式系统的开发流程,为进一步学习嵌入式打开大门。2智能机器人图像采集系统硬件平台智能机器人图像采集系统硬件结构主要由七部分组成(1)以S3C2440、MEGA1280为核心的两块开发板;(2)电源管理模块。(3)USB摄像头。(4)按键。(5)串口。(6)LCD液晶显示器。(7)智能小车。基于ARM的智能机器人图像采集系统软件设计2系统硬件结构图如图1所示图1系统硬件结构图整体设计实物如图2所示图2整体设计实物图USB摄像头S3C2440控制板MEGA1280控制板赛道基于ARM的智能机器人图像采集系统软件设计321MICRO2440开发板MICRO2440开发板由核心板MICRO2440和底板MICRO2440SDK组成。MICRO2440核心板是一个最小系统板,它具有最基本的系统配置1CPU三星S3C2440,运行于400MHZ。2NORFLASH2M,内部已烧录BOOTLOADER,主要用于裸机开发和引导系统移植3NANDFLASH64M可升级到128M1G。4SDRAM64M,片外同步动态随机存储器,由2片16BIT宽度的32MSDRAM组成。MICRO2440核心板如图3所示。图3MICRO2440核心板基于ARM的智能机器人图像采集系统软件设计4图4MICRO2440SDK底板MICRO2440SDK底板是基于MICRO2440核心板的功能测试底板,上面有各种常用的接口,如标准RJ45网络、音频输入输出、USB、SD卡座、串口、CMOS摄像头、LCD、按键等等。丰富的接口为学习嵌入式提供了很大的便利。MICRO2440SDK底板如图4所示。22电源模块智能机器人使用72V镍镉电池供电,系统中控制板和舵机使用的电源电压为5V,电机驱动直接使用电池作为输入电压,为了使舵机工作时不对开发板供电产生干扰,使用两片5V稳压芯片L7805和LM2576分别给舵机和开发板供电。L7805具有纹波小电压稳定的特点,允许输出最大电流为15A,LM2576输出电压纹波比较大但是允许输出电流可以达到3A,舵机需要稳定的电源,L7805完全能够满足需求。两块控制板耗电量大,采用L7805会导致过度发热,选用LM2576作为其电源转换芯片。23电机驱动模块智能机器人采用BTS7960芯片作为电机驱动模块,BTS7960是半桥驱动芯片,电流最高43A,内阻小,发热量少,是一款理想的电机驱动芯片,由于智能车在行驶过程中不需要倒车,所以只用一片BTS7960。基于ARM的智能机器人图像采集系统软件设计524摄像头智能机器人的感知模块采用中星微ZC301芯片的USB摄像头,这种摄像头价格便宜,使用方便,采用硬件压缩,直接获取的是JPEG图片。3嵌入式LINUX开发环境建立31LINUX操作系统LINUX操作系统核心最早是由芬兰的LINUSTORVALDS1991年8月在芬兰赫尔辛基大学上学时发布的,后来经过众多世界顶尖的软件工程师的不断修改和完善,LINUX得以在全球普及开来,在服务器领域及个人桌面版得到越来越多的应用,在嵌入式开发方面更是具有其它操作系统无可比拟的优势2,具体如下1LINUX开放源代码,不存在黑箱技术,遍布全球的众多LINUX爱好者又是LINUX开发者的强大技术支持。2LINUX的内核小、效率高,内核的更新速度很快而且可以根据项目需求定制内核以减小内核。3LINUX是免费的OS,在价格上极具竞争力。4LINUX适应于多种CPU和多种硬件平台,是一个跨平台的系统。5LINUX性能稳定,裁剪性好。6LINUX支持多用户、多任务、多线程。32宿主机和主控板连接环境搭建要使用宿主机(即PC机)和主控板进行通讯等操作,必须要使用串口连接线等工具把PC机和主控板的外部接口连接起来,利用PC机上的相应软件,建立宿主机和主控板的连接环境。分别使用连接线将主控板的串口0、网络接口、USBSLAVE接口和PC机的串口、网口、USB口连接起来,建立起宿主机和主控板的硬件连接环境。为了通过串口连接主控板,必须使用一个模拟终端程序,本次设计使用WINDOWSXP系统自带的超级终端程序。超级终端程序通常位于“开始程序附件通讯“中,选择运行该程序,构建主控板和PC机的串口连接环境。超级终端设置步骤如下1打开超级终端程序。2按超级终端向导提示,分别在“默认TELNET程序”和“位置信息”对话框选“否”选项,并确认操作。3在“新建连接”对话框输入新建连接的名称并选择图标,确认操作。4在接下来弹出的对话框中根据自己的串口使用情况选择连接的串口,确认操作。基于ARM的智能机器人图像采集系统软件设计65设置串口参数,注意若此处串口参数设置错误,串口通讯将不正常。串口参数设置如图5所示。图5串口参数设置为了方便移植和开发,还要安装USB下载驱动,配合USB下载软件DNW,实现宿主机向主控板的USB下载。从网上下载DNW软件和USB下载驱动,在PC机上双击驱动安装程序安装驱动,然后将控制板上电,这时PC会提示发现新的USB设备,按向导提示操作即可。开发板上电后如果驱动程序已经安装好这时可以看到DNW的标题栏显示USBOK,点击DNW菜单CONFIGURATION,设置BAUDRATE为115200,COMPORT为COM1,DOWNLOADADDRESS为0X30000000。DNW设置参数如图6所示。图6DNW参数设置33建立交叉编译环境嵌入式系统开发环境一般采用宿主机目标机HOSTTARGET模式。由于多数嵌入式目标系统不能提供足够的资源供编译过程使用,因而只能将编译过程转移到高性能基于ARM的智能机器人图像采集系统软件设计7的PC机中进行。这就存在一个问题宿主机和目标机的体系结构不同,在宿主机平台上运行的程序无法运行在ARM平台上。因此需要建立交叉编译环境,以生成可在目标机上运行的二进制系统代码,然后再将系统代码移植到目标板上3。在INTERNET上可以得到一整套的交叉编译工具。本次设计选用ARMLINUXGCC432,该工具包括C/C编译器、汇编器、链接器、嵌入式系统的标准C库、GDB代码调试器,具有较强的通用性。下面为安装设置过程1在宿主机上安装LINUX操作系统。2下载ARMLINUXGCC432TGZ文件,并复制到LINUX用户目录下。3进入用户目录,执行解压安装命令TARXVZFARMLINUXGCC432TGZC/USR/LOCAL/ARM/432/,把ARMLINUXGCC432安装到/USR/LOCAL/ARM/432目录4。4执行命令SUDOGEDIT/ROOT/BASHRC,打开BASHRC文件,在其中添加命令行EXPORTPATHPATH/USR/LOCAL/ARM/432/BIN,以将交叉编译器路径加入系统环境变量,使得SHELL和MAKE工具能正确地找到安装在/USR/LOCA/ARM/432目录下的编译器及二进制工具。保存退出。5重新登录系统,运行命令ARMLINUXGCCV,查看交叉编译环境已安装成功。交叉编译环境建立好后,在目标机上运行的可执行代码都可以由它来编译,可以充分利用主机的丰富资源,生成目标机代码。34系统移植嵌入式系统软件分为四层,分别是BOOTLOADER、LINUXKERNEL、根文件系统、应用程序,由于嵌入式采用交叉开发方式,应用程序在宿主机上开发,通过交叉编译后下载到开发板运行,所以开发板的系统只需移植BOOTLOADER、根文件系统和LINUXKERNEL即可。系统软件分层如图7所示图7嵌入式系统软件分层图341BOOTLOADERBOOTLOADER是在操作系统内核运行之前运行的一段程序。这段程序通过初始化硬基于ARM的智能机器人图像采集系统软件设计8件设备、建立内存空间的映射图,将系统的软硬件环境带到一个合适正确的状态,以便为最终调用操作系统内核准备好正确的环境。从操作系统的角度看,BOOTLOADER的总目标就是正确地调用内核来执行4。在嵌入式系统中,BOOTLOADER是严重地依赖于硬件来实现的。不同的嵌入式体系结构对于BOOTLOADER的要求是不同的,此外,BOOTLOADER对嵌入式板级设备的配置有具体的要求。嵌入式LINUX操作系统内核启动时需要很多参数,这些参数必须通过BOOTLOADER来传递,并且内核一般是压缩存放到外存上的,从外存到内存的拷贝也是由BOOTLOADER来完成的,BOOTLOADER还能对操作系统内核进行调试,所以嵌入式操作系统移植的成功与否与BOADLOADER密不可分。为提高开发效率,本主控板的BOOTLOADER采用友善之臂公司开发的SUPERVIVI,SUPERVIVI是在韩国MIZI公司开发的VIVI的基础上改进得来的BOOTLOADER,完美支持本主控板的核心板硬件,并将常用的一些操作封装为简单的命令,使操作更简单明了。342内核定制内核是一个操作系统的核心,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。LINUX内核以独占的方式执行最底层的任务,保证系统正常运行,协调多个并发进程,管理进程使用的内存,使它们相互之间不产生冲突,满足进程访问磁盘的请求等等5。LINUX内核定制步骤如下1进入LINUX内核目录LBWUBUNTUCDLINUX/LINUX2629/。2输入MAKEDISTCLEAN清除所有生成的文件。3将目录ARCH/ARM/CONFIGS/下的S3C2410_DEFCONFIG文件拷贝到内核目录下替换CONFIG文件,在内核目录下输入MAKEMENUCONFIGARCHARM进入内核配置界面。根据开发项目所需资源在S3C2410_DEFCONFIG的基础上增加需要的文件删除不需要的。配置完成后保存退出。内核配置界面如图8所示基于ARM的智能机器人图像采集系统软件设计9图8内核配置界面4编译内核MAKEUIMAGEARCHARMCROSS_COMPILEARMLINUX,编译完成在ARCH/BOOT/目录下产生内核文件ZIMAGE。343根文件系统制作根文件系统首先是一种文件系统,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所MOUNT的第一个文件系统,没有根文件系统,LINUX将无法正常启动,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行,根文件系统一直以来都是所有类UNIX操作系统的一个重要的组成部分,也可以认为是嵌入式LINUX系统区别于其他一些传统嵌入式操作系统的重要特征,它给LINUX带来了许多强大和灵活的功能,同时也带来了一些复杂性。设计时必须要清楚了解根文件系统的基本结构,细心选择所需要的系统库、内核模块和应用程序等,并配置好各种初始化脚本,以及选择合适的文件系统类型并放到实际的存储设备的合适位置6。根文件系统由一些列目录组成,目录中包含了应用程序、C库、以及相关的配置文件。下面为针对本设计制作的一个根文件系统。1进入用户目录LBWUBUNTUCD/HOME/LBW/2创建根文件系统的目录MKDIRROOTFS基于ARM的智能机器人图像采集系统软件设计10CDROOTFSMKDIRBINDEVETCLIBPROCSBINSYSUSRMNTTMPVARMKDIRUSR/BINUSR/LIBUSR/SBINLIN/MODULES3创建设备文件CDDEV/MKNODM666CONSOLEC51MKNODM666NULLC13CD4安装/ETCETC目录下存放着各种配置文件,可以直接从网络上下载。本次设计采用的是友善之臂提供的ETC包TARETCTARGZC/HOME/LBW/ROOTTFS5编译内核模块进入LINUX内核目录输入MAKEMODULESARCHARMCROSS_COMPILEARMLINUX6安装内核模块输入MAKEMODULES_INSTALLARCHARMINSTALL_MOD_PATH/HOME/LBW/ROOTFS7配置BUSYBOXBUSYBOX是标准LINUX工具的一个单个可执行实现。BUSYBOX包含了一些简单的工具,例如CAT和ECHO,还包含了一些更大、更复杂的工具,例如GREP、FIND、MOUNT以及TELNET。有些人将BUSYBOX称为LINUX工具里的瑞士军刀简单的说BUSYBOX就好像是个大工具箱,它集成压缩了LINUX的许多工具和命令。嵌入式中实现的命令都是由BUSYBOX提供的。进入BUSYBOX目录,执行MAKEMENUCONFIG进入BUSYBOXSETTINGSBUILDOPTIONS选中“BUILDBUSYBOXASASTATICBINARY”,静态链接。进入CROSSCOMPILERPREFIXARMLINUXINSTALLATIONOPTIONS选中“DONTUSE/USR”,选中该项可以避免BUSYBOX被安装到宿主机系统的/USR目录下,破坏宿主机系统。进入BUSYBOXINSTALLATIONPREFIX/HOME/LBW/ROOTFS该选项表明编译后的BUSYBOX的安装位置。8编译、安装BUSYBOXMAKEARCHARMCROSS_COMPILEARMLINUXMAKEINSTALL9制作RAMDISK输入GENEXT2FSB8192D/XXX/ROOTFSRAMDISK生成RAMDISKIMG文件。基于ARM的智能机器人图像采集系统软件设计11344系统移植根文件系统制作完成后,得到SUPERVIVI、ZIMAGE、RAMDISK三个文件,需要通过以下步骤,将这三个文件移植到开发板上。1开发板选择NORFLASH启动模式,使用JTAG口将SUPERVIVI下载到NORFLASH中。2连接好USB接口,打开DNW。3点击“SERIALPORT”CONNECT进入BIOS功能菜单。4选择功能号F对NANDFLASH进行分区。5选择功能号V下载SUPERVIVI,点击“USBPORTTRANSMIT”选项,选择SUPERVIVI。6选择功能号K下载内核文件,点击“USBPORTTRANSMIT”选项,选择编译好的内核文件ZIMAGE。7选择功能号Y下载根文件系统,点击“USBPORTTRANSMIT”选项,选择制作好的根文件RAMDISKIMG。8选择NANDFLASH模式,重新启动开发板。35驱动程序设计351LINUX设备驱动程序设备驱动最通俗的解释就是“驱使硬件设备行动”。驱动与底层硬件直接打交道,按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的轮询、中断处理、DMA通信,进行物理内存向虚拟内存的映射等7,最终让通信设备能收发数据,让显示设备能显示文字和画面,让存储设备能记录文件和数据。驱动针对的对象是存储器和外设,LINUX把存储器和外设分成字符设备、块设备和网络设备三个基础大类。字符设备指那些必须以串行顺序依次进行访问的设备,如触摸屏、磁带驱动器、鼠标等。块设备可以用任意顺序进行访问,以块为单位进行操作,如硬盘、软驱等。字符设备不经过系统的快速缓冲,而块设备经过系统的快速缓冲。但是,字符设备和块设备并没有明显的界限,如FLASH设备符合块设备的特点,但是仍然可以把它作为一个字符设备来访问8。LINUX设备驱动与整个软硬件系统的关系如图9所示用户应用程序LINUX文件系统LINUX系统调用接口C库磁盘/FLASH文件系统套接字网络设备驱动硬件字符设备驱动TCP/IP块设备驱动进程管理内存管理操作系统图9LINUX设备驱动与软硬件系统的关系352PWM驱动程序设计根据功能划分,设备驱动程序可分为以下几部分基于ARM的智能机器人图像采集系统软件设计121驱动程序的注册和注销。2设备的打开和释放。3设备的读写操作。4设备的控制操作。5设备的中断和轮询处理。LINUX2626内核本身包含了本次设计所需的大多驱动,如串口驱动、USB摄像头驱动、LCD驱动、按键驱动等,这样有效的节约了开发时间。但是LINUX提供的驱动不一定能完全满足设计的需求,根据设计需求编写一个能控制频率和占空比的PWM驱动程序MINI2440_PWMC,以下为PWM驱动程序结构1设置PWM波占空比为50,频率为FREQ函数STATICVOIDPWM_SET_FREQUNSIGNEDLONGFREQ2设置PWM波频率为FREQ函数STATICVOIDPWM_SET_FREQANDRATIO_FREQUNSIGNEDLONGFREQ3结合第二个子函数设置PWM波占空比为RATIOSTATICVOIDPWM_SET_FREQANDRATIO_RATIOUNSIGNEDLONGRATIO4停止产生PWM波函数VOIDPWM_STOPVOID5OPEN调用具体函数STATICINTS3C24XX_PWM_OPENSTRUCTINODEINODE,STRUCTFILEFILE6READ调用具体函数STATICINTS3C24XX_PWM_CLOSESTRUCTINODEINODE,STRUCTFILEFILE7IOCTL调用具体函数STATICINTS3C24XX_PWM_IOCTLSTRUCTINODEINODE,STRUCTFILEFILE,UNSIGNEDINTCMD,UNSIGNEDLONGARG8FILE_OPERATIONS结构体,驱动程序与操作系统内核的接口STATICSTRUCTFILE_OPERATIONSDEV_FOPSOWNERTHIS_MODULE,OPENS3C24XX_PWM_OPEN,RELEASES3C24XX_PWM_CLOSE,IOCTLS3C24XX_PWM_IOCTL,9设备注册和注销STATICSTRUCTMISCDEVICEMISC基于ARM的智能机器人图像采集系统软件设计13MINORMISC_DYNAMIC_MINOR,NAMEDEVICE_NAME,FOPSSTATICINT_INITDEV_INITVOIDSTATICVOID_EXITDEV_EXITVOID10模块创建时的入口点MODULE_INITDEV_INIT11模块卸载时的入口点MODULE_EXITDEV_EXIT353驱动程序安装驱动程序安装有模块方式和直接编译进内核两种方式,第一种方法所用的时间短主要用于驱动程序开发阶段,第二种方法需要重新编译所有内核文件所用时间长主要用于发布阶段9。1模块方式创建MAKEFILE文件,文件内容如下IFNEQKERNELRELEASE,OBJMMINI2440_PWMOELSEKDIR/LIB/MODULES/26294FRIENDLYARM/BUILDALLMAKECKDIRMPWDMODULESARCHARMCROSS_COMPILEARMLINUXCLEANRMFKOOMODOMODCSYMVERSENDIF第六行和第八行必须用TAB键来空格,否则无法编译。将MINI2440_PWMC和MAKEFILE文件放到同一目录下。进入目录,运行MAKECLEAN和MAKE生成驱动模块MINI2440_PWMKO文件。将生成的MINI2440_PWMKO通过串口下载到开发板/PWM目录下,在开发板上新建/LIB/MODULES/26294FRIENDLYARM目录。在开发板/PWM目录下运行INSMODMINI2440_PWMKO动态加载驱动模块,在/PWM目录下运行RMMODMINI2440_PWM以卸载驱动模块。2直接编译进内核基于ARM的智能机器人图像采集系统软件设计14通过动态加载驱动模块方式测试驱动程序无误后将驱动程序直接编译进内核可以避免重复加载和卸载的工作。将驱动程序拷贝到内核文件DRIVERS/CHAR目录下。修改KCONFIG文件SUDOGEDITKCONFIG,在文件中按照格式加入CONFIGMINI2440_PWM_DRIVERBOOL“MYPWMDRIVER“保存退出,修改过后会在MENUCONFIG配置界面中生成“MYPWMDRIVER“选项。修改MAKEFILE文件,SUDOGEDITMAKEFILE,按照格式加入以下内容OBJCONFIG_MINI2440_PWM_DRIVERMINI2440_PWMO按照内核定制步骤,在MENUCONFIG配置界面中选上“MYPWMDRIVER“,重新编译内核并移植系统。4应用程序设计应用程序是指为了完成某项或某几项特定任务而被开发运行于操作系统之上的计算机程序。它位于嵌入式系统软件最顶层。本设计主要涉及到按键开发、LCD显示、图像采集、图像处理、控制策略等几部分,图10是系统总体流程图。基于ARM的智能机器人图像采集系统软件设计15图10系统总体流程图基于ARM的智能机器人图像采集系统软件设计1641按键应用程序开发开发板总共有6个用户测试用按键,它们均从核心板的CPU中断引脚直接引出,属于低电平触发,LINUX内核中自带有按键驱动程序,中断等操作都在驱动程序里实现。如图11为按键应用程序流程图图11按键程序流程图42LCD液晶显示程序开发421LINUX的帧缓冲设备FRAMEBUFFERFRAMEBUFFER是出现在22XX内核当中的一种驱动程序接口。这种接口将显示设备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,写操作可以立即反应在屏幕上。该驱动程序的设备文件一般是/DEV/FB0、/DEV/FB1等等10。对于用户而言,它和/DEV下面的其他设备没有什么区别,用户可以把FRAMEBUFFER看成一块内存既可以向这块内存中写入数据,也可以从这块内存中读取数据。显示器将根据相应指定内存块的数据来显示对应的图形界面。而这一切都由LCD控制器和相应的驱动程序来完成,如图12所示。从图12可以看出,帧缓冲设备在LINUX中也可以看做是一个完整的子系统,大体由FBMEMC和XXXFBC组成。向上给应用程序提供完善的设备文件操作接口即对FRAMEBUFFER设备进行READ、WRITE、IOCTL等操作,接口函数在LINUX提供的FBMEMC文件中实现;向下提供了硬件操作的接口,只是这些接口LINUX并没有提供实现,因为这要根据具体的LCD控制器硬件进行设置。通过/DEV/FB,应用程序的操作主要有以下几种1读/写READ/WRITE/DEV/FB。基于ARM的智能机器人图像采集系统软件设计172映射(MAP)操作。3I/O控制。图12帧缓冲设备驱动程序结构图422液晶显示流程本设计采用TFT35寸液晶屏,大小为240320,液晶显示分为两部分,一部分用于显示图像(240240),一部分用于显示速度、转角等参数。如图13为液晶显示程序流程图。1打开/DEV/FB设备文件SCREEN_FBDSCREEN_FBDOPEN“/DEV/FB0“,O_RDWR2用IOCTRL函数获取当前显示屏幕的分辨率,每个像素点的比特数/获取屏幕相关参数/IOCTLSCREEN_FBD,FBIOGET_FSCREENINFO,IOCTLSCREEN_FBD,FBIOGET_VSCREENINFO,/计算屏幕缓冲区大小/FB_SIZEFB_VARYRESFB_FIXLINE_LENGTH3将屏幕缓冲区映射到用户空间FB_ADDRCHARMMAPNULL,FB_SIZE,PROT_READ|PROT_WRITE基于ARM的智能机器人图像采集系统软件设计18,MAP_SHARED,SCREEN_FBD,04显示图片和参数PRINT_SCREENUNSIGNEDSHORTBUF,INTWIDTH,INTHEIGHT;DRAW_ASCIIINTLINE,INTROW,UNSIGNEDSHORTCOLOR,UNSIGNEDSHORTVALUE5解除内存映射关闭设备MUNMAPFB_ADDR,FB_SIZECLOSESCREEN_FBD图13液晶显示程序流程图43图像采集431VIDEO4LINUX2VIDEO4LINUX2简称V4L2,是LINUX中关于视频设备的内核驱动,在LINUX中,视基于ARM的智能机器人图像采集系统软件设计19频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/DEV/VIDEON下,N可能为0,1,2,3,一般为011。432V4L2视频采集流程如图14为视频采集流程图图14视频采集流程图1打开设备文件VIDEO_FDOPEN“/DEV/VIDEO0“,O_RDWR,02查看当前视频设备能够采集图像的大小IOCTLVIDEO_FD,VIDIOCGCAP,设计中所用摄像头能够采集图像最大为640480,最小为4832,经过测试实际只能采集大小为640480和320240的图像。基于ARM的智能机器人图像采集系统软件设计203设置视频捕获格式CLEARFMTFMTTYPEV4L2_BUF_TYPE_VIDEO_CAPTUREFMTFMTPIXWIDTH320/设置采集到的图像宽度为320FMTFMTPIXHEIGHT240/设置采集到的图像高度为240FMTFMTPIXPIXELFORMATV4L2_PIX_FMT_JPEGIFIOCTLVIDEO_FD,VIDIOC_S_FMT,RETURN14向驱动申请2个帧缓存REQCOUNT2REQTYPEV4L2_BUF_TYPE_VIDEO_CAPTUREREQMEMORYV4L2_MEMORY_MMAPIFIOCTLVIDEO_FD,VIDIOC_REQBUFS,RETURN1摄像头采集图像采用单独一个进程,采集一张图像大概需要50MS,图像处理和控制部分大概需要90MS,所以申请2个缓存,以缩短程序执行的总时间。申请3个以上的效果和申请2个差不多。5将申请到的帧缓冲映射到用户空间STRUCTBUFFERVIDEOBUFCALLOCREQCOUNT,SIZEOFVIDEOBUFFORNUMBUFS0NUMBUFS40ELSEAIINTLONGINT240100/CENTERVALUEICENTERVALUEICENTERANGLE_LINEI/100JIAODUKP1A0KP2A1KP3A2/100SERVOJIAODU函数中KP1、KP2、KP3分别表示0、150、200三行的转角分量,此次设计中KP1设置为50,KP2设置为25,KP3设置为25。452电机控制电机采用比例微分控制PD,这里需要用到一个测速编码器来测量给定采样时间内基于ARM的智能机器人图像采集系统软件设计28编码器采样的脉冲个数(个数的多少能反应速度的大小)。EVI_REFPULSEECPULSEB_PULSEADDKPE/100KDEC/100SSADDIFSUPSPEEDSUPSPEED直道和弯道的速度给定值是不一样的,速度的上限值也不一样。基于ARM的智能机器人图像采集系统软件设计29结束语本课题实现了基于ARM和LINUX的嵌入式图像采集系统,并控制小车沿着赛道黑线行驶,设计所作的工作主要包括以

温馨提示

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

最新文档

评论

0/150

提交评论