好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

线迷宫小车算法(1).docx

7页
  • 卖家[上传人]:c**
  • 文档编号:300327018
  • 上传时间:2022-05-30
  • 文档格式:DOCX
  • 文档大小:18KB
  • / 7 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 本文格式为Word版,下载可任意编辑线迷宫小车算法(1) 线迷宫小车算法(1)center 311 lab2智能小车设计方案 **********************迷宫算法设计********************* 路径主要有如下可能 通过分析我们可以将迷宫线做如下分析 我们将迷宫的入口和出口用两条相互闭合的线连接起来,红线和黑线分别代表小车运行时的左侧和右侧,只要小车沿着其中任何条线来行使,小车定能走出迷宫 我们假设小车沿着左侧红线行使并在到达岔路口时做如下判断: 注:B代表 Back 返回 A 代表 Advance 前进 R 代表 Right 右转 L 代表 Left 左转 线迷宫小车算法(1)center 311 lab2智能小车设计方案 有图可以看出 沿着左侧红线行走时 遇到第一个“左前路口”记录“L”,遇到“死胡同路口”时做了一个180度转弯 记录“B”持续行走遇到第三个路口“丁字路口”记录“L” 当遇到死胡同时说明此岔路口为错误路线记录为“LBL”那么当遇到这个路口时我们可以用“A”来代替。

      LBL”=“A” 小车持续行走遇到“前右路口”持续前进记录“A”,遇到死胡同记录“B”又遇到“左前路口”记录“L”,小车遇到了“死胡同”说明小车走错了路线记录了如下数据:“ABL” 可以看出小车到此路口应右转所以“ABL”=“R” 综上分析小车沿着红线行走时遇到岔路口记录一次数据,遇到“死胡同”说明走错路线,那么同上每次遇到“死胡同”时处理一次数据 注:小车在没有遇到岔路时不记录数据 例如 “左弯道” 和“右弯道” 结果:“LBL ABL LBL LBL L”=“A R A A L” 分析结果完全正确,看我们只是简朴的做了个“寻线”神秘的迷宫小车算法就这样被我们破解了,那么我们换一个较繁杂的迷宫测试是否正确: 线迷宫小车算法(1)center 311 lab2智能小车设计方案 小车沿左侧线行驶遇到岔路口记录数据 原数据“:LBL A ABL LBL BL L L LBA A LBL BL BL LBL L L ABL ” 处理1:“A A R A BL L L R A A BL BL A L L R ” 处理2:“A A R R L L R A R BL A L L R ” 处理3:“A A R R L L R A B A L L R ” 处理4:“A A R R L L R B L L R ” 处理5:“A A R R L L B L R ” 处理6:“A A R R L A R ” 每次遇到B 做一次判断 处理6为最终结果和上图对比小车按照“AARRLA R”行驶可以找到终点。

      注:处理2:R BL= B 处理3:A B A= B 处理5:L B L= A 总结:迷宫可能有如下9种组合结果: LBL=A,LBA=R,ABL=R,ABA=B,ABR=L,RBA=L,RBR=A,RBL=B,LBR=B /******附:最优路线计算函数**********/ unsigned char idata road[70]; char* str_text(/*char * road*/){ uchar i,k,f=1,f2=1;//i用于计数 f内层标记 f2外层标记 uchar *j,*j2; //int占用2个字节空间 char占用一个 俭约内存 uchar yy[60]; //yy数组用于中介 临时存放数据 do{ for(i=0;i9;i++,f=1) { do { j=strstr(road,aa[i]); //选出匹配字符串 if(j!=0) { j2=j+3; strcpy(yy,j2); //截取后面字符串并留存 *j='\0'; //截取前面字符串 strcat(road,a[i][0]); //在前面字符串后连接对应项 strcat(road,yy); //将后面字符串重新连接 } else{ f=0;//没有匹配项 标记清零 } }while(f==1);//判断本次匹配替换是否终止,假设否 持续匹配并替换 线迷宫小车算法(1)center 311 lab2智能小车设计方案 } //for循环终止 //*******校验 for(k=0;k9;k++) { j=strstr(road,aa[k]); if(j!=0) { f2=1;break; //判断是否依旧有匹配工程,假设有重新执行内层do~while语句 }else{f2=0;} }//校验for终止 }while(f2==1); //外层do while 用于校验 return road; //road首地址 //printf(%s\n,turn2);scanf(%s,c); } **************************传感器与软件设计********************************* 传感器设计一: 等腰梯形设计: 我们采用了五个传感器 前端三个为寻线,左右两个为路口检测 线迷宫小车算法(1)center 311 lab2智能小车设计方案 用三个传感器中间的上两侧分别骑线这样便于快速校正小车位置,而且中间传感器还用于90度转弯时小车头部位置确实定。

      寻线程序: sbit P2_0=P2^0; //右侧传感器 sbit P2_1=P2^1; //中右传感器 sbit P2_2=P2^2; //中间传感器 sbit P2_3=P2^3 //中间传感器 sbit P2_4=P2^4; //左侧传感器 turn1=P2|0xE0; //P2用于检测路线 0xE0屏蔽高位 switch(turn1) {//寻线模块// case 0xE4: advance(1) ;break; //11100100B 前进 case 0xEC: balance(1,70,1,90);break; //11101100微右偏,微弱右转 case 0xE8: balance(1,30,1,90);break; //11101000重右偏,大幅度右转 case 0xE6: balance(1,90,1,70);break; //11100110微左偏,微弱左转 case 0xE2: balance(1,90,1,30);break; //11100010重左偏,大幅度左转 } Advance();为前进函数 Balance();为左右轮速度操纵函数,1为前进,70,90为pwm小车速度值 (详见:源程序) 岔路口检测程序: 我们默认小车检测到岔路口时转弯优先级为:“左”—“中”—“右”— 7 —。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.