智能小車軟件設(shè)計(jì)部分_第1頁(yè)
智能小車軟件設(shè)計(jì)部分_第2頁(yè)
智能小車軟件設(shè)計(jì)部分_第3頁(yè)
智能小車軟件設(shè)計(jì)部分_第4頁(yè)
智能小車軟件設(shè)計(jì)部分_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

-z.摘要:智能小車是各類電子競(jìng)賽的經(jīng)典題目。本工程在現(xiàn)有的玩具小車的根底上加裝各類傳感器及微處理器,實(shí)現(xiàn)對(duì)路況的識(shí)別及小車的控制,并最終實(shí)現(xiàn)智能小車電路板的開(kāi)發(fā)設(shè)計(jì),完成一套完整的自設(shè)計(jì)智能小車體系。本論文主要表達(dá)1.〕智能玩具小車控制板的電機(jī)驅(qū)動(dòng)模塊的原理圖設(shè)計(jì)及調(diào)試。電機(jī)驅(qū)動(dòng)控制模塊是整個(gè)控制板的核心內(nèi)容,主要涉及到電機(jī)方向控制單元和速度控制單元兩大局部。方向控制單元負(fù)責(zé)小車電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)和停頓三態(tài)控制,速度控制單元是擴(kuò)展單元,是為了適應(yīng)不同的場(chǎng)合需求而設(shè)置的。2.〕著重討論智能小車輔助設(shè)備的原理與運(yùn)用,包括攝像頭設(shè)備〔ET21*111〕,霍爾傳感器〔A3144〕,光電對(duì)管〔TCRT5000〕,LCD液晶屏幕〔RT1602C〕等。3.〕本文主要論述智能玩具小車控制板的無(wú)線通信模塊的原理圖設(shè)計(jì)及調(diào)試。無(wú)線通信模塊是智能玩具小車得以實(shí)現(xiàn)智能化的重要因素,電腦通過(guò)架設(shè)在場(chǎng)地上的攝像頭,處理得到的數(shù)據(jù),同時(shí)把控制小車的指令通過(guò)無(wú)線通信模塊傳送給小車,到達(dá)控制小車的目的。4.〕智能玩具小車控制的總后臺(tái),即電腦的圖象處理程序。圖象處理是整個(gè)控制的核心內(nèi)容,主要涉及到小車方向控制和速度控制兩大部,它首先判斷小車和目標(biāo)的相對(duì)位置,然后通過(guò)無(wú)限芯片發(fā)送不同的指令來(lái)控制小車的行動(dòng)路線。關(guān)鍵詞:智能玩具小車,電機(jī)驅(qū)動(dòng)模塊,方向控制,速度控制,攝像頭,霍爾傳感器,光電對(duì)管,LCD液晶屏幕,無(wú)線通信,圖象處理1.系統(tǒng)總述1.1系統(tǒng)組成圖1.1.1智能玩具小車系統(tǒng)組成示意圖單片機(jī)路線/轉(zhuǎn)速檢測(cè)電動(dòng)機(jī)驅(qū)動(dòng)路況檢測(cè)無(wú)線傳輸LCD顯示電腦處理52.系統(tǒng)的主要功能2.1單片機(jī)子系統(tǒng)通過(guò)無(wú)線傳輸設(shè)備接收電腦輸出的命令并執(zhí)行;連接電動(dòng)機(jī)進(jìn)展簡(jiǎn)單轉(zhuǎn)速控制運(yùn)算;進(jìn)展小范圍內(nèi)路線自動(dòng)控制;輸出當(dāng)前狀態(tài)至LCD顯示。本系統(tǒng)采用ATS9852芯片。2.2電動(dòng)機(jī)驅(qū)動(dòng)子系統(tǒng)采用兩步進(jìn)電機(jī),接收來(lái)自單片機(jī)信號(hào),通過(guò)電機(jī)前后轉(zhuǎn)動(dòng)組合實(shí)現(xiàn)小車前向、后向以及左右運(yùn)動(dòng)。2.3路線/轉(zhuǎn)速檢測(cè)子系統(tǒng)利用光電對(duì)管對(duì)小車進(jìn)展自動(dòng)路線糾正;利用霍爾傳感器進(jìn)展小車速度檢測(cè)并反應(yīng)到單片機(jī)內(nèi)進(jìn)展小范圍內(nèi)速度調(diào)控。2.4LCD顯示子系統(tǒng)從單片機(jī)獲取當(dāng)前小車動(dòng)態(tài)數(shù)據(jù)以數(shù)字形式在LCD屏幕顯示,方便實(shí)時(shí)監(jiān)控小車狀態(tài)并檢測(cè)調(diào)試。本系統(tǒng)采用RC1602CLCD屏幕顯示。2.5無(wú)線傳輸子系統(tǒng)接收來(lái)自電腦處理所得的命令并發(fā)送到單片機(jī)。本系統(tǒng)采用ET13*330/ET3*340無(wú)限發(fā)送接收模塊。2.6電腦處理子系統(tǒng)接收攝像頭路況圖像并進(jìn)展處理,將處理后命令通過(guò)無(wú)線模塊發(fā)送至單片機(jī)執(zhí)行。2.7路況檢測(cè)子系統(tǒng)利用連接到電腦上的攝像頭進(jìn)展路況攝像,所得圖像經(jīng)電腦處理成為小車控制命令。本系統(tǒng)采用ET21*111攝像頭。63.主系統(tǒng)的硬件設(shè)計(jì)3.1主要功能及設(shè)計(jì)目標(biāo)將電動(dòng)機(jī)驅(qū)動(dòng)電路以及單片7機(jī)控制電路整合在同一電路中,實(shí)現(xiàn)單片機(jī)對(duì)小車的根本操作,包括前后運(yùn)動(dòng)以及左右轉(zhuǎn)向。3.2電路設(shè)計(jì)方案圖3.2.1電路設(shè)計(jì)方案圖74.電動(dòng)機(jī)驅(qū)動(dòng)電路的設(shè)計(jì)4.1H橋電路簡(jiǎn)介下面詳細(xì)地介紹一下H橋的工作原理:眾所周知H橋有四個(gè)臂分別為B1、B2、B3、B4,分別對(duì)應(yīng)圖4.1.1中的Q2、Q3、Q7、Q8。四個(gè)臂分為兩組Q2、Q3和Q7、Q8,每一組的兩個(gè)臂都是同時(shí)導(dǎo)通,同時(shí)關(guān)斷的。如果讓Q2、Q3導(dǎo)通Q7、Q8關(guān)斷,電流會(huì)流經(jīng)Q3、負(fù)載、Q2組成的回路,加在負(fù)載Load兩端的電壓左正右負(fù),如圖4.1.2所示,此時(shí)電機(jī)正轉(zhuǎn);如果讓Q7、Q8導(dǎo)通Q2、Q3關(guān)斷,電流會(huì)流經(jīng)Q8、負(fù)載、Q7組成的回路,加在負(fù)載Load兩端的電壓為左負(fù)右正,此時(shí)電機(jī)反轉(zhuǎn),對(duì)應(yīng)圖4.1.3所示。另外如果讓Q2、Q3關(guān)斷Q7、Q8也關(guān)斷,負(fù)載Load兩端懸空,此時(shí)電機(jī)停轉(zhuǎn)。這樣就實(shí)現(xiàn)了電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)、停頓三態(tài)控制。圖4.1.1圖4.1.2由于Q2、Q3,Q7、Q8的導(dǎo)通和關(guān)斷是通過(guò)Q1、Q6控制,而Q1、Q6的導(dǎo)通和關(guān)斷又是通過(guò)MOT1〔IOB10〕、MOT2〔IOB11〕控制的,所以電機(jī)的狀態(tài)還是通過(guò)I/O端口來(lái)控制的。表2.1描述了IOB10和IOB11所控制電機(jī)運(yùn)行狀態(tài)與端口數(shù)據(jù)的對(duì)應(yīng)關(guān)系注意:由H橋的工作原理可知,H橋的四個(gè)臂不能同時(shí)導(dǎo)通,一旦四個(gè)臂同時(shí)導(dǎo)通會(huì)出現(xiàn)類似短路的現(xiàn)象,在H橋的每一個(gè)臂上都會(huì)有很大的電流流過(guò)。如圖4.1.3,Q2、Q3、Q7、Q8同時(shí)導(dǎo)通時(shí),就會(huì)形成Q3、Q7回路和Q2、Q8回路,就會(huì)有很大的電流經(jīng)過(guò)這4個(gè)三極管,嚴(yán)重時(shí)會(huì)燒毀三極管甚至引起電源爆8圖4.1.3以上分析的是兩個(gè)H橋電路的其中之一,另外一個(gè)H橋的電路構(gòu)造和工作原理是完全一樣,在這里就不再贅述。小車的運(yùn)動(dòng)是靠輪子帶動(dòng)的,而輪子的轉(zhuǎn)動(dòng)是靠電機(jī)帶動(dòng)的,所以在確定了電機(jī)的運(yùn)行狀態(tài)之后就能夠推斷出小車的運(yùn)行狀態(tài)。下面是小車運(yùn)行狀態(tài)與61板端口數(shù)值對(duì)照表〔表2.2〕:4.2H橋電路的保護(hù)電路設(shè)計(jì)為了防止出現(xiàn)上述情況,我們?cè)O(shè)計(jì)了以下邏輯電路〔圖4.1.4〕,從而防止了出現(xiàn)四個(gè)臂同時(shí)導(dǎo)通的情況。圖8.2.2RT1602C數(shù)據(jù)傳輸時(shí)序圖8.3RT1602C根本操作程序//LCD初始化程序voidLCD_INIT(void){OUTI(0*38);//設(shè)接口數(shù)據(jù)位數(shù)(DL),顯示行數(shù)(L),及字型(F)delay(60);OUTI(0*38);//設(shè)接口數(shù)據(jù)位數(shù)(DL),顯示行數(shù)(L),及字型(F)delay(50);OUTI(0*38);//設(shè)接口數(shù)據(jù)位數(shù)(DL),顯示行數(shù)(L),及字型(F)delay(50);OUTI(0*38);//設(shè)接口數(shù)據(jù)位數(shù)(DL),顯示行數(shù)(L),及字型(F)delay(50);OUTI(0*0F);//設(shè)整體顯示開(kāi)關(guān)(D),光標(biāo)開(kāi)關(guān)(C),及光標(biāo)位的字符閃耀(B)delay(50);OUTI(0*01);//清屏指令delay(50);OUTI(0*06);//設(shè)光標(biāo)移動(dòng)方向并指定整體顯示是否移動(dòng)delay(50);OUTI(0*80);//設(shè)DDRAM地址,設(shè)置后DDRAM數(shù)據(jù)被發(fā)送和接收delay(50);}//重定義std庫(kù)內(nèi)putchar,以printf調(diào)用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);//送一個(gè)字符顯示_nop_();flag++;//incrementthelineflagif(flag>=32){flag=0;}//顯示完之后去除return(c);}//時(shí)延函數(shù)voiddelay(unsignedchartime){unsignedchari;for(;time>0;time--){for(i=0;i<=100;i++)_nop_();}}//命令執(zhí)行命令voidBWritemand(){pc8255=0*00;//寫命令pc8255=0*04;//讀忙,E為1_nop_();pc8255=0*00;//讀入數(shù)據(jù),執(zhí)行命令}//數(shù)據(jù)寫入命令voidBWriteData(){pc8255=0*01;//寫數(shù)據(jù)pc8255=0*05;//讀入數(shù)據(jù),執(zhí)行命令_nop_();pc8255=0*01;//讀忙,E為1}//命令行輸出voidOUTI(unsignedcharoi){pb8255=oi;BWritemand();_nop_();_nop_();pc8255=0*02;//讀忙}22//數(shù)據(jù)行輸出voidOUTD(unsignedcharod){pb8255=od;BWriteData();_nop_();_nop_();pc8255=0*02;//讀忙}239.ET13*330無(wú)線通信芯片的原理與使用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無(wú)線通信模塊局部調(diào)試程序源代碼#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.圖像處理技術(shù)的原理和應(yīng)用10.1圖象處理簡(jiǎn)介下面詳細(xì)地介紹一下列圖象處理程序的設(shè)計(jì)原理:首先,我們要通過(guò)攝像頭獲取圖象,然后才能處理圖象,Matlab中能夠非常容易的實(shí)現(xiàn)圖象的獲?。簐idobj=videoinput('winvideo',1,'RGB24_320*240');preview(vidobj);pause(1);%maketheimagemoreclearbackground=getsnapshot(vidobj);建立一個(gè)視頻流對(duì)象后vidobj,應(yīng)用getsnapshot〔〕函數(shù)就能獲取當(dāng)前視頻的畫面,并以圖象的形式存儲(chǔ)到了background中,以便對(duì)圖象進(jìn)展處理。其次,我們要識(shí)別小車,就要檢測(cè)其邊緣并提取輪廓,因此下面用一些例子簡(jiǎn)要分析一下列圖象的邊緣檢測(cè)與輪廓提取原理以及方法。1.邊沿檢測(cè):這種程序就是一種邊沿檢測(cè)器,它在數(shù)學(xué)上的涵義是一種基于梯度的濾波器,又稱邊沿算子,你沒(méi)有必要知道梯度確實(shí)切涵義,只要有這個(gè)概念就可以了。梯度是有方向的,和邊沿的方向總是正交〔垂直〕的,例如,對(duì)于圖象,邊是水平方向的,我們可以用梯度是垂直方向的模板檢測(cè)它的邊沿,這里矩陣作為模板其實(shí)是實(shí)現(xiàn)了一個(gè)離散函數(shù)的梯度計(jì)算,在Matlab中可以方便的實(shí)現(xiàn)矩陣的運(yùn)算,這也是我們選擇matlab作為開(kāi)發(fā)軟件的原因之一。Sobel算子在邊沿檢測(cè)中,常用的一種模板是sobel算子。有兩個(gè),一個(gè)是檢測(cè)水平邊沿的.一個(gè)是檢測(cè)豎直平邊沿的。與和相比,sobel算子對(duì)于像素的位置的影響做了加權(quán),因此效果更好。Sobel算子另一種形式是IsotropicSobel算子,也有兩個(gè),一個(gè)是檢測(cè)水平邊沿的,一個(gè)是檢測(cè)豎直平邊沿的。IsotropicSobel算子又稱各向同性的Sobel算子。和普通Sobel算子相比,它的位置加權(quán)系數(shù)更為準(zhǔn)確,在檢測(cè)不同方向的邊沿時(shí)梯度的幅度一致。28圖10.1.原圖圖10.2普通Sobel算子處理后的結(jié)果圖圖10.3各向同性Sobel算子處理后的結(jié)果圖上面的幾幅圖中,圖1為原圖,圖2為普通Sobel算子處理后的結(jié)果圖,圖3為各向同性Sobel算子處理后的結(jié)果圖,可以看出Sobel算子確實(shí)把圖象中的邊沿提取了出來(lái)。高斯拉普拉斯算子由于噪聲點(diǎn)〔灰度與周圍點(diǎn)相差很大的點(diǎn)〕對(duì)邊沿檢測(cè)有一定的影響,所以效果更好的邊沿檢測(cè)器是高斯拉普拉斯(LOG)算子。先平滑掉噪聲,再進(jìn)展邊沿檢測(cè),所以效果會(huì)更好。29常用的LOG算子是5*5的模板,如下所示。到中心點(diǎn)的距離與位置加權(quán)系數(shù)的關(guān)系用曲線表示為:圖10.4LOG到中心點(diǎn)的距離與位置加權(quán)系數(shù)的關(guān)系曲線是不是很象一頂墨西哥草帽?所以,LOG又叫墨西哥草帽濾波器。下列圖為圖5用LOG濾波器處理后的結(jié)果。圖10.5用LOG濾波器處理后的結(jié)果圖2.輪廓提取輪廓提取如下列圖所示:30圖10.6原圖圖10.7輪廓提取輪廓提取的算法非常簡(jiǎn)單,就是掏空內(nèi)部點(diǎn):如果原圖中有一點(diǎn)為黑,且它的8個(gè)相鄰點(diǎn)都是黑色時(shí)〔此時(shí)該點(diǎn)是內(nèi)部點(diǎn)〕,則將該點(diǎn)刪除。要注意的是,我們處理的雖然是二值圖,但實(shí)際上是256級(jí)灰度圖,不過(guò)只用到了0和255兩種顏色。3.輪廓跟蹤輪廓跟蹤,顧名思義就是通過(guò)順序找出邊緣點(diǎn)來(lái)跟蹤出邊界。圖10.6經(jīng)輪廓跟蹤后得到的結(jié)果如圖10.8所示圖10.8輪廓跟蹤后的結(jié)果一個(gè)簡(jiǎn)單二值圖象閉合邊界的輪廓跟蹤算法很簡(jiǎn)單:首先按從上到下,從左到右的順序搜索,找到的第一個(gè)黑點(diǎn)一定是最左上方的邊界點(diǎn),記為A。它的右,右下,下,左下四個(gè)鄰點(diǎn)中至少31有一個(gè)是邊界點(diǎn),記為B。從開(kāi)場(chǎng)B找起,按右,右上,上,左上,左,左下,下,右下的順序找相鄰點(diǎn)中的邊界點(diǎn)C。如果C就是A點(diǎn),則說(shuō)明已經(jīng)轉(zhuǎn)了一圈,程序完畢。否則從C點(diǎn)繼續(xù)找,直到找到A為止。判斷是不是邊界點(diǎn)很容易:如果它的上下左右四個(gè)鄰居都是黑點(diǎn)則不是邊界點(diǎn),否則是邊界點(diǎn)。上述三個(gè)圖象處理步驟描述了圖象處理的根本過(guò)程,我們?cè)谡{(diào)試中用的是小車撞擊乒乓÷球,因此我們只需要識(shí)別小車與乒乓球,同時(shí)為了簡(jiǎn)化程序,我們還在小車上裝設(shè)了標(biāo)志,用來(lái)識(shí)別小車。并且在圖象處理程序中我們首先進(jìn)展了濾波,消除干擾因素,然后正確判斷小車與乒乓球的相對(duì)位置。我們一共用到如下的幾個(gè)函數(shù):FindLastRed:用來(lái)找到小車上的標(biāo)記的坐標(biāo)的函數(shù)Isroundred:用來(lái)進(jìn)一步確認(rèn)真正的標(biāo)記的函數(shù)〔考慮到干擾因素〕FindLastYellow:用來(lái)找到乒乓球的坐標(biāo)的函數(shù)Isround:用來(lái)進(jìn)一步確認(rèn)真正的乒乓球坐標(biāo)的函數(shù)〔考慮到干擾因素〕Position:用來(lái)根據(jù)小車標(biāo)記和乒乓球的坐標(biāo)給出相應(yīng)的位置信息的函數(shù)。Travel:相當(dāng)于主函數(shù),用來(lái)實(shí)時(shí)的從視頻流獲取圖象并調(diào)用子函數(shù)處理圖象,返回控制信息的函數(shù)。10.2圖像處理算法軟件實(shí)現(xiàn)最終程序如下: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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論