基于ARM10与LINUX智能小车系统的设计.doc_第1页
基于ARM10与LINUX智能小车系统的设计.doc_第2页
基于ARM10与LINUX智能小车系统的设计.doc_第3页
基于ARM10与LINUX智能小车系统的设计.doc_第4页
基于ARM10与LINUX智能小车系统的设计.doc_第5页
免费预览已结束,剩余34页可下载查看

下载本文档

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

文档简介

毕业生论文基于ARM的智能小车系统的设计摘要基于ARM的嵌入式系统其性能优良,移植性好,已广泛应用在各个行业,因此将ARM微处理器应用于智能小车的控制系统是一种较好的选择。基于此,我们设计了一种基于ARM10与Linux控制的智能循迹小车,通过编程使它沿着我们提前铺好的黑色胶带前进,十字路口停下通过摄像头驱动拍照使用WIFI传输后继续前进。这种基于ARM 10的智能型设计将运用于很广阔的地方。根据Linux嵌入式开发平台的需要,配置相应的开发工具、合理剪裁Linux内核、选择合适的Bootloader和根文件系统,最后把它们移植到ARM10开发平台上,搭建好开发环境。接着研究了Linux环境下的设备驱动程序,深入了解设备模型和设备驱动程序开发框架以及并发、内存、中断机制,从而更好的实现其功能。 本次我们设计制作了一款具有智能判断功能的小车,功能强大。小车具有以下几个功能:循迹功能;自动拍照功能。作品可以作为高级智能玩具,也可以作为嵌入式控制的强有力的应用实例。【关键词】 ARM10 Linux 智能小车 自动拍照 循迹17目录基于ARM的智能小车系统的设计1摘要1目录2第一章 引言41.1背景介绍41.2可行性分析5第二章 需求分析62.1 硬件需求62.2软件需求7第三章硬件分析与设计83.1 硬件分析83.1.2 电路板模块93.1.3 传感器模块103.1.4 转接板模块123.2硬件设计133.2.1总体设计133.2.2驱动电路143.2.3信号检测模块153.2.4主控电路16第四章 软件分析与设计164.1驱动程序设计164.1.1USB驱动164.1.2 CMMERA驱动184.1.3WIFI驱动194.2软件详细设计204.2.1循迹模块214.2.2服务器端模块224.2.3 拍照模块244.2.4 传输模块244.3 客户端模块254.3.1 接收模块254.3.2 处理模块264.3.3 显示模块27第五章 项目实施275.1 环境的搭建275.1.1 Bootlader275.1.2 网络环境285.1.3 根文件系统的编译与烧录295.1.4 内核的编译与烧录295.2 代码的测试305.2.1 白盒测试305.2.2 黑盒测试325.2.3 性能测试325.3单位系统测试33第六章 总结34参考文献35致谢36第一章 引言随着现代化工业的发展,自动化控制出现了许多新的要求。“PC+运动控制器”是目前开放式数年控系统中最常见的形式。主PC用于人机界面、存贮和通讯,DSP或A-SIC作从属CPU来实现实时控制、I/O中断和计算等。而嵌入式技术依靠其体积小、成本低、功能强、可裁剪等特点,适应了工业自动化发展的最新要求。单片机作为控制系统的微处理器,在数据处理和代码存储等方面都已经无法满足系统的需求,ARM微处理器资源丰富,具有良好的通用性,其主要优点是高性能、低价格、低功耗。ARM本身是32位微处理器,但却集成了16位的处理器如51系列单片机使用,同时具有32位处理器的速度。基于ARM的嵌入式系统其性能优良,移植性好,已广泛应用在各个行业,因此将ARM微处理器应用于智能小车的控制系统是一种较好的选择。基于此,我们做一种基于ARM控制的智能小车,提高了对直流电机的控制效率,在ARM上移植了LINUX操作系统,设计出了友好的人机界面,使开发过程式变得容易。并对控制系统进行模块化设计,有利于智能小车的功能扩展和升级。我们根据ARM和LINUX来完成智能小车控制设计。其具体内容如下:第一章从技术、经济、社会价值、盈亏方面分析了智能小车的可行性。第二章介绍需求分析。第三章,硬件设计。在硬件设计中分别又介绍了ARM10处理器的相关知识,光电传感器,电路板(有关电源处理方面),转接板,还有硬件的实现。第四章对软件的设计的介绍,其中又包括三个模块:循迹模块、驱动板模块、传感器模块。第五章是对程序的测试。第六章就是项目的实施过程了,通过对环境的搭建、代码的测试、系统测试等方面,把整个项目最终实施出来。文中使用的硬件板式基于ARM10的硬件模块,还有使用到了PWM、UART、看门口电路、直流电机等相关内容。LINUX应用到了客服端/服务端的显示模块,还有图像传输、图像查看等相关内了。1.1背景介绍自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等领域。近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。人们在不断探讨、改造、认识自然的过程中,制造能替代人劳动的机器一直是人类的梦想。随着科学技术的发展,机器人的感觉传感器种类越来越多,其中视觉传感器成为自动行走和驾驶的重要部件。视觉的典型应用领域为自主式智能导航系统,对于视觉的各种技术而言图像处理技术已相当发达,而基于图像的理解技术还很落后,机器视觉需要通过大量的运算也只能识别一些结构化环境简单的目标。视觉传感器的核心器件是摄像管或CCD,目前的CCD已能做到自动聚焦。但CCD传感器的价格、体积和使用方式上并不占优势,因此在不要求清晰图像只需要粗略感觉的系统中考虑使用接近觉传感器是一种实用有效的方法。机器人要实现自动导引功能就必须要感知导引线,感知导引线相当给机器人一个视觉功能。使用传感器感知路线并作出相应的执行动作。该智能小车可以作为机器人的典型代表。整个电路系统分为检测、控制、驱动三个模块。首先利用光电对管对路面信号进行检测,经过比较器处理之后,送给软件控制模块进行实时控制,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。1.2可行性分析现智能小车发展很快,从智能玩具到其它各行业都有实质成果。其基本可实现循迹、避障、检测贴片、寻光入库等基本功能,这几节的电子设计大赛智能小车又在向声控系统发展。但是, 现今对智能车辆的结构、运动特性、智能控制策略的研究并不完善, 因此有必要对智能车辆的仿真版本智能小车做更深驱动、人工智能、驱动电源的设计等诸多领域。单片机作为控制系统的微处理器,在数据处理和代码存储等方面都已经无法满足系统的需求,ARM 微处理器资源丰富,具有良好的通用性,其主要优点是高性能、低价格、低功耗。ARM 10 本身是32位微处理器,但却集成了16位的Thumb指令集,这使得ARM 10可以代替16 位的处理器如51系列单片机使用, 同时具有32位处理器的速度。目前有多种嵌入式操作系统,它们使得开发实时应用程序的设计和扩展变得容易,不需要大的改动就可以增加新的功能,把应用程序分割为若干独立运行的模块,使得程序的设计变得简化许多;对于实时性要求高的应用做到了快速响应和可靠处理;使得整个系统的资源得到很好的管理和应用。常见的嵌入式操作系统有:Vxworks、WindowsCE、Palm OS、QNX、C/OS、嵌入式Linux。Linux的开放源代码,内核小、功能强大、系统健壮、效率高、易于裁减。可以支持数十种CPU芯片。嵌入式Linux就是指对Linux经过小型化裁减后,能够固化在容量只有几百K字节或几兆字节的储存器芯片中,用于特定嵌入式场合的专用Linux操作系统。Linux可应用于多种硬件平台。Linux己经被移植到多种硬件平台,这对受开销、时间限制的研究与开发项目是很有吸引力的。可以在标准平台上开发然后移植到具体的硬件上,加快了软件与硬件的开发过程;可以随意的配置,不需要任何的许可证或商家的合作关系。唯一的限制是开发者必须做出对Linux社区有益的改动;它是免费的,源代码可以得到,这是最吸引人的。毫无疑问,这会节省大量的开发费用;优秀的网络支持,微内核直接提供网络支持,而不必像其他操作系统要外挂TCP/IP协议包;Linux高度模块化使添加部件非常容易;Linux在台式机上的成功,也保证了Linux在嵌入式系统中的辉煌前景。基于Linux的嵌入式操作系统常见的有ARMLinux、RTLinux和CLinux等。本设计中选择ARMLinux作为操作系统。第二章 需求分析2.1 硬件需求ARM处理器是一种低功耗高性能的32位RISC处理器。ARM处理器共有31个32位寄存器,而其中16个可以在任何模式下看到。它的指令为简单的加载与存储指令。ARM一个特点是它所有的指令都带有条件。另一个特征是可以在加载数值的同时进行算术和移位操作。它可以在几种模式下操作,包括通过使用SWI指令从用户模式进入到系统模式。ARM处理器是一个综合体,允许将其处理器通过协处理器接口进行紧耦合;它还包括几种内存管理单元的变种,包括简单的内存保护到复杂的页面层次。根据智能小车系统的设计需求,我选用了以ARM10处理器为核心的电路板。所接电源是9.6V,系统内部却只需要5V电源,因此引入了降低电压的模块,这样一来避免小车会被烧坏,同时在设计过程中需要实现小车的循迹功能,因此我们又采用了光电传感器作为探测小车行驶的路径,可下载循迹的程序到串口上,让小车自主的去探测检索路径,从而能准确稳当的行驶。而且为了更好的将ARM10与小车的各部件连接起来,因此设计了电路板,辅助主控芯片更好的完成需求。在前期的调试中还用到了串口,数据传输和接收都要用串口,所以串口也是必不可少的工具之一。为了能更好的实现小车的功能,我们还采用了HJTAG工具。同时要想使小车行驶必不可少的还有电源和摄像头等相关硬件。本设计采用的是ARM10微处理器,这系列的主要特点如下:支持DSP指令集,适合于需要高速数字信号处理的场合;6级流水线,指令执行效率更高;支持32位ARM指令集和16位Thumb指令集;支持32位的高速AMBA总线接口;支持VFP10浮点处理协处理器;全性能的MMU,支持众多主流嵌入式操作系统;支持数据Chche和指令Chche,具有更高的处理能力;主频最高可达400MHz;内嵌并行读/学操作部件。ARM10E系列微处理器主要应用于下一代无线设备、数字消费品、成像设备、工业控制、通信和信息系统等领域。2.2软件需求Linux操作系统是一种自由和开放代码的类Unix操作系统,并且Linux继承了Unix操作系统结构清晰的特点,在linux下的文件结构非常有条理,Linux支持多种语言,因此我们选择Linux作为小车的软件操作系统, 型号为Redhat Linux,因为Redhat是全球最大的开源技术厂家,其产品Red Hat Linux也是全世界应用最广泛的Linux。由于小车的行驶需要特定的环境,则要为小车搭建一个运行环境,所以要用到Bootloader,在调试的过程中还需要用到Qt编程工具。Linux的核心是由Linus Torvalds在1991年开发出来,并放到网络上供大家下载学习使用。开放源代码,内核小、功能强大、系统健壮、效率高、易于裁减。可以支持数十种CPU芯片。嵌入式Linux就是指对Linux经过小型化裁减后,能够固化在容量只有几百K字节或几兆字节的储存器芯片中,用于特定嵌入式场合的专用Linux操作系统。Linux操作系统的特点(1)开放性:指系统遵循世界标准规范,特别是遵循开放系统互连(OSI)国际标准。 (2)多用户:是指系统资源可以被不同用户使用,每个用户对自己的资源(例如:文件、设备)有特定的权限,互不影响。(3)多任务:它是指计算机同时执行多个程序,而且各个程序的运行互相独立。良好的用户界面 :Linux向用户提供了两种界面:用户界面和系统调用。Linux还为用户提供了图形用户界面。它利用鼠标、菜单、窗口、滚动条等设施,给用户呈现一个直观、易操作、交互性强的友好的图形化界面。(4)设备独立性:是指操作系统把所有外部设备统一当作成文件来看待,只要安装它们的驱动程序,任何用户都可以象使用文件一样,操纵、使用这些设备,而不必知道它们的具体存在形式。Linux是具有设备独立性的操作系统,它的内核具有高度适应能力 (5)提供了丰富的网络功能:完善的内置网络是Linux一大特点。 (6)可靠的安全系统:Linux采取了许多安全技术措施,包括对读、写控制、带保护的子系统、审计跟踪、核心授权等,这为网络多用户环境中的用户提供了必要的安全保障。(7)良好的可移植性:是指将操作系统从一个平台转移到另一个平台使它仍然能按其自身的方式运行的能力。Linux是一种可移植的操作系统,能够在从微型计算机到大型计算机的任何环境中和任何平台上运行。在Linux这样的优势下,我们还需要用到ADS和AXD调试工具,让循迹还有转弯等与硬件相关的程序能够调试后正常运行。第三章硬件分析与设计3.1 硬件分析3.1.1 ARM10处理器1. ARM10处理器介绍ARM10E系列微处理器具有高性能、低功耗的特点,由于采用了新的体系结构,与同等的ARM9器件相比较,在同样的时钟频率下,性能提高了近50%,同时,ARM10E系列微处理器采用了两种先进的节能方式,使其功耗极低。图31微处理器实图2ARM10E系列微处理器的主要特点如下:(1). 支持DSP指令集,适合于需要高速数字信号处理的场合。(2). 6级流水线,指令执行效率更高。(3). 支持32位ARM指令集和16位Thumb指令集。(4). 支持32位的高速AMBA总线接口。(5). 支持VFP10浮点处理协处理器。(6). 全性能的MMU,支持众多主流嵌入式操作系统。(7). 支持数据Chche和指令Chche,具有更高的处理能力。(8). 主频最高可达400MHz。(9). 内嵌并行读/学操作部件。3.1.2 电路板模块1. 电池的选择文本选用的用于速度控制的直流电池的型号为SN Ni-MH,容量为2500mAh,电压为1.2V,一共是八节电池。而我们小车的电压只用到5V,因此,我们必须采用降压控制使+9.6V的电压转换成+5V电压。电路原理如下图所示:图3.2 电池电源模块图3.3 开关电源模块智能小车前行的过程中受到电池电压降低、电磁场、轮胎磨擦、转向轮转向阻力等不定因素的干扰, 开环控制无法满足性能要求, 因此闭环控制是必须的。实施闭环控制须对速度进行实时探测。3.1.3 传感器模块1. 红外传感器我们所使用的红外传感器这电子市场中直接购买的集成产品,其将红外发射管和接收管集于自身,白色为发射管,黑色为接收管。发射管不断地向外发射红外线,接收管同样一直处于接收状态,当有红外光线被反射进入接收管时,传感器将输出为低电平,否则输出为高。不同颜色对红外光线有不同的发射率,白色的很高,而黑色的很低,当照射至白色路面时,大部分光线被反射由接收管接收,传感器输出低电平,当照射至黑色路面时,大部分光线被吸收接收管接收不到足够的光线而输出高电平。3个传感器同时向MCU传送3个数字信号,MCU通过判断高低电平的位置从而判断出黑线相对于车身的信置,根据程序算法做出相应的反应。该传感器在5V电源下工作,正常检测照射前方距离为2-5CM。其背部有可调电阻,可通过旋转可调电阻调节传感器的感应距离以及灵敏度。通过调整将3只传感器性能基本一致,并符合感应距离以及灵敏度的要求,保证路径检测的稳定性。在传感器底部有三个接口,分别是电源线(+)、地线()、信号线(0)。 如图所示。电源线和地线接受提供的5V电源,信号线则直接与MCU的I/O端口。注意,要使传感器的信号线输出稳定的高电平,需要接入上拉电阻。若MCU的I/O端口本身带有上拉功能时,可以不接入上拉电阻,但要通过软件开启端口的上拉功能。我们设计的智能小车采用的路径识别方案为光电传感器,其电源供给以及信号传输由两根排线与MCU相连接。三个传感器以相等间距组装在小车的前方,承接安装传感器的底板是整块的PCB板,PCB板的后面由两个螺丝与小车相连,前方为拱形,两边和中间都有防撞调设备保护。图3.4 红外传感器实物图图3.4 红外传感器(PCB)图3.5循迹原理图3.1.4 转接板模块此模块主要用于主控制模块(ARM10的芯片)和小车之间数据收发的一个桥梁,帮助小车更好的实现所需功能。图3.6 转接板(PCB)图3.7 转接板实物图图3.7为转接板的样图,可以清楚的看到转接板上的串口等。将转接板上的两排10针引脚分别接到电机驱动和传感器的10针引脚上,接上电源和小车电机,然后将核心板的电源焊接好(注意:3脚为正极,另一端为负极)后,将另一端接到转接板的排阵上,接上核心板上的USB接口。3.2硬件设计3.2.1总体设计智能小车采用前轮驱动,前轮左右两边各用一个电机驱动,调制前面两个轮子的转速起停从而达到控制转向的目的,后轮是万象轮,起支撑的作用。将循迹光电对管分别装在车体下的左右。当车身下左边的传感器检测到黑线时,主控芯片控制左轮电机停止,车向左修正,当车身下右边传感器检测到黑线时,主控芯片控制右轮电机停止,车向右修正。避障的原理和循迹一样,在车身右边装一个光电对管,当其检测到障碍物时,主控芯片给出信号报警并控制车子倒退,转向,从而避开障碍物。ARM10循迹红外对管时钟电路复位电路报警电路电机驱动红外对管图3.8 主板设计框图3.2.2驱动电路电机驱动一般采用H桥式驱动电路,L298N内部集成了H桥式驱动电路,从而可以采用L298N电路来驱动电机。通过单片机给予L298N电路PWM信号来控制小车的速度,起停。其引脚图如3.9,驱动原理图如图3.10。图3.9 L298N引脚图 图3.10 电机驱动电路3.2.3信号检测模块小车循迹原理是小车在画有黑线的白纸“路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”黑线。笔者在该模块中利用了简单、应用也比较普遍的检测方法红外探测法。红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号,再通过LM324作比较器来采集高低电平,从而实现信号的检测。避障亦是此原理。市面上有很多红外传感器,在这里我选用TCRT5000型光电对管。图3.11循迹原理图3.2.4主控电路本模块主要是对采集信号进行分析,同时给出PWM波控制电机速度,起停。以及再检测到障碍报警等作用。图3.2.5 主控电路图3.12主控电路图(PCB)第四章 软件分析与设计4.1驱动程序设计4.1.1USB驱动USB接口是一个主从方式、多设备连接的树状网络结构,USB主机必须具有对所有连接在总线上的不同类型USB设备进行管理的功能。Linux USB主机驱动程序可以同时支持多路USB总线功能,每路USB总线独立工作。每条总线上只有一个主机控制器,负责协调主机和设备间的通信,而设备不能主支向主机发送任何消息。四川托普信息技术职业学院毕业生论文图4.1 USB support配置界面从主机侧的观念去看,在Linux驱动中,USB驱动处于最底层的是USB主机控制器硬件,在其之上运行的是USB主机控制器驱动,主机控制器之上为USB核心层,再上层为USB设备驱动层。因此,在主机侧的层次结构中,要实现的USB驱动包括两类:USB主机控制器驱动和USB设备驱动,前者控制插入其中的USB设备,后者控制USB设备如何与主机通信。Linux内核USB驱动管理和协议处理的主要工作。主机控制器驱动和设备驱动之间的USB核心非常,其功能包括:通过定义一些数据结构、宏和功能函数,向上为设备驱动提供编程接口,向下为USB主机控制器驱动提供编程接口:通过全局变量维护整个系统的USB办公设备上;完成设备热插拔控制、总线数据传输控制等。图4.2 USB配置界面Linux内核中USB设备侧驱动程序分为3个层次,UDC驱动程序、Gadget API和Gadget驱动程序,UDC驱动程序直接访问硬件,控制UAB设备和主机间的底去通信,向上层提供与硬件相关操作的回调函数,当前Gadget API是UDC驱动程序回调函数的简单包装,Gadget驱动程序控制UWSB设备功能的实现。4.1.2 CMMERA驱动图4.3 内核配置多媒体设备配置界面配置好内核对Video4Linux驱动后,返回内核配置主界面,选中USB支持选项如图所示“USB support” 按回车,进入USB支持配置界面.图4.4 内核配置主界面USB支持在USB支持配置界面中,选中“USB Multimedia device”选项下的“USB OV511 Camera support”,使内核中加入OV511接口芯片的USB数字摄像头的驱动支持。图4.5 USB 摄像头驱动配置界面4.1.3WIFI驱动在主菜单里面,选择Networking support,按回车进入,按图下方的步骤一步步来配置WIFI驱动。图4.6主菜单1、网络协议选择Wireless;2、到内核配置主菜单,配置无线网卡驱动;3、Network device support并进入;4、无线网络设备项,并进入.4.2软件详细设计启动(小车前进)初始化I/O口扫描I/O口是否有变化输出相应的信号控制信息结束开始系统模块初始化主控制器模块入口采集路况信息检测水平原速前进减速调整电机模块控制是否偏离原速前进检测终点停止前进结束4.2.1循迹模块方案一:采用简易光电传感器结合外围电路探测,但实际效果并不理想,对行驶过程中的稳定性要求很高,且误测几率较大、易受光线环境和路面介质影响。在使用过程极易出现问题,而且容易因为 该部件造成整个系统的不稳定。故最终未采用该方案。方案二:采用两只红外对管(如图4.7),分别置于小车车身前轨道的两侧,根据两只光电开关接受到白线与黑线的情况来控制小车转向来调整车向,测试表明,只要合理安装好两只光电开关的位置就可以很好的实现循迹的功能。方案三:采用三只红外对管,一只置于轨道中间,两只置于轨道外侧,当小车脱离轨道时,即当置于中间的一只光电开关脱离轨道时,等待外面任一只检测到黑线后,做出相应的转向调整,直到中间的光电开关重新检测到黑线(即回到轨道)再恢复正向行驶。现场实测表明,小车在寻迹过程中有一定的左右摇摆不定,虽然可以正确的循迹但其成本与稳定性都次与第二种方案。通过比较,我选取第二种方案来实现循迹。图4.7 红外对管4.2.2服务器端模块39是否是是阻塞、等待客户连接请求发送连接成功信息开启端口成功显示错误读取指令程序关闭指令执行指令连接断开关闭连接建立连接结束线程客户端用户手动触发事件客户端发送指令线程开启服务端用户关闭程序输入指令提示错误是否否否指令正确4.2.3 拍照模块if(host=gethostbyname(argv1)=NULL) herror(gethostbyname error!);exit(1);printf(please input file:);scanf(%s,des);fdsrc=open(/etc/p asswd,O_RDONLY); if(fdsrch_addr);bzero(&(serv_addr.sin_zero),8);if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr) = -1)perror(connect error!);exit(1); while(recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)0)if (z=write(fddes,buf,20)0)perror(writing error!n);exit(1);4.2.4 传输模块#define MAXDATASIZE 100 /*每次最大数据传输量 */int main(int argc, char *argv)int fdsrc,fddes,nbytes;int flags=O_CREAT | O_TRUNC | O_WRONLY;int z;char buf50,src50,des50;int sockfd, recvbytes;/*char bufMAXDATASIZE;*/struct hostent *host;struct sockaddr_in serv_addr;if (argc 2) fprintf(stderr,Please enter the servers hostname!n);exit(1);close(sockfd);close(fddes);printf(transport file is over !);return 0;4.3 客户端模块线程开启连接服务器端连接成功等待一定时间读取指令执行指令连接断开关闭连接结束线程4.3.1 接收模块char buf50,src50,des50;printf(请输入源文件名:); /*提示输入源文件名*/scanf(%s,des); /*读入源文件名*/int sockfd,client_fd;/*套接字描述符*/int recvbytes;char *str;char nameMAXDATASIZE;/*定义用户名*/char send_strMAXDATASIZE;/*最多发出的字符不能超过MAXDATASIZE*/ struct sockaddr_in serv_addr;/*Internet套接字地址结构*/fd_set rfd_set, wfd_set, efd_set;struct timeval timeout;/*本次select的超时结束时间*/接收模块的难点在于处理异常,先把传输的时间控制好,以免让整个程序和小车都陷于死机状态,可以是两个进程同时运行,一个进程向另一个进程发文件。要给传过来的文件让出空间,这样才能让文件有地方可放,还得确认用户名,这样才能防止收到垃圾文件。4.3.2 处理模块if (fdsrc=open(*/etc/passwd,O_RDONLY)show ();将label中的内容通过调用show函数让它按照指定的格式显示。QLabel *label=new QLabel ( , 0); /初始化qlabel QPixmap pm (/root/a/1.JPG) ; /设定要显示的图片 label-setPixmap(pm) ; /将图片加载到label上 app.setMainWidget(label) ; /将图片设为放置在中间 label-show (); return app.exec() ;将小车沿途拍摄的照片按照以上设定的格式在屏幕上循环显示出来。第五章 项目实施5.1 环境的搭建 5.1.1 Bootlader1、bootLoader的作用PC 机中的引导加载程序由 BIOS和位于硬盘 MBR 中的 OS Boot Loader一起组成。BIOS 在完成硬件检测和资源分配后,将硬盘 MBR 中的 Boot Loader 读到系统的 RAM 中,然后将控制权交给 OS Boot Loader。Boot Loader 的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。嵌入式系统中,通常并没有像 BIOS 那样的固件程序,因此整个系统的加载启动任务完全由 bootLoader 来完成。bootloader的主要作用:(1)、初始化硬件设备;(2)、建立内存空间的映射图;(3)、完成内核的加载,为内核设置启动参数。2、bootLoader程序结构框架嵌入式系统中的boot Loader 的实现完全依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为第一阶段和第二阶段两大部分,依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在阶段1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而阶段2 则通常用C语言来实现,这样可以实现一些复杂的功能,而且代码会具有更好的可读性和可移植性。(1)、Boot Loader 的阶段1通常主要包括以下步骤:1)硬件设备初始化;2)拷贝Boot Loader的程序到RAM空间中;3)设置好堆栈;4)跳转到阶段2的C入口点。(2)、Boot Loader的阶段2通常主要包括以下步骤:1)初始化本阶段要使用到的硬件设备;2)系统内存映射(memory map);3)将kernel映像和根文件系统映像从Flash读到RAM空间中; 4)为内核设置启动参数;5)调用内核。 5.1.2 网络环境 在嵌入式硬件制板、焊接完成之后,就会进入嵌入式软件开发阶段。嵌入式软件的开发与通常软件的开发不同,其使用的编译方法为交叉编译。所谓交叉编译就是在一个平台上生成的代码可以在另一个平台上执行。一般把进行交叉编译的主机称为宿全机,把程序的实际运行环境成为目标机,也就是嵌入式系统环境。之所以要使用交叉编译主要是由于目标机平台的资源有限,无法自己运行编译器编译目标代码,所以需要在系统资源比较丰富的另一个平台上(宿主机平台)为目标机编译可执行代码。而宿主机和目标机的体系结构不同,具有不同的指令系统,因而需要相应的编译器(交叉编译器)将宿主机开发的软件翻译成目标机能够识别的机器代码。所以在开发软件之前首先要构建嵌入式软件的交叉编译环境。宿主机一般是PC机。本文在PC机的Fedora12操作系统里建立了一个能编译嵌入式Linux内核、驱动程序、应用程序的开发环境,其中主要工作有配置交叉编译工具链、配置NFS、配置tftp、配置minicom等。建立交叉开发环境是个比较复杂的过程,阳初公司为用户提供了编译好的交叉编译工具链,我们只需对其解压安装即可。具体步骤不再赘述。其中主要包含有三个版本的交叉编译器:arm-Linu x-gcc-2.95.3、arm-Linux-gcc-3.3.2、arm-Linux-gcc-3.4.1。版本2.95主要用来编译bootloader和应用程序,版本3.3.2主要用来编译Qtopi留Embedded,版本3.4.1主要用来编译内核和应用程序。接下来在目标机中建立了嵌入式Linux操作系统,主要包括bootloader、内核映像、文件系统。本系统中bootloader:使用VIVI,Linux内核版本为,文件系统为Yaffs系统。对于构建嵌入式Linux操作系统的步骤,不是本文的重点,这里不再赘述。在宿主机和目标机上构建好软件开发环境之后,就可以进行智能探测小车控制软件的开发。5.1.3 根文件系统的编译与烧录 1、系统启动代码(Bootloader)烧写进入烧写界面,在开机前开关拨到NORFLASH一侧,开机加电。打开SecureCRT通过串口连接ARM主机,可以看到烧写菜单。按键V,选择v,出现如下菜单,等待USB主从口的数据连好USB主从线后再运行DNW软件,显示OK才可以传输数据。然后再选择USB Port/Transmit选项。最后再选择Bootloader文件vboot.Bin进行烧写。2、LINUX内核(Kernel)烧写烧写第一步完成后,再按键k,选择k选项,进行LINUX内核烧写。返回DNW,选择内核文件Zimage.Bin,电机确定进行USB传输。传输完成后则完成第二部内核的烧写。3、文件系统(Yaffs)烧写最后选择y,选择并烧写系统文件rootfs.Bin,完成第三步,并在软件上显示完成信息。前两步烧写比较快,第三步烧写文件系统比较慢。烧写完成即可。 5.1.4 内核的编译与烧录 内核是一个操作系统的核心,负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。Linux的一个重要特点是其源代码的公开性,所有的内核源程序都可以在 /usr/src/linux下找到,大部分应用软件也遵循GPL而设计,任何人都可以获取相应的源程序代码。全世界任何一个软件工程师都可以将自己认为优秀的代码加入到其中,由此带来的一个明显好处,是修补漏洞的快速以及对最新软件技术的利用。Linux的内核是这些特点最直接的代表。内核编译模式可以分为编译到内核和编译成模块两种模式。如果编译到内核中,在内核启动时就可以自动支持相应部分的功能,其优点是方便、速度快,机器启动即可使用这部分功能;其缺点是使内核变得庞大起来,无论是否需要这部分功能,它都会存在。如果编译成模块,则生成对应的.o文件,使用时可以动态加载,优点是不会使内核过分庞大,缺点是必须得由用户自己来调用这些模块。实验内容和步骤:1下载新内核2内核解包3配置内核4生成依赖(dependency)信息,清除旧的编译结果5编译二进制内核映像文件6编译模块7配置启动管理器通过tftp烧写内核,烧写的时候在主机的TFTP输入目标机的IP烧写的文件,然后点击下载,通过TFTP先将镜像下载到目标机内存,然后烧写到FLASH。5.2 代码的测试 5.2.1 白盒测试 基于流程树的白盒测试方法通过构造清晰的测试路径,提高了路径覆盖的效率,缩短了软件测试时间,在实际应用中可减少人力、物力消耗、节约测试成本,提高经济效益。1、程序流图回路较多,往往导致测试路径选取繁琐的状况。本文提出的基于流程树的白盒测试方法,通过将程序流图改造为流程树,使程序流程呈现树的形式,测试路径清晰可见,而且算法实现也简单易行。再结合对DD图无约束边理论的补充,精简测试路径的选取,提高了白盒测试的效率。整个测试过程可以分为5个步骤,测试流程图如下:测试开始重要度评估与程序切分程序流图构造DD图生成流程树获取最佳覆盖路径筛选测试结束 5.2.2 黑盒测试 WinRunner是一种用于检验应用程序能否如期运行的企业级软件功能测试工具。通过自动捕获、检测和模拟用户交互操作,WinRunner能识别出绝大多数软件功能缺陷,从而确保那些跨越了多个功能点和数据库的应用程序在发布时尽量不出现功能性故障。WinRunner的特点是它能快速、批量地完成功能点测试; 能针对相同测试脚本,执行相同的动作,从而消除误差; 此外,它还能重复执行相同动作; 它支持程序风格的测试脚本;它针对于大多数编程语言和Windows技术,提供了较好的集成、支持环境。WinRunner的工作流程六个步骤:1用程序的GUI2测试脚本3本除错(debug)4版应用程序执行测试脚本5测试结果6缺陷(defect)在分析完测试报告后,按照测试流程要回报应用程序的各种缺陷,然后将这些缺陷发给指定人,以便进行修改和维护。 5.2.3 性能测试 性能测试概括为三个方面:应用在客户端性能的测试、应用在网络上性能的测试和应用在服务器端性能的测试。通常情况下,三方面有效、合理的结合,可以达到对系统性能全面的分析和瓶颈的预测。性能测试的目的是验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,优化软件,最后起到优化系统的目的。括以下几个方面:1评估系统的能力,测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力,并帮助作出决策。 2识别体系中的弱点:受控的负荷可以被增加到一个极端的水平,并突破它,从而修复体系的瓶颈或薄弱的地方。 3系统调优:重复运行测试,验证调整系统的活动得到了预期的结果,从而改进性能。 检测软件中的问题:长时间的测试执行可导致程序发生由于内存泄露引起的失败,揭示程序中的隐含的问题或冲突。 4验证稳定性(resilience)可靠性(reliability):在一个生产负荷下执行测试一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法。 性能测试的类型包括负载测试,强度测试,容量测试等。 负载测试(Load Testing):负载测试是一种性能测试指数据在超负荷环境中运行,程序是否能够承担。负载测试强调的是系统能够达到的峰值指标。 强度测试(Stress Testing): 强度测试是一种性能测试,他在系统资源特别低的情况下软件系统运行情况。强度测试强调的是系统在高负载情况下能够稳定工作,即在极端情况下系统的稳定性。 容量测试(Volume Testing):确定系统可处理同时在线的最大用户数。性能测试的步骤由于工程和项目的不同,所选用的度量,评估方法也有不同之处。不过仍然有一些通用的步骤帮助我们完成一个性能测试项目。步骤如下 :1、定目标和分析系统 2、择测试度量的方法 3、习的相关技术和工具 4、定评估标准 5、设计测试用例 6、运行测试用例 7、分析测试结果5.3单位系统测试智能小车运行检测:智能小车的控制方式有三种:操纵杆控制,遥控器控制和语音控制。通过操纵杆和遥控器以发送前进、后退、左转、右转和停止五种命令类控制小车的运动,超声波自动检测障碍信号,遇到障碍小车停止,液晶屏上可以实时显示小车的运行速度以及一些其它的状态参数。经过现场测试,智能小车运行平衡,界面友好,实时性好。第六章 总结经过小组成员的一致努力,设计出了具有一定功能的智能小车,达到了预期的目的。本次试验,其实最重要的是处理好转变,和对与红外探头返回数据的分析处理。由于我们驱动小车的前进的是两个直流电机,而这两个直流电机很难很难做到同步,而我们运行过程中由于轨道有限,车速又比较慢所以这个对试验的影响小了点,但是如果轨道大多数的路程是直道,就会出现很小车来回的摆,很难走直道。针对以上的问题我们可以通过PWM脉冲宽度调制来实现对与不同车速的控制,原理如下:PWM脉冲宽度调制主要是控制输出的信号的占空比来实现对小车车速的控制。提高车速的主要方法:1)在赛车的机械结构上作优化。2)舵机的机械调整。这一内容包括对舵机的输出角度的机械放大、舵机反装等,其中心目的是提高舵机的反应速度。3)增强驱动电机的加减速性能。4)在舵机控制算法上优化,使之过弯道走内弯、S型曲线直接冲过,其中心目的就是使赛车少走弯道,缩短行驶距离。我们在实验中曾发现,如果不进行控制算法的优化,单纯增加赛车的直线速度并不总是能缩短单圈的时间,因为速度快到一定程度后,赛车在过弯时将发生侧滑,赛车走过的距离增加了,抵消了速度增加带来的优势。由于时间有限,系统中尚存在许多问题有待改进:1)抗干扰处理。赛车在赛道上会遇到各种情况,如交叉线、断续线,以及还有实验赛道上的干扰点,以及由环境光线不均匀造成的干扰。如何确保在任何情况下都能识别出赛道,或者判断出赛车在场上的位置,需要做进一步的努力。2)参数计算的准确性。虽然实现了斜率和曲率的计算,但其精度仍然不够理想,特别是在能够识别的路径比较段的情况下,计算出的数据与实际有很大的偏差。3)小车的器件尽量选择价格低廉,保证性价比不要过低。经

温馨提示

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

评论

0/150

提交评论