智能控制大赛论文--扫雷小车_第1页
智能控制大赛论文--扫雷小车_第2页
智能控制大赛论文--扫雷小车_第3页
智能控制大赛论文--扫雷小车_第4页
智能控制大赛论文--扫雷小车_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、"三星视界杯”第九届智能控制设计大赛设计报告#詢rt 乂 *第south china university of technology所报组别:队 长:队 员:高级组张文康曾焕生第五玉麒华南理工大学自动化科学与工程学院2014. 5. 15目录1设计题目以及要求4场地说明41.2车模与传感器要求:51.3基本耍求51.4扩展要求52方案比较52.1系统硬件结构设计:52.2控制器的选择方案: 62.3车体的选择与比较方案62.4电池的选择方案62.5传感器的选择方案63设计与论证73丄简介73.2 创新功能74理论分析与计算84.1车轮半径84.2车轮转过1格 走过的距离84.3两个

2、车轮的距离84.4、转弯半径94.5、传感器距离分析计算95电路图及有关设计文件105.1 k60核心板系统模块105.2电机驱动模块115.3光电检测模块125.4 at89c52最小系统板模块135.5液晶与语音模块135.6 蓝牙模块135.7上位机146算法设计及分析146.1红外对管判断路况分析146.1.1 巡线146.1.2节点路况判断156.2扫描全图算法166.3最优路径算法166.4蓝牙通信错误!未定义书签。7测试数据及测试结果分析177.1系统测试的目的: 177.2系统测试的方法:177.3测试仪器178心得体会189附录191设计题目以及要求场地说明设计一辆由黑线引导

3、行进路线的智能小车。要求小车在活动场上能利用传感 器判断黑线的位置,并能判断岀磁铁(雷达)的位置。如图所示,场地的主体是1500*1500mm2矩形(由5*5块300*300m2的小正方块 组成,其中小车行驶路线由宽30mm的黑胶带按照网格线贴成。出入口贴有一 块300*300 mrrp正方形。入口11出口1.2车模与传感器要求:车身加传感器长宽均不得超过300mm,传感器只能安装在小车上,不允许使 用场外定位器件。磁铁的位置不确定,比赛时由工作人员摆放在任意节点上。总 共有3块磁铁。1.3基本要求1. 小车自主判断黑线的位置,并自动沿黑线行驶,行驶过程中车身不得离开 黑线,到达出口位置能自动

4、停下并自动声光形式示意。2. 搜索环节:由于路线与出口均为未知,小车在本环节内需自主寻找到出口, 并“记忆”所走路线,并记下磁铁(雷)的位置,此过程不允许小车离开 黑线。此过程不得超过10分钟。(小车到达岀口后,可以往回走,以测试 其它路线,但最终必须回到出口,并以声光形式示意此环节完成),迷宫 所有黑线部分至少要走过一遍。3. 经过搜索环节后,小车凭借对上一环节的“记忆”,制定最优路径,重新 从入口进入迷宫扫雷,以最短的路径扫完所有的雷。1.4扩展要求1. 设计人机界面,小车以无线形式与人机界面通信,并显示当前小车信息(位 置等)2. 将第一次搜寻结果画出模拟地图(完整的地图),以及“雷”的

5、具体位置及第二次扫雷过程所走的最优路径传冋电脑显示或液晶显示或其它创意。2方案比较2.1系统硬件结构设计:方案一:小车使用印刷板制作小车的底板,把所有的模块放置在同一块底板上, 减少飞线。方案二:小车分模块制作,每一个模块控制一个功能。小车使用万向轮,由两个 电机带动两个轮子走动。由有机玻璃板构成车的底板,方便各个模块的定位。比较之后发现方案一虽然能够减少飞线,使得小车的外观更加美观。不过却 存在系统板过大,制板难度大,故障率大的问题。方案二虽然存在飞线多的缺点, 不过由于模块的独立性比较强,可以分模块测试,不至于因为其中一个模块的问 题而导致整个板重新制作。2.2控制器的选择方案:方案一:5

6、1单片机,这个控制器虽然相对容易控制,比较简单。不过存在资源 相对较少的缺点。方案二:k60单片机,飞思卡尔智能车专用主控制器,虽然在控制上相对51更 有难度,不过资源上远比51多。完全能够满足小车加载更多的创新功能。经过z前使用这两种单片机的经验,以及考虑到扩展功能,我们还是选择了 k60作为主控制器。2.3车体的选择与比较方案方案一:采用四轮小车,前轮由舵机控制转弯,后轮由动力电机控制前进与后退。 方案二:采用三轮小车,前面两轮由两个电机分别控制,用其速度差来实现转弯 与调整,后前轮为万向轮,用来维持小车的平衡由于采用四轮车,小车在转弯时会产生转弯半径会偏离轨迹,不能按照黑色 轨迹前进,而

7、转弯半径无法缩小到满意的程度,由于三轮小车用两个电机来控制 两个轮子,故很容易来实现转弯与调整,是理想的车体模型,故选择第二个方案。2.4电池的选择方案方案一:使用普通的干电池给这个系统供电。这个方案在电池来源上比较广泛, 不过也存在电量消耗大,长时间消耗的成本更高,不适合的长时间调试。方案二:使用可重复充电的锂电池给整个系统供电。这个方案在短时间的调试会 存在成本过高和来源难的缺点,不过在长时间的调试中,这种可重复充电的电池 能够大大降低成本。综上所述,最终选择方案二。2.5传感器的选择方案方案一:采用红外对管和lm339o当红外对管接收到自己发出去的红外线,会有 产生一定的电压,把此电压输

8、入到lm339中,与基准电压比较,便可确定红外 对管前时候有反光物体。通过调整电位器可以改变基准电压,从而改变红外对管 的灵敏度,即探测距离。方案二:使用摄像头来识别路况,这个只是想到飞思卡尔的摄像头组,结果也只 是想想而已。3设计与论证31简介我们设讣的扫雷小车是一辆由黑线引导行进路线的智能小车。小车在活动场 上能利用红外对管光皱传感器判断黑线的位置,并白白动沿黑线前进,通过干簧 管探测到磁钢(地雷),并记录下磁钢的位置。通过探测模块信号采集,经电压比 较器lm339处理后直接传给k60单片机,单片机对信号按照预定的程序进行处 理,将处理的结果通过传给bts7960双电机驱动模块驱动左右电机

9、,以实现左右 微调,左右转弯,前进与原地旋转等动作。具体的系统框图如下:3.2创新功能3.2.1无线电脑遥控直接通过上位机可以控制小车前进,停止,左转右转,向后转,循线等动作。遥 控功能是我们设计的创新点之一,不光可以通过上/下/左右键或者w/a/sd键对 小车的走向进行控制,还可以通过鼠标滚轮对小车的速度进行控制。采用这儿个 键,和鼠标滚轮,操作方向,是一个很好的娱乐体验,实现遥控功能使我们的小 车更具趣味性。3.2.2报警的时候能够根据我们的设定发出不同的音乐。目前我们通过软件合成女声播报小车状态。也可以播放其他音乐,使小车变得更 加有趣味性。3.2.3液晶屏显示小车信息小车上添加128x

10、64点阵液晶屏,显示小车的信息。3.2.4上位机日历无聊的时候,额,可以看看口历。3.2.5实时地图上位机能够实时地把小车的在地图上的相对位置动态地显示出来,并使用不同的 颜色区分开最短路径和模拟地图。4理论分析与计算4.1车轮半径车轮的半径是3.25cm,用周长公式得到这个小车车轮的周长是20.41cm。这 样我们就能够实际通过理论计算岀小车跑过的实际路线长度,同时也知道了小车 的转弯半径应该怎么处理。c=2 ji *r =2* ji * 3.25=20.41 cm4.2车轮转过1格 走过的距离一格的长度是30cm,经过简单的计算,我们知道走过一格的转的圈数是: 30/20.41=1.5 圈

11、4.3、两个车轮的距离实际测量值约为17cm。这个数据受车模实际大小影响,无法改变的,通过其他硬件适应这个大小。4.4>转弯半径转弯的时候实际半径是17cm,这个是使用了正反转的时候实现的,这时候 一个轮子不动,另外一个轮子进行正转产生的一个半径。4.5、传感器距离分析计算8m6c16luos.b传感器分布如上图所示,黑色为红外对管,蓝色为干簧管上面的数据是计算得到的:1) > 2与4之间的距离:因为小车所巡的黑线是30mm,受实际的路线不可 能准确地为30mm,我们最后使用的误差6mm,这样就能够保证小车在巡线的 时候不会出现两个巡线灯出现同吋亮的情况,保证小车的正常巡线。2)

12、.1与5之间的距离:这两个传感器是预防小车在巡线过程中黑线超出2、4传感器检测范围而设置的一对校正传感器,以此来保证小车的顺利巡线,因此 我们设置距离为6cmo3) 、6与8之间的距离:这两个传感器是用来检测转弯和路口的,为了避免中间的黑线因为巡线误差而影响6、8传感器的判断,因此这两个传感器之间的 距离越远越好,因此我们设置距离为16cm。4)、6与7z间的距离:7、9传感器是用来辅助小车转弯的,经过测量和 计算,6、7两个传感器之间的距离为7.5cm时,转弯的效果最好,因此设置距 离为7.5cm。5)、1与6之间的距离:为了避免直线巡线和转弯路口之间的相互影响,所 以设置为lcm o6)、

13、干簧管z间的距离:为了尽量增人感应的面积,设置为1.8cmo5电路图及有关设计文件5.1 k60核心板系统模块-讪山训用 - mmbamttbm «»seis电11.111 u 11. yutfiitnfflu 珀:jijhiiu肚討.# r沖下d"o"octo o obleet ooxhi k60rxo o o o o o o d alelo o o o o o ognoa4ojoq o qpttt1 e=1 r6o o o o o o|o o o £ e o o o <st o o 6o o5.2电机驱动模块sash"s一

14、_ "jim0000000000000000d q8rnnlahe9ooopmotor 1rll漲c3plx om6 8:弋 net01uf_28 netic2 4% 8 o ne<ic4_4o5.3光电检测模块4七电t>«tt a:作为小车的ft恵*堆枠存测刘黑 线的丈追给单*他.单斤机恨拇建牧剑的估息挣 “亠制电悅的址动.红色led 5作为怜jfc事尢电伶再诊旻光电检测模块否正倉工作.方便调试而用5.4at89c52最小系统板模块03 2ozd 応d § 9zd kzd pujd5od90dsabodmodzod 一 odnuenoro5.5液晶与

15、语音模块液晶使用128x64点阵液晶,语音使用wtv020-sd-16p模块,又at89s52控制, 用于显示小车信息以及播放音乐。5.6蓝牙模块用于与小车与上位机的通信,可由上位机发送指令控制小车,也可由小车发送位 置等信息给上位机。5.7上位机6算法设计及分析6.1红外对管判断路况分析6.1.1巡线小车通过传感器1、2、3、4、5来实现巡线的功能,根据这五个传感器的检测情 况来控制左右电机的pwm值,以此来控制小车的速度。当传感器1检测到黑线时,小车已经严重地向右偏离了黑线,这时候应该停止左 电机,让小车重新回到黑线。相应程序为:else if(left2 = found)f_output

16、_lspeed *= 0.0;当传感器5检测到黑线吋,小车已经严重地向左偏离了黑线,这吋候应该停止右 电机,让小车重新回到黑线。相应程序为else if(right2 = found)f_output_rspeed *=0.0;当传感器2检测到黑线而传感器3检测不到黑线时,这时候小车己经向右偏离黑 线,因此应该较大地降低左电机的速度,让小车重新回到黑线。相应的程序为: else if(left 1 = found && middle = nfound)f_output_lspeed *= 0.3;当传感器4检测到黑线而传感器3检测不到黑线时,这时候小车已经向左偏离黑 线,因此应

17、该较大地降低右电机的速度,让小车重新回到黑线。相应的程序为: else if(rightl = found && middle = nfound)f_output_rspeed *= 0.3;当传感器2检测到黑线并口传感器3也检测到黑线吋,这吋候小车已经轻微地向 右偏离黑线,因此应该略微地降低左电机的速度,让小车重新回到黑线。相应的 程序为:else if(left 1 = found)f_output_lspeed *= 0.7;当传感器4检测到黑线并且传感器3也检测到黑线时,这时候小车己经轻微地向 左偏离黑线,因此应该略微地降低右电机的速度,讣小车重新冋到黑线。相应的 程序

18、为:else if(rightl = found)f_output_rspeed *= 0.7;612节点路况判断小车在直线巡线的过程中,总共会遇到8种路况。路况一:死路这时候处于巡线状态的传感器1、2、3、4、5会都检测不到黑线 路况二:终点这时候传感器2、4、6、8都会检测到黑色区域。路况三:左转弯这时候传感器6会曾经检测过黑线而传感器1、2、3、4、5不会检测到黑线路况四:左转弯加肓走这时候传感器6会曾经检测过黑线而传感器1、2、3、4、5也检测到黑线路况五:右转弯这时候传感器8会曾经检测过黑线而传感器1、2、3、4、5不会检测到黑线路况六:右转弯加直走这时候传感器8会曾经检测过黑线而传

19、感器1、2、3、4、5也检测到黑线路况七:十字路口这时候传感器6、8都会曾经检测过黑线而传感器1、2、3、4、5也会检测到黑 线路况八:t路口这时候传感器6、8都会曾经检测过黑线而传感器1、2、3、4、5检测不到黑线6.2扫描全图算法小车在初始扫雷的吋候会遵循靠右走原则,并且每到一个节点的时候都会判断是 否已经走完了全地图,及时退出靠右走原则并且通过最短路径的算法计算出最短 的路径到达终点。6.3最优路径算法最优路径算法:从起点出发依次走到三个已经标记好雷位置的节点的路径之 和最短。首先使用floyd算法计算出每个节点z间的最短路径,再分别计算起点 依次到三个雷的最短路径之和,通过比较找出最优

20、路径。floyd算法:通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。从 图的带权邻接矩阵a=a(ij) nxn开始,递归地进行n次更新,即由矩阵d(0)=a, 按一个公式,构造岀矩阵d(l);又用同样地公式由d构造出d(2); ;最后又用同样的公式由d(nl)构造出矩阵d(n)o矩阵d(n)的i行j列元素便是i号顶点 到j号顶点的最短路径长度,称d(n)为图的距离矩阵,同时还可引入一个后继节 点矩阵path来记录两点间的最短路径。算法步骤:1, 从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之 间没有边相连,则权为无穷大。2, 对于每一对顶点u和v,看看是否存在一个顶点w使

21、得从u到w再 到v比己知的路径更短。如果是更新它。把图用邻接矩阵g表示出来,如果从vi到vj有路可达,则gi,j=d, d表示 该路的长度;否则gi,j=无穷大。定义一个矩阵d用来记录所插入点的信息,di,j 表示从vi到vj需要经过的点,初始化di,j=jo把各个顶点插入图屮,比较插点 后的距离与原来的距离,gi,j = min(gi,j,gi,k+gk,j),如果gij的值变小,则 di,j=ko在g中包含有两点之间最短道路的信息,而在d中则包含了最短通路 径的信息。代码:void floyd()unsigned char i jk;for(i=l;i< 二 n ;i+)for(j=

22、l;j<=n;j+)distij=mapij,pathij=i;for(k=l;k<=n;k+)for(i=l;i< 二 n ;i+)for(j=l;j<=n;j+)if(distik+distkj<distij)distij=distik+distkj/pathij=pathkj;得到的两点间最短距离存放在dist数组里,路径表存在path数组里。由于只有三个雷,由起点出发到三个雷的方式只有6种,那么直接分类讨论 即可,最后得到一条由起点出发依次经过三个雷德最短路径,表示为依次经过哪 些节点。7测试数据及测试结果分析71系统测试的目的:1、测试模块功能的准确性和

23、稳定性。2、整体考察系统整体的性能是否达到设计要求,发现问题并找到可行的解 决方法。3、进行系统性能优化。7.2系统测试的方法:1、系统各模块测试阶段:此阶段主要着眼于局部,验证各模块功能是否符 合设计要求,检查各电路是否正确连接,是否正常工作。通过观察现象,找出问 题,进行模块就纠错或优化。2、系统整体性能测试阶段。此阶段主要考察系统总体是否符合设计要求, 每个功能是否能完整实现,检查系统之间的协调性和可靠性。通过观察小车运行 状况,找出不足或错误的地方,进行修改和优化。3、在软件方面的调试方法主要是使用川ink进行调试,设置断点或者在软件 中甚至一些代码实现小车系统的停转来一步步分析小车正

24、在运行的程序从而一 步步分析是程序的哪里出现了问题。4、硬件上主要是使用数字万用表和示波器来测量各参数的正确性,减少断 线、虚焊和短路的各种问题。使用示波器来测量接收信号的强弱,通过这些调试 来使得整个硬件能够正确运行。5、红外对管的调试:由于这次我们使用红外对管的性能也是不太好的。我 们要不断地调试好这个红外对管的灵敏度。而且通过改变发射管的电流来改变发 射功率,我们就是通过改变发射管的电阻来改变发射功率的。7.3测试仪器731数字万用表:主要作用:a、用来判断电压的大小,从而判断该电路所连元件的工作电压是否正常;b、用来判断电池电压的大小,并且通过这个来判断电池是否己经过放或者过充;c、用

25、来判断所焊电路是否已经岀现虚焊,并且检查是短路还是断路;d、用来判断电阻是不是已经损坏。7.3.2三角尺:主要作用:a、测量路宽是否符合30mm这个标准,防止因为路宽变宽而导致的不必要的问 题出现;如果道路误差过大则会导致小车误判;b、用丁画板的尺寸定位。在画altium designer上画板的时候要为各个模块进行 定位,使得各模块能够顺利地定位到小车上。7.3.3秒表:主要作用:使用来计算小车跑全图的吋间长度,通过不断优化算法和改变算法的 效率来改变小车跑全图的时间,使得我们每一次都有一定的提高。7.3.4 j-link 调试器: 主要作用:a、下载程序,减少因为串口擦写导致的错误;b、调

26、试程序,作为一个运动的系统,我们要不断地试验每一步是否出现误 判或者程序跑飞的情况,避免不必要的错误发生,减少吋间损耗。8心得体会我们的论文只是简单介绍了我们小车的基本设计结构,讨论了各方案的优劣 和取舍,实现了小车的基木功能和拓展要求。但是真正的过程确实充满艰辛的,各种意外情况,各种无法解释的现象,小 车果然不是我们想彖屮的那么简单,相信参加比赛的人都清楚这一点。特别是遇 到很多我们知识上暂时无法解决的问题,各方求助无果,只能一步一步慢慢摸索, 犹如盲人探路般艰难。不过,在近一个月的奋战中,不管是精力上还是时间上,我们都付出了不少, 所以我们得到的也很多,或许这才是我们参加比赛的真正意图吧,

27、下面是我们队 伍在这一个月來的一些简单小结:在这个过程中,我们首先要面对的是小车模型的搭建,首先就是核心控制器 的选择问题,一开始我们是使用51系列单片机的,可是中间由于资源的限制使 得我们不得不转向其他控制器,当然也有想过用stm32,只是手头刚好有k60, 所以就改成用k60,所以还得学习k60的使用。这给我们的启示是,思考问题要 全面,这样才能够从大局出发避免走弯路。再者就是测速模块的使用,调试了好久就是不能按照预想的结果实现,最后 才发现原来是硬件的问题,最后实在没办法只能弃之不用。这给我们的启示是, 要懂得取舍,切不可因小失大。还有就是探测模块,本来是使用rpr220的,可是总是出现

28、有些路况探测不了 的现象,最后只能重新做板,换成tcrt5000,重新做板又遇到许多状况,比如 原理图一个小细节画错导致做岀来的板不能用,只能重新做一块。好在最后做出 来的模块比较符合心意。这给我们的启示是,要重视细节,阻描你前进的不是眼 前的咼山而是藏在鞋里的细砂。还有一个就是上位机,总是到了某一个地方就卡死不能用,纠结了好久,先 用labview又转战mfc,最后在一个很偶然的情况下发现原来是电脑的问题,换 了台电脑,程序就能正常运行。这令我们实在是苦笑不得。再有一个就是语音模块,一开始因为接触不良导致不能发声,当解决又因为 二线串口模式无法使用而无法直接用单片机控制,最后只能使用别的模式

29、,这启 示我们,当一条路走不通的时候,要换个角度,另寻捷径。当然比赛过程中遇到的问题可远远不止这么多,各种曲折各种问题。但是我 们都尽自己所能,一一排除。所以说比赛是我们学习的最好途径,我们在参加比 赛时,深入学习了 k60的使用,同时也加深了对altium designers画板软件的理 解,也学会了用labview和mfc写上位机。经过将近一个月的比赛,我们终于把小车模型、硬件、软件都搭建成功,收 获甚大,这个经历将给我们下一阶段的学习提供更大的帮助。通过这次比赛,加强了我的动手、思考和解决问题的能力。我从得到题目就 认真思考设计方案,不断完善自己的方案。之后我又自己买元器件,认识了不少

30、元器件,学到了许多课本上学不到的知识。在设计过程中,经常会遇到这样那样 的情况,就是心里想老想着这样的接法可以行得通,但实际接上电路,总是实现 不了,因此耗费在这上面的时间用去很多。我认识到理论与实践有一定的差距, 因此我们要多实践,锻炼自己解决问题分析问题的能力。这么长时间的设计,过程曲折可谓一语难尽。在此期间我们失落过,也曾一 度热情高涨。从开始时激情四射到最后汗水背后的复杂心情,点点滴滴无不令我 们回味无穷。生活就是这样,起起落落,循环不休,但至少一句话说得对,有付 出总会有收获的。这次比赛终于结束了,在设计中遇到了很多问题,都是在不断探讨中解决。 同时,也加深了我们队友之间的感情。最后

31、,我要对给过我们队伍帮助的所有同 学表示忠心的感谢!9附录主程序:#include l,common.h"#inelude "include.h"#inelude 'calculation.h1'* * *设置系统的全局变量float default_speed = 40.0;extern crossing_type crossing_type; extern u8 current_x;ext er n u8 current_y; extern u8 pathllll;/*检测器标记位u8 left_side_f_flag = 0 ;u8 righ

32、t_side_f_flag = 0 ;u8 left_side_b_flag = 0 ;u8 right_side_b_flag = 0 ; u8 middle_flag = 0 ;u8 mine_flag = 0;/*程序标记位*program_state global_state = free; run_mode car_run_mode 二 standby; run_state car_state = go_ahead;run_state key_control_state = standby;/*控制器输出的电机速度float f_output_lspeed = 0.0; float

33、f_output_rspeed = 0.0;/*电机占空比输出u8 lmotor_duty = 0;u8 rmotor_duty = 0;/*pit标志位extern u8 time0flag_100ms ;extern u8 timelflag_ls ;extern u8 uart_flag;设置完成,进入主程序void main()禁止总中断disableinterrupts;* * * * * * *初始化程序初始化串口 uarto输岀脚pta15,输入脚pta14 串口频率115200iuartjnit (uarto, 115200); uart_irq_en(uarto);uartj

34、nit (uart5z9600);/* * * 初始化巡线模块* * */gpiojnit(portd,0,gpi,high); gpiojnit(portdzl,gpi,high); gpiojnit(portd,乙 gpi,high);gpiojnit(portd,3,gpi,high);gpiojnit(portdz4,gpi,high);gpiojnit(portd,5,gpi,high); gpiojn it(p0rtd,12,gpizhigh); gpioj nit(portd,13,gpizhigh);/ 雷点 gpio_init(portd”14,gpi,high);gpio_

35、init(portd15,gpi,high);、初始化ledk kgpionit (porta, 17, gpo,high);初始化pit计时器k kpit_init_ms(pito, 25);pitjnit_ms(pitlz 250);初始化电机kk初始化pito,定时时间为:初始化pit1,定时时间为:100msisftm_pwmn it(ftmo,chl,10000,0);ftm_pwm jn it(ftm0,ch2,10000,0);ftm_pwm jn it(ftm0,ch3,10000,0);ftm_pwm init(ftm0,ch4,10000,0); /*初始化完毕enable

36、interrupts;开总中断/pa4左轮前进/pa5/pa6右轮后退/pa7*/主程序* * *while(l)while(global_state = free)/ 空闲区 "if(uart_flag = l)uart_process(); if(timelflag_ls = 1)timelflag_ls = o;led = led;while(global_state = running)/ 检测区 "if(car_state = go_ahead)/ 直走区域 " f_output_lspeed = default_speed * 0.7;f_output

37、_rspeed = default_speed * 0.7;if(mine = mine_found && car_run_mode =scan)mine_flag = 1;/*路口炭判部分(检测屈6、8)*/仍娠巡线 if(left_side_f = fo u n d) left_si d e_f_f i ag = 1;if(right_side_f = found)right_side_f_flag = 1; if(left_side_f_flag = 1| | right_side_f_flag = 1) "f_output_lspeed =0.5 * defa

38、ult_speed; f_output_rspeed =0.5 * default_speed;/*路口判断部分(检测器7、9)*/退出巡线if(left_side_b = found && (left_side_f_flag = 111 right_side_f_flag = l)left_side_b_flag = 1;if(right_side_b = found && (left_side_f_flag = 111 right_side_f_flag = l)right_side_b_flag = 1;if(left_side_b_flag = 1 11

39、 right_side_b_flag = 1)路况 1、2、3、4、5、6、7if(left 1 = found && rightl = found && left_side_f = found && right_side_f = found)/路况 7 终点route_calculation(the_end);/直前进过程中遇到终点需进行判断else /路况 2、2、3、4、5、6route_calculation(go_ahead);/直前进过程中遇到转角需进行判断*育线巡线部分(检测器1-5)*/if(car_state 二二 go_ahe

40、ad && left_side_f_flag 二二 0 && right_side_f_flag=0)/仍然走旨线if(middle = nfound && leftl = nfound && left2 = nfound && rightl=nfound && right2 = nfound)/路况 8route_calculati on (turn_back);else if(left2 = found)f_output_lspeed *= 0.0;else if(right2 = found)

41、f_output_rspeed *= 0.0;else if(leftl = found && middle = nfound)f_output_lspeed *= 0.3;else if(rightl = found && middle = nfound)f_output_rspeed *= 0.3; else if(leftl = found && rightl = found);else if(leftl = found)f_output_lspeed *= 0.7;else if(rightl = found)f_output_rspee

42、d *= 0.7;else if(car_state = turneft)/左转区域if(left_side_f = f o u n d) left_s i d e_f_f i a g =1; if(middle = nfound && left_side_f_flag =l)middle_flag = 0; if(left_side_f_flag =0)f_output_lspeed = 0.0; f_output_rspeed = default_speed*0.8;else if(left_side_f_flag =1)f_output_lspeed = 0.0; f_o

43、utput_rspeed = default_speed*0.4;if(middle_flag = 0 && middle = found)car_state = go_ahead; left_side_f_flag =0; f_output_lspeed = 0.0; f_output_rspeed = 0.0;else if(car_state = turn_right)/右转区域if(right_side_f = found)right_side_f_flag =1; if(middle = nfound && right_side_f_flag =l)m

44、iddle_flag = 0; if(right_side_f_flag =0) f_output_lspeed = default_speed*0.8; f_output_rspeed = 0.0;"else if(right_side_f_flag =1)"f_output_lspeed = default_speed*0.4; f_output_rspeed = 0.0; "if(middle_flag = 0 && middle = found) _car_state = go_ahead; right_side_f_flag =0; f_

45、output_lspeed = 0.0; f_output_rspeed = 0.0; "else if(car_state = turn_back)/逆时针向后转区域 " "f_output_lspeed = -default_speed*0.5; f_output_rspeed = default_speed*0.5; if(car_run_mode = soluting) " if(crossing_type = t_l) | | (crossing_type = t_5) 11 (crossing_type = t_7) 11 (crossing

46、_type = t_8) if(middle = nfound && left_side_f = nfound && right_side_f = n found)middle_flag = 0;if(middle_flag = 0) "if(middle = foun d)car_state = go_ahead; " "else 讦(crossing_type = t_2) 11 (crossing_type = t_4) " "if(right_side_f = found)right_side_f_fla

47、g = 1;if (right_side_f_flag=l&&right_side_f=nfound&&middle = found) car_state = go_ahead;right_side_f_flag = 0;else 讦(crossing_type = t_3) 11 (crossing_type = t_6) " "f_output_lspeed =0.0;f_output_rspeed =0.0;lmotor_a(0);lmotor_b(u8)(default_speed*0.5);rmotor_a(u8)(default_

48、speed*0.5);rmotor_b(0);while(left_side_f = nfound);while(left_side_f = found);while(left_side_f = nfound);while(left_side_f = found);while(car_state != go_ahead) " "if(middle = foun d)car_state = go_ahead; " "lmotor_a(0);lmotor_b(0);rmotor_a(0);rmotor_b(0); "elseif(middle =

49、nfound && left_side_f = nfound && right_side_f = n found)middle_flag = 0;if(middle_flag = 0) _if(middle = foun d)car_state = go_ahead;if(ti m eof lag_100ms = 1) "time0flag_100ms = 0;/*motor_control*/if(f_output_lspeed >=0) lmotor_duty = (u8)f_output_lspeed;lmotor_a(lmotor_dut

50、y);lmotor_b(0);else if(f_output_lspeed <0)lmotor_duty = (u8)-f_0utput_lspeed;lmotor_a(0); lmotor_b(lmotor_duty); " "if(f_output_rspeed >=0) "rmotor_duty = (u8)f_0utput_rspeed;rmotor_a(rmotor_duty);rmotor_b(0);else if(f_output_rspeed <0)""rmotor_duty = (u8)-f_0utput_rspeed;rmotor_a(0);rmotor_b(rmotor_duty); " "讦(timelflag_ls = 1)timelflag_ls = o;led = led;while(global_state = minesweeping_prepare)/ 扫雷起步区 " 一global_lnit();uart_putchar(uart0,0x04);/先发送默认的第一个点的坐标uart_putchar(uarto,oxoo);uart_putchar(uart

温馨提示

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

评论

0/150

提交评论