智能小车软件设计部分_第1页
智能小车软件设计部分_第2页
智能小车软件设计部分_第3页
智能小车软件设计部分_第4页
智能小车软件设计部分_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

-z.摘要:智能小车是各类电子竞赛的经典题目。本工程在现有的玩具小车的根底上加装各类传感器及微处理器,实现对路况的识别及小车的控制,并最终实现智能小车电路板的开发设计,完成一套完整的自设计智能小车体系。本论文主要表达1.〕智能玩具小车控制板的电机驱动模块的原理图设计及调试。电机驱动控制模块是整个控制板的核心内容,主要涉及到电机方向控制单元和速度控制单元两大局部。方向控制单元负责小车电机的正转、反转和停顿三态控制,速度控制单元是扩展单元,是为了适应不同的场合需求而设置的。2.〕着重讨论智能小车辅助设备的原理与运用,包括摄像头设备〔ET21*111〕,霍尔传感器〔A3144〕,光电对管〔TCRT5000〕,LCD液晶屏幕〔RT1602C〕等。3.〕本文主要论述智能玩具小车控制板的无线通信模块的原理图设计及调试。无线通信模块是智能玩具小车得以实现智能化的重要因素,电脑通过架设在场地上的摄像头,处理得到的数据,同时把控制小车的指令通过无线通信模块传送给小车,到达控制小车的目的。4.〕智能玩具小车控制的总后台,即电脑的图象处理程序。图象处理是整个控制的核心内容,主要涉及到小车方向控制和速度控制两大部,它首先判断小车和目标的相对位置,然后通过无限芯片发送不同的指令来控制小车的行动路线。关键词:智能玩具小车,电机驱动模块,方向控制,速度控制,摄像头,霍尔传感器,光电对管,LCD液晶屏幕,无线通信,图象处理1.系统总述1.1系统组成图1.1.1智能玩具小车系统组成示意图单片机路线/转速检测电动机驱动路况检测无线传输LCD显示电脑处理52.系统的主要功能2.1单片机子系统通过无线传输设备接收电脑输出的命令并执行;连接电动机进展简单转速控制运算;进展小范围内路线自动控制;输出当前状态至LCD显示。本系统采用ATS9852芯片。2.2电动机驱动子系统采用两步进电机,接收来自单片机信号,通过电机前后转动组合实现小车前向、后向以及左右运动。2.3路线/转速检测子系统利用光电对管对小车进展自动路线纠正;利用霍尔传感器进展小车速度检测并反应到单片机内进展小范围内速度调控。2.4LCD显示子系统从单片机获取当前小车动态数据以数字形式在LCD屏幕显示,方便实时监控小车状态并检测调试。本系统采用RC1602CLCD屏幕显示。2.5无线传输子系统接收来自电脑处理所得的命令并发送到单片机。本系统采用ET13*330/ET3*340无限发送接收模块。2.6电脑处理子系统接收摄像头路况图像并进展处理,将处理后命令通过无线模块发送至单片机执行。2.7路况检测子系统利用连接到电脑上的摄像头进展路况摄像,所得图像经电脑处理成为小车控制命令。本系统采用ET21*111摄像头。63.主系统的硬件设计3.1主要功能及设计目标将电动机驱动电路以及单片7机控制电路整合在同一电路中,实现单片机对小车的根本操作,包括前后运动以及左右转向。3.2电路设计方案图3.2.1电路设计方案图74.电动机驱动电路的设计4.1H桥电路简介下面详细地介绍一下H桥的工作原理:众所周知H桥有四个臂分别为B1、B2、B3、B4,分别对应图4.1.1中的Q2、Q3、Q7、Q8。四个臂分为两组Q2、Q3和Q7、Q8,每一组的两个臂都是同时导通,同时关断的。如果让Q2、Q3导通Q7、Q8关断,电流会流经Q3、负载、Q2组成的回路,加在负载Load两端的电压左正右负,如图4.1.2所示,此时电机正转;如果让Q7、Q8导通Q2、Q3关断,电流会流经Q8、负载、Q7组成的回路,加在负载Load两端的电压为左负右正,此时电机反转,对应图4.1.3所示。另外如果让Q2、Q3关断Q7、Q8也关断,负载Load两端悬空,此时电机停转。这样就实现了电机的正转、反转、停顿三态控制。图4.1.1图4.1.2由于Q2、Q3,Q7、Q8的导通和关断是通过Q1、Q6控制,而Q1、Q6的导通和关断又是通过MOT1〔IOB10〕、MOT2〔IOB11〕控制的,所以电机的状态还是通过I/O端口来控制的。表2.1描述了IOB10和IOB11所控制电机运行状态与端口数据的对应关系注意:由H桥的工作原理可知,H桥的四个臂不能同时导通,一旦四个臂同时导通会出现类似短路的现象,在H桥的每一个臂上都会有很大的电流流过。如图4.1.3,Q2、Q3、Q7、Q8同时导通时,就会形成Q3、Q7回路和Q2、Q8回路,就会有很大的电流经过这4个三极管,严重时会烧毁三极管甚至引起电源爆8图4.1.3以上分析的是两个H桥电路的其中之一,另外一个H桥的电路构造和工作原理是完全一样,在这里就不再赘述。小车的运动是靠轮子带动的,而轮子的转动是靠电机带动的,所以在确定了电机的运行状态之后就能够推断出小车的运行状态。下面是小车运行状态与61板端口数值对照表〔表2.2〕:4.2H桥电路的保护电路设计为了防止出现上述情况,我们设计了以下逻辑电路〔图4.1.4〕,从而防止了出现四个臂同时导通的情况。图8.2.2RT1602C数据传输时序图8.3RT1602C根本操作程序//LCD初始化程序voidLCD_INIT(void){OUTI(0*38);//设接口数据位数(DL),显示行数(L),及字型(F)delay(60);OUTI(0*38);//设接口数据位数(DL),显示行数(L),及字型(F)delay(50);OUTI(0*38);//设接口数据位数(DL),显示行数(L),及字型(F)delay(50);OUTI(0*38);//设接口数据位数(DL),显示行数(L),及字型(F)delay(50);OUTI(0*0F);//设整体显示开关(D),光标开关(C),及光标位的字符闪耀(B)delay(50);OUTI(0*01);//清屏指令delay(50);OUTI(0*06);//设光标移动方向并指定整体显示是否移动delay(50);OUTI(0*80);//设DDRAM地址,设置后DDRAM数据被发送和接收delay(50);}//重定义std库内putchar,以printf调用charputchar(charc){staticunsignedcharflag=0;if(!flag||c==255){OUTI(0*80);flag=0;21if(c==255){returnc;}}if(flag==16){OUTI(0*80+0*40);}OUTD(c);//送一个字符显示_nop_();flag++;//incrementthelineflagif(flag>=32){flag=0;}//显示完之后去除return(c);}//时延函数voiddelay(unsignedchartime){unsignedchari;for(;time>0;time--){for(i=0;i<=100;i++)_nop_();}}//命令执行命令voidBWritemand(){pc8255=0*00;//写命令pc8255=0*04;//读忙,E为1_nop_();pc8255=0*00;//读入数据,执行命令}//数据写入命令voidBWriteData(){pc8255=0*01;//写数据pc8255=0*05;//读入数据,执行命令_nop_();pc8255=0*01;//读忙,E为1}//命令行输出voidOUTI(unsignedcharoi){pb8255=oi;BWritemand();_nop_();_nop_();pc8255=0*02;//读忙}22//数据行输出voidOUTD(unsignedcharod){pb8255=od;BWriteData();_nop_();_nop_();pc8255=0*02;//读忙}239.ET13*330无线通信芯片的原理与使用2.1.1功能描述TheET13*330isaCMOSintegratedcircuitintendforuseasalow-costAM/ASKreceiver.Thedeviceisprovidedin24-pinSSOPpackageandisdesignedtoprovideaphasedlockedfrequencysourceforuseinlocaloscillatorortransmitterapplications.ThechipintegratedVCO,phasedetector,percale,LNA,MI*ER,IFamplifier,peakdetectordatadecisionandreferenceoscillatorrequireonlytheadditionofane*ternalcrystaltoprovideapletephase-lockedloop.TheET13*330isaoflow-powerRFreceiverIC’sthatwasdevelopedforwirelessdatamunicationdevicesoperatingintheEuropean433MHZISMbandsorU.S.315MHZISMband.TheET13*330realizeahighlyintegrated,single-conversionASK/OOKreceiverwiththeadditionofareferencecrystal,andafewpassiveponents.TheLNAinputofthechipiseasilymatchedtoafront-endfilterorantennabymeansofaDCblockingcapacitorandreactiveponents.ThelocaloscillatorgeneratedbyaninternalVCO.PLLandphasedetector,loopfilterandVCOresonatorponentsande*ternalreferencecrystal.ThereceiverIFsectionisoptimizedwithe*ternal10.7MHZceramic10.7MHZ,where,aftere*ternalband-passfiltering,mostoftheamplificationisdone,TheIFoutputsisdrivenbyasource-follower,basedtocreateadrivingimpedanceof3300tointerfacewithanoff-chip330010.7MHZceramicIFfilter.2.1.2芯片框图242.2无线通信模块局部调试程序源代码#include<REG*51.H>sbitm1=P1^0;sbitm2=P1^1;sbitm3=P1^2;sbitm4=P1^3;unsignedcharrecv='c';unsignedintbuf1;unsignedintbuf2;voidplay(){m1=1;m2=1;for(buf1=0;buf1<255;buf1++){for(buf2=0;buf2<255;buf2++){}}m1=0;m2=0;for(buf1=0;buf1<255;buf1++){for(buf2=0;buf2<255;buf2++){}}}voidmain(){SM0=0;SM1=1;REN=1;25PCON=PCON&0*7f;TMOD=0*20;TH1=0*A0;TL1=0*A0;TR1=1;m1=0;m2=0;m3=0;m4=0;play();play();play();while(1){SBUF='K';RI=0;while(RI==0);recv=SBUF;if(recv=='a'){m1=0;m2=0;m3=0;m4=0;}if(recv=='b'){m1=1;m2=1;m3=1;m4=1;}if(recv=='c'){m1=0;m2=1;m3=0;26m4=1;}if(recv=='d'){m1=1;m2=0;m3=1;m4=0;}/*TI=0;SBUF=recv;while(TI==0);*/}}2710.图像处理技术的原理和应用10.1图象处理简介下面详细地介绍一下列图象处理程序的设计原理:首先,我们要通过摄像头获取图象,然后才能处理图象,Matlab中能够非常容易的实现图象的获取:vidobj=videoinput('winvideo',1,'RGB24_320*240');preview(vidobj);pause(1);%maketheimagemoreclearbackground=getsnapshot(vidobj);建立一个视频流对象后vidobj,应用getsnapshot〔〕函数就能获取当前视频的画面,并以图象的形式存储到了background中,以便对图象进展处理。其次,我们要识别小车,就要检测其边缘并提取轮廓,因此下面用一些例子简要分析一下列图象的边缘检测与轮廓提取原理以及方法。1.边沿检测:这种程序就是一种边沿检测器,它在数学上的涵义是一种基于梯度的滤波器,又称边沿算子,你没有必要知道梯度确实切涵义,只要有这个概念就可以了。梯度是有方向的,和边沿的方向总是正交〔垂直〕的,例如,对于图象,边是水平方向的,我们可以用梯度是垂直方向的模板检测它的边沿,这里矩阵作为模板其实是实现了一个离散函数的梯度计算,在Matlab中可以方便的实现矩阵的运算,这也是我们选择matlab作为开发软件的原因之一。Sobel算子在边沿检测中,常用的一种模板是sobel算子。有两个,一个是检测水平边沿的.一个是检测竖直平边沿的。与和相比,sobel算子对于像素的位置的影响做了加权,因此效果更好。Sobel算子另一种形式是IsotropicSobel算子,也有两个,一个是检测水平边沿的,一个是检测竖直平边沿的。IsotropicSobel算子又称各向同性的Sobel算子。和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。28图10.1.原图图10.2普通Sobel算子处理后的结果图图10.3各向同性Sobel算子处理后的结果图上面的几幅图中,图1为原图,图2为普通Sobel算子处理后的结果图,图3为各向同性Sobel算子处理后的结果图,可以看出Sobel算子确实把图象中的边沿提取了出来。高斯拉普拉斯算子由于噪声点〔灰度与周围点相差很大的点〕对边沿检测有一定的影响,所以效果更好的边沿检测器是高斯拉普拉斯(LOG)算子。先平滑掉噪声,再进展边沿检测,所以效果会更好。29常用的LOG算子是5*5的模板,如下所示。到中心点的距离与位置加权系数的关系用曲线表示为:图10.4LOG到中心点的距离与位置加权系数的关系曲线是不是很象一顶墨西哥草帽?所以,LOG又叫墨西哥草帽滤波器。下列图为图5用LOG滤波器处理后的结果。图10.5用LOG滤波器处理后的结果图2.轮廓提取轮廓提取如下列图所示:30图10.6原图图10.7轮廓提取轮廓提取的算法非常简单,就是掏空内部点:如果原图中有一点为黑,且它的8个相邻点都是黑色时〔此时该点是内部点〕,则将该点删除。要注意的是,我们处理的虽然是二值图,但实际上是256级灰度图,不过只用到了0和255两种颜色。3.轮廓跟踪轮廓跟踪,顾名思义就是通过顺序找出边缘点来跟踪出边界。图10.6经轮廓跟踪后得到的结果如图10.8所示图10.8轮廓跟踪后的结果一个简单二值图象闭合边界的轮廓跟踪算法很简单:首先按从上到下,从左到右的顺序搜索,找到的第一个黑点一定是最左上方的边界点,记为A。它的右,右下,下,左下四个邻点中至少31有一个是边界点,记为B。从开场B找起,按右,右上,上,左上,左,左下,下,右下的顺序找相邻点中的边界点C。如果C就是A点,则说明已经转了一圈,程序完毕。否则从C点继续找,直到找到A为止。判断是不是边界点很容易:如果它的上下左右四个邻居都是黑点则不是边界点,否则是边界点。上述三个图象处理步骤描述了图象处理的根本过程,我们在调试中用的是小车撞击乒乓÷球,因此我们只需要识别小车与乒乓球,同时为了简化程序,我们还在小车上装设了标志,用来识别小车。并且在图象处理程序中我们首先进展了滤波,消除干扰因素,然后正确判断小车与乒乓球的相对位置。我们一共用到如下的几个函数:FindLastRed:用来找到小车上的标记的坐标的函数Isroundred:用来进一步确认真正的标记的函数〔考虑到干扰因素〕FindLastYellow:用来找到乒乓球的坐标的函数Isround:用来进一步确认真正的乒乓球坐标的函数〔考虑到干扰因素〕Position:用来根据小车标记和乒乓球的坐标给出相应的位置信息的函数。Travel:相当于主函数,用来实时的从视频流获取图象并调用子函数处理图象,返回控制信息的函数。10.2图像处理算法软件实现最终程序如下:function[o*,oy,r]=FindFirstRed(*,*1,*2,y1,y2)a*1=0;a*2=0;ay=0;fori=*1:*2;forj=y1:y2;a=*(i,j,1);b=*(i,j,2);c=*(i,j,3);if(a>150&&b<150&&c<90);a*1=i;ay=j;a*2=FindLastRed(*,a*1+1,*2,ay);a*=(a*1+a*2)/2;oy=ay;o*=round(a*);r=round(abs(a*2-a*1)/2);if(Isroundred(*,o*,oy,r)==1);return;end;end;end;32end;o*=0;oy=0;r=0;functiono*=FindLastRed(*,*1,*2,y)fori=*1:*2;a=*(i,y,1);b=*(i,y,2);c=*(i,y,3);if(a<=150||b>=150||c>=90);o*=i;return;end;end;o*=0;function[o*,oy,r]=FindFirstYellow(*,*1,*2,y1,y2)a*1=0;a*2=0;ay=0;fori=*1:*2;forj=y1:y2;a=*(i,j,1);b=*(i,j,2);c=*(i,j,3);if(a>150&&b>100&&c<90);a*1=i;ay=j;a*2=FindLastYellow(*,a*1+1,*2,ay);a*=(a*1+a*2)/2;oy=ay;o*=round(a*);r=round(abs(a*2-a*1)/2);if(Isround(*,o*,oy,r)==1);return;end;end;end;end;33o*=0;oy=0;r=0;functiono*=FindLastYellow(*,*1,*2,y)fori=*1:*2;a=*(i,y,1);b=*(i,y,2);c=*(i,y,3);if(a<=150||b<=100||c>=90);o*=i;return;end;end;o*=0;functiony=Isroundred(*1,o*,oy,r)y=0;a=round(r/2);if(o*+a>240||oy+a>320||o*-a<1||oy-a<1);return;end;if(*1(o*,oy+a,1)>150&&*1(o*,oy+a,2)<150&&*1(o*,oy+a,3)<90);if(*1(o*,oy-a,1)>150&&*1(o*,oy-a,2)<150&&*1(o*,oy-a,3)<90);if(*1(o*+a,oy+a,1)>150&&*1(o*+a,oy+a,2)<150&&*1(o*+a,oy+a,3)<90);if(*1(o*-a,oy+a,1)>150&&*1(o*-a,oy+a,2)<150&&*1(o*-a,oy+a,3)<90);if(*1(o*-a,oy-a,1)>150&&*1(o*-a,oy-a,2)<150&&*1(o*-a,oy-a,3)<90);if(*1(o*+a,oy-a,1)>150&&*1(o*+a,oy-a,2)<150&&*1(o*+a,oy-a,3)<90);y=1;end;end;end;end;end;end;functiony=Isround(*1,o*,oy,r)y=0;34a=round(r/2);if(*1(o*,oy+r-5,1)>150&&*1(o*,oy+r-5,2)>100&&*1(o*,oy+r-5,3)<90);if(*1(o*,oy-r+5,1)>150&&*1(o*,oy-r+5,2)>100&&*1(o*,oy-r+5,3)<90);y=1;end;end;function[s,r]=Position(d*,dy)s=0;r=(d*^2+dy^2)^0.5;if(d*==0&&dy==0);return;end;if(dy==0&&d*>0);s=0;return;end;if(dy==0&&d*<0);s=180;return;end;if(d*==0&&dy>0);s=90;return;end;if(d*==0&&dy<0);s=270;return;end;q=d*/dy;temp=acot(q)*180/pi;if(d*<0&&dy<0);s=temp+180;return;end;if(d*>0&&dy>0);35s=temp;return;end;if(d*<0&&dy>0);s=temp+180;return;end;if(d*>0&&dy<0);s=temp+360;return;end;%disp(mq);%a=3;%b=4;%c=(a^2+b^2)^0.5functiontravel(action)%TRAVELTravelingsalesmanproblemdemonstration.%Thisdemoanimatesthesolutionofthe%so-called"TravelingSalesman"problem.%Theproblemistoformaclosedcircuitofa%numberofcitieswhiletravelingtheshortest%totaldistancealongtheway.%%Thealgorithmthisdemousesisverysimple,%andsotheemphasishereismoreonthe%animationthanonrapid,efficientsolution.%%Usethe"Cities"popupmenutodeterminethe%numberofcitiestobevisited.The"Start"%and"Stop"buttonscontroltheanimation.Cities%arechosenpletelyatrandom.%NedGulley,6-21-93%Copyright1984-2003TheMathWorks,Inc.%$Revision:5.21.4.2$$Date:2004/04/1023:25:50$36%Informationregardingtheplaystatuswillbeheldin%thea*isuserdataaccordingtothefollowingtable:play=1;stop=-1;ifnargin<1,action='initialize';end;switchactioncase'initialize',oldFigNumber=watchon;figNumber=figure(...'Name','Travel:TheTravelingSalesmanProblem',...'NumberTitle','off',...'Visible','off',...'DoubleBuffer','on',...'Color',[0.90.90.9],...'BackingStore','off');a*es(...'Units','normalized',...'Position',[0.050.050.750.90],...'Visible','off',...'Ne*tPlot','add');te*t(0,0,'Pressthe"Start"buttontoseetheedgedetectionandbeginimageprocessing',...'HorizontalAlignment','center');a*is([-11-11]);%===================================%InformationforallbuttonslabelColor=[0.80.80.8];yInitPos=0.90;*Pos=0.85;btnWid=0.10;btnHt=0.10;%Spacingbetweenthebuttonandthene*tmand'slabelspacing=0.05;%====================================37%TheCONSOLEframefrmBorder=0.02;yPos=0.05-frmBorder;frmPos=[*Pos-frmBorderyPosbtnWid+2*frmBorder0.9+2*frmBorder];h=uicontrol(...'Style','frame',...'Units','normalized',...'Position',frmPos,...'BackgroundColor',[0.500.500.50]);%====================================%TheSTARTbuttonbtnNumber=1;yPos=0.90-(btnNumber-1)*(btnHt+spacing);labelStr='Start';cmdStr='start';callbackStr='travel(''start'');';%GenericbuttoninformationbtnPos=[*PosyPos-spacingbtnWidbtnHt];startHndl=uicontrol(...'Style','pushbutton',...'Units','normalized',...'Position',btnPos,...'String',labelStr,...'Interruptible','on',...'Callback',callbackStr);%====================================%TheCITIESpopupbuttonbtnNumber=2;yPos=0.90-(btnNumber-1)*(btnHt+spacing);te*tStr='Points';popupStr=reshape('1520253035404550',4,8)';%GenericbuttoninformationbtnPos1=[*PosyPos-spacing+btnHt/2btnWidbtnHt/2];btnPos2=[*PosyPos-spacingbtnWidbtnHt/2];popupHndl=uicontrol(...'Style','te*t',...'Units','normalized',...'Position',btnPos1,...'String',te*tStr);38btnPos=[*PosyPos-spacingbtnWidbtnHt/2];popupHndl=uicontrol(...'Style','popup',...'Value',4,...t'Units','normalized',...'Position',btnPos2,...'String',popupStr);%====================================%TheSTOPbuttonbtnNumber=3;yPos=0.90-(btnNumber-1)*(btnHt+spacing);labelStr='Stop';%Settinguserdatato-1(=stop)willstopthedemo.callbackStr='set(gca,''Userdata'',-1)';%GenericbuttoninformationbtnPos=[*PosyPos-spacingbtnWidbtnHt];stopHndl=uicontrol(...'Style','pushbutton',...'Units','normalized',...'Position',btnPos,...'Enable','off',...'String',labelStr,...'Callback',callbackStr);%====================================%TheINFObuttonlabelStr='Detection';callbackStr='travel(''info'')';infoHndl=uicontrol(...'Style','push',...'Units','normalized',...'Position',[*Pos0.20btnWid0.10],...'String',labelStr,...'Callback',callbackStr);%====================================%TheCLOSEbuttonlabelStr='Close';callbackStr='close(gcf)';closeHndl=uicontrol(...'Style','push',...39'Units','normalized',...'Position',[*Pos0.05btnWid0.10],...'String',labelStr,...'Callback',callbackStr);%UncoverthefigurehndlList=[startHndlpopupHndlstopHndlinfoHndlcloseHndl];set(figNumber,...'Visible','on',...'UserData',hndlList);watchoff(oldFigNumber);figure(figNumber);case'start',%////////////////////////////////////////////////////////////vidobj=videoinput('winvideo',1,'RGB24_320*240');preview(vidobj);%////////////////////////////////////////////////////////////WNumber=watchon;a*Hndl=gca;figNumber=gcf;hndlList=get(figNumber,'Userdata');startHndl=hndlList(1);popupHndl=hndlList(2);stopHndl=hndlList(3);infoHndl=hndlList(4);closeHndl=hndlList(5);set([startHndlcloseHndlinfoHndl],'Enable','off');set(stopHndl,'Enable','on');set(a*Hndl,'Userdata',play);set(popupHndl,'Enable','off');%======StartofDemo%Travelproblem%ThisisthemainprogramfortheTravelingSalesmanProblem.%Thisfunctionmakesuseofthefollowingotherfunctions:%inside40%LaydownapictureoftheUnitedStatesforgraphicappeal.load('usborder.mat','*','y','**','yy');%Thefileusborder.matcontainsamapoftheUSinthevariables%*andy,andageometricallysimplifiedversionofthesamemap%inthevariables**andyy.cla;plot(*,y,'Color','blue');a*isoff;a*is([-0.11.5-0.21.2]);set(a*Hndl,'Drawmode','Fast');holdon;drawnow;nptsStr=get(popupHndl,'String');nptsVal=get(popupHndl,'Value');npts=str2double(nptsStr(nptsVal,:));set(popupHndl,'Enable','off');%...elsegeneratetherandomcitiestovisit*=[];Y=[];%FormtheUSborderinimaginarycoordsfortheINSIDEroutinew=**+i*yy;n=0;whilen<npts,a=rand*1.4+i*rand;ifinside(a,w),*=[*;real(a)];Y=[Y;imag(a)];n=n+1;end;end;*y=[*Y];%Calculatethedistancematri*forallofthecitiesdistmatri*=zeros(npts);forcount1=1:npts,forcount2=1:count1,*1=*y(count1,1);y1=*y(count1,2);*2=*y(count2,1);y2=*y(count2,2);41distmatri*(count1,count2)=sqrt((*1-*2)^2+(y1-y2)^2);distmatri*(count2,count1)=distmatri*(count1,count2);end;end;%Generateaninitialrandompathbetweenthosecitiesp=randperm(npts);new*y=*y(p,:);new*y=[new*y;new*y(1,:)];*data=new*y(:,1);ydata=new*y(:,2);watchoff(WNumber);plot(*data,ydata,'r.','Markersize',24);plothandle=plot(*data,ydata,'yellow','LineWidth',2);a*isoff;drawnow;len=LocalPathLength(p,distmatri*);lenhist=len;whileget(a*Hndl,'Userdata')==play,drawnow;drawFlag=0;pause(1);%maketheimagemoreclearbackground=getsnapshot(vidobj);[o*,oy,r]=FindFirstYellow(background,1,240,1,320);disp(o*);disp(oy);disp(r);%background=double(background)/255;%figure(3);%image(background);%disp(background(1,1,3));%Tryapointforpointswap%========================swpt1=floor(npts*rand)+1;swpt2=floor(npts*rand)+1;swptlo=min(swpt1,swpt2);swpthi=ma*(swpt1,swpt2);42order=1:npts;order(swptlo:swpthi)=order(swpthi:-1:swptlo);pnew=p(order);lennew=LocalPathLength(pnew,distmatri*);iflennew<len,p=pnew;len=lennew;drawFlag=1;end;%========================%Tryasinglepointinsertion%========================swpt1=floor(npts*rand)+1;swpt2=floor((npts-1)*rand)+1;order=1:npts;order(swpt1)=[];order=[order(1:swpt2)swpt1order((swpt2+1):(npts-1))];pnew=p(order);lennew=LocalPathLength(pnew,distmatri*);iflennew<len,p=pnew;len=lennew;drawFlag=1;endifdrawFlag,new*y=*y(p,:);new*y=[new*y;new*y(1,:)];*data=new*y(:,1);ydata=new*y(:,2);set(plothandle,'*Data',*data,'YData',ydata);drawnow;end;%========================end;%======EndofDemoset([startHndlcloseHndlinfoHndl],'Enable','on');43set(stopHndl,'Enable','off');set(popupHndl,'Enable','on');delete(vidobj);clearvidobj;case'info',%helpwin(mfilename)vidobj=videoinput('winvideo',1,'RGB24_320*240');preview(vidobj);pause(1);%maketheimagemoreclearbackground=getsnapshot(vidobj);delete(vidobj);clearvidobj;*1=background;figure(2);image(*1);[o*,oy,r]=FindFirstYellow(*1,1,240,1,320);disp(o*);disp(oy);disp(r);end;%ifstrcmp(action,...functiontotal=LocalPathLength(p,distmatri*)%Calculatecurrentpathlengthfortravelingsalesmanproblem.%Thisfunctioncalculatesthetotallengthofthecurrentpath%pinthetravelingsalesmanproblem.npts=size(p,2);

温馨提示

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

评论

0/150

提交评论