智能小車原理
人來(lái)完成。而在機(jī)器人在復(fù)雜地形中行進(jìn)時(shí)自動(dòng)避障是一項(xiàng)必不可少也是最基本的功能。因此,自動(dòng)避障系統(tǒng)的研發(fā)就應(yīng)運(yùn)而生。我們的自動(dòng)避障小車就是基于這一系統(tǒng)開發(fā)而成的。于未知空間和人類所不能直接到達(dá)的地域的探索逐步成為熱門,:Vr V< r vv*n , v我們的自動(dòng)避障小車就是自動(dòng)避障機(jī)器人中的一類。自動(dòng)避障小車可以作為地域探索機(jī)器人和緊急搶險(xiǎn)機(jī) 器人的運(yùn)動(dòng)系統(tǒng),讓機(jī)器人在行進(jìn)中自動(dòng)避過(guò)障礙物。都選修過(guò)數(shù)字電路課程。二、總體方案設(shè)計(jì)1、設(shè)計(jì)要求>意義隨著科技的發(fā)展,對(duì)這就使機(jī)器人的自動(dòng)避障有了重大的意義。t w r . s. r t. r r t、r » r >- rrrr t 一 咅 b /_» r a ia r >-成員情況本組三位成員均為 2005級(jí)基地班學(xué)生,F(xiàn)T"iBb ITA小車從無(wú)障礙地區(qū)啟動(dòng)前進(jìn),感應(yīng)前進(jìn)路線上的障礙物后,根據(jù)障礙物的位置選擇下一步行進(jìn)方向。并可通過(guò)兩個(gè)獨(dú)立按鍵對(duì)小車進(jìn)行控速*LLII*(如右圖所示)。小車在行進(jìn)過(guò)程中由光電開關(guān)向前方發(fā)射岀紅外線,當(dāng)紅外線遇到障礙物時(shí)發(fā)生漫反射,信號(hào)的情況來(lái)判斷前方障礙物的分布并做出相應(yīng)的動(dòng)反射光被光電開關(guān)接fc*h*作。光電開關(guān)的平均探測(cè)距離為,收。小車根據(jù)三個(gè)光電開關(guān):30cm 。ATT3、模塊方案比較及論證ILLII主控a塊廉軟件模塊) 書驚? 主控芯片探測(cè)模塊) 光電開關(guān)組獨(dú)立按*方案一:自己設(shè)計(jì)制作車架在設(shè)計(jì)車體框架時(shí),我們有兩套起始方案,自己制作和直接購(gòu)買玩具電動(dòng)車。依靠前輪電機(jī)帶動(dòng)前輪轉(zhuǎn)向完成,精度低。FT考慮到利用玩.心用優(yōu)良的算法來(lái)彌補(bǔ),故我們選擇方案二。左埶左后自己制作小轉(zhuǎn)、右后轉(zhuǎn)、倒車等動(dòng)作。減速電機(jī)扭矩大,轉(zhuǎn)速較慢易于控制和調(diào)速,符合避障小車的耍求。而且自己制作小車框架,可以根據(jù)電路板及傳案方案二:具電動(dòng)車制作周期較長(zhǎng),且費(fèi)用較高,因而我們.玩具電動(dòng)車價(jià)格低廉,有完整的驅(qū)動(dòng)、傳動(dòng)和控制單元,其中傳動(dòng)裝置是我們所需的,縮短了開發(fā)周期。K zjSN 衛(wèi)、 六但玩具電動(dòng)車采用普通直流電機(jī)驅(qū)動(dòng),帶負(fù)載能力差,調(diào)速方面對(duì)程序要求較高。同時(shí),玩具電動(dòng)車轉(zhuǎn)向/ VJf MM/ VJf M/ , Jf 'I:具電動(dòng)小車做車架開發(fā)周期短,可留夠充分的時(shí)間用于系統(tǒng)調(diào)試,且硬件上的不足我們有信 vjff VW vjff VnI4-A*-IIIILII但由于需要電線對(duì)小II方案二Lk他邏輯單元供II715VLLVL低電池:6V壓接一個(gè)QdTTTI直流電機(jī)供電I光電幣關(guān)供電ffIJJ起9Vi«電源VI同時(shí),由于 mega16綜合考慮,我們采用方案三course project ,我們直接選用了課程主要介紹的,機(jī)及其他邏輯單元供電,另取六節(jié)供電。而電機(jī)和光電h上h之并不苛刻,故我們將的勺電源不做穩(wěn)壓處理。這樣給電機(jī)供電.方案三:采用干電池組進(jìn)行供電電池為電機(jī)及電線識(shí)別為障礙物,人為增加了不必要的障礙以安裝四節(jié)干電池故我們放棄了這一方案。蓄電池具有較強(qiáng)的電流驅(qū)動(dòng)能力和較好的電壓穩(wěn)定性能,且成本低廉。可采用蓄電池經(jīng)3.3主控模塊始時(shí)考慮使用7805芯片對(duì)6V的電池電壓進(jìn)行降壓穩(wěn)壓。但考慮到這樣使得7805采用交流電提供直流穩(wěn)壓電源,電流驅(qū)動(dòng)能力及供電,極大影響了壁障小車行動(dòng)的靈活性及地形的適應(yīng)能力*LIl重量較小,同V I經(jīng)過(guò)降壓接 7805芯片給單片機(jī)作為單片機(jī)原理與接口技術(shù)課程的而且壁障小車極易把拖在地上的采用四節(jié)樣電機(jī)啟動(dòng)及制動(dòng)時(shí)的短暫電壓干擾不會(huì)影響到邏輯單元和單片機(jī)的工作。干電池用電池盒封裝,體積和Th't芯片消耗大量能量,降穩(wěn)定性最好,且負(fù)載對(duì)電源影響也最小。且重量過(guò)7812芯片穩(wěn)壓后3.2電源及穩(wěn)壓模塊方案一:采用交流電經(jīng)直流穩(wěn)壓處理后供電只需在小車主板上加兩個(gè)調(diào)速按鈕,根據(jù)電池電量選擇合適功率即可,甚至于可直接在軟件里設(shè)置自動(dòng)換 擋。ff V科亠 7W V科亠 7< j V造成電機(jī)負(fù)載過(guò)大,不適合我們采用的小車車架(玩具電動(dòng)車車架)。故我們放棄了這一方案?!癓LBl“LaVBl單片機(jī)*翅 輸芯片供電提供邏輯電平LLIIVI方便。拔岀插MCUyLLaLLI4'T4LTLL主要涉及7現(xiàn)d號(hào)0非門與門T1VTVf1:J'模塊非門。由在設(shè)計(jì)開發(fā)過(guò)程中我們使用課程設(shè)計(jì)提供的開發(fā)板進(jìn)行程序調(diào)試和下載,配車使用時(shí)直接將入我們小車.示意圖如下:塔號(hào)電路板底座中。示意圖如下L頻器和比較器功能的8位定時(shí)器j 電 JttT16位定時(shí)器/%數(shù)器??赏ㄟ^(guò)能和捕捉功能的四個(gè)二輸入與門和四個(gè)二輸入或非門,我們用各用一片芯片即可實(shí)現(xiàn)所需邏輯功能| 弋由于三輸入或非門在市場(chǎng)上很難購(gòu)買到,我們采用了兩個(gè)二輸入或非門和一個(gè)二輸入與門完成了三輸入或 我們采用的 74HC08 (四二輸入與門l* L3.4邏輯模塊3.5探測(cè)模塊方案一:使用超聲波探測(cè)器在探測(cè)模塊和單片機(jī)中斷接口之間、 獨(dú)立按鍵與單片機(jī)中斷接口之間rni 池 | /Q三輸入或非門和一個(gè)二輸入與門。這兩個(gè)邏輯關(guān)系我們直/計(jì)數(shù)器和一個(gè)具有預(yù)分頻器JTAG 對(duì) MCU 進(jìn)行程序燒寫及仿真。內(nèi)置晶振,使L k* L、74HC02X ¥ &"內(nèi)部集成兩個(gè)具有獨(dú)立預(yù)分ATmaga16L單片機(jī)作為主控模塊。、 ,7 Vt 叩 (Mega16是高性能、低功耗的8位AVR需要經(jīng)過(guò)電平的邏輯處理進(jìn)行連接。用74HC系列的集成芯片:丄I;a微處理器,具有先進(jìn)的 RISC結(jié)構(gòu)與門LIH橋電路工作性能不夠所以我們放方案四:使用光電開關(guān)進(jìn)行障礙物信息采集3cm ),使得小車必須制動(dòng)迅速。而我們由 j此我們放棄了這一方案。30cm工一般在可以直接通過(guò)電源來(lái)調(diào)節(jié)輸岀八7測(cè)距方便。但由于聲波V .誤判斷。同時(shí),超聲波探測(cè)具有幾厘米甚至幾十厘米的盲區(qū),這對(duì)于我們的避障小車是個(gè)致命的限制。故超聲波探報(bào)面太大,易造物的錯(cuò)我們放棄了這一方案。方案二:使用光電對(duì)管探測(cè)于米用普通10cm 。方案三:使用視頻采集處理裝置進(jìn)行探測(cè)這是最精確的障礙物信息采集方案,這是最V.信息采“使用CCD實(shí)時(shí)采集小車前進(jìn)路線上的圖像并進(jìn)行實(shí)時(shí)傳輸及處理,這可以對(duì)障礙物進(jìn)行精確定位和測(cè)距。但是使用視頻采集會(huì)大大增加小車成本和設(shè)計(jì)開發(fā)難度,而且考慮到使用三只E3F-DS30C4光電開關(guān),分別探測(cè)正前方,前右側(cè),前左, 密集地形)可將正前方的光電開關(guān)移置后方進(jìn)行探測(cè)。SSR*-kdB*可調(diào),且抗外界背景光干擾能力強(qiáng),可在日光下 'V們小車換檔調(diào)速后的最大制動(dòng)距離不超過(guò)&求。綜上考慮,我們選用方案四。示意圖如下:光電幵關(guān)23.6電機(jī)驅(qū)動(dòng)模塊方案一:(如障礙,八"工丿TE3F-DS30C4光電開關(guān)平均有效探測(cè)距離 030cm(理論上應(yīng)避免日光和強(qiáng)光源的直接照射)。我1020cm左右,因而探測(cè)距離滿足我們的小車需PMJ單沖機(jī)使用分立原件搭建電機(jī)驅(qū)動(dòng)電路造價(jià)低廉,在大規(guī)模生產(chǎn)中使用廣泛。但分立原件穩(wěn)定,較易岀V方案二:使用L298N芯片驅(qū)動(dòng)電機(jī)L298N流的全橋驅(qū)動(dòng)芯片,輸出電壓最高可達(dá)1/1f50V,*V311ILI*AL片rnJ最終方案卜L298NVA動(dòng)+9V l 流供 電電L293N電+5V H漬邏輯電提供信號(hào),而一n74HC系列芯片完成。L298N 芯單片杞撈令總線驅(qū)動(dòng)直流電機(jī)用比較方便。L298N單元模塊設(shè)計(jì)性能穩(wěn)定,使芯片可以驅(qū)動(dòng)兩個(gè)二相電機(jī),也可以驅(qū)動(dòng)一個(gè)四相電機(jī),正好符合我們小車兩個(gè)二相鳧護(hù)電路 nr型qi、各單元模塊功能介紹及電路設(shè)計(jì)光電開關(guān)進(jìn)行障礙物探測(cè),使用WM調(diào)速V綜合考慮我們采用科w V .w Vw V使用干電池組對(duì)系統(tǒng)供電,改造玩具電動(dòng)車作為小車底座.驅(qū)動(dòng)小車電機(jī)。控制示意圖如下=>久護(hù)* vW V耳 *采用Mega16L作為主控芯片,采用E3F-DS30C47Q用單片機(jī)的''使能端,方便*L-昭經(jīng)過(guò)測(cè)量,一般四節(jié)新南孚電池串聯(lián)帶負(fù)載后可提供 5.8V電壓。經(jīng)過(guò)二極管穩(wěn)壓至5.15.2VTA后給邏輯器AP1-5.3V件供電并給系統(tǒng)提供高電平標(biāo)準(zhǔn)。4/使用Mega 16L的PBOPB2接經(jīng)過(guò)電平轉(zhuǎn)換的探測(cè)器信號(hào)線,實(shí)現(xiàn)對(duì)障礙物信息的采集。PC1接受獨(dú)立按鍵信號(hào),實(shí)現(xiàn)對(duì)小車行進(jìn)過(guò)程中速度的控制。由于我們小車電機(jī)A/ 1使用 Mega 16L 的 PCO、 r -幺幺電源沒有經(jīng)過(guò)穩(wěn)壓,隨著電池電量的消耗,電機(jī)電池組的電壓逐漸降低,因而小車速度會(huì)發(fā)生變化。我們mXi FT,«i就可以通過(guò)獨(dú)立按鍵對(duì)憶 T *n , *.速度進(jìn)行提前設(shè)定,使得即使電池組電量變化,小車也能按預(yù)定速度行進(jìn)5使用Mega 16L的PD2、PD3接收中斷信息。在軟件部分我們可以看到,Tr的 INTO,V31接地。,即PD2并沒有使用。使用引腳10為單片機(jī)供電,引腳隨著程序的不斷完善,最終我們7 “Figure 1. ATmega16 的引腰(XCK/TO) PBO 匸(T1) PB1 匚(INT2/A1N0J PB2 匚 (OCO/AJN1J PB3 匚 JPB4CMOSn PB5 匚PB6 C (SCK) PB7 匚 RESET 匚VCC CGND匚XTAL2 CXTAL1 匚(RXD) PtXl 匚(TXDJ PD1 匚 (INTO) PD2 匚 (INT1J PD3 匚 (OC1B> PD4 匚 (OC1AJ PD5 匚 (ICP1) PD6 匚O1234567B&C12 3 4 5 8 7 B 9 1 1111111112Dfp0987664321 o*va7B5432143333333233222222 222nnnnnnnnnnnnnnnrmnnnPAO (ADCO) PA1 (ADC1) PA2 (ADC2) PA3 (ADC3) PA4 (ADC4) PAS (ADC5) PA6 (ADC6) FV7 (ADC7) AREFGNDAVCCPC7 (TOSC2J PC6 (TOSC1J PCS (TDI) PC4 (TOO) PCS (TMS) PC2 (TCK) PC1 (SDA)PCD (SCLPD7 (OC2)我們還是給以闡釋)。所述,最終我們用定時(shí)器中斷代替了這個(gè)外部中斷, 但作為硬件設(shè)計(jì)和焊接的一部分, 兩個(gè)獨(dú)立按鍵分別控制提速和減速,沒有按下時(shí)一一一亠,F(xiàn) '亠一亠一 電平,同時(shí)給出一個(gè)低電平給 INT1。任務(wù)實(shí)現(xiàn):i ”W-,信號(hào)線給岀高電平。當(dāng)任意一鍵按下時(shí),信號(hào)線給岀低J * c r * '我們用74HC08的一卡1 、第一個(gè)任務(wù)的實(shí)現(xiàn)原本想采用三輸入或非門甲丁 - /74HC27 實(shí)現(xiàn)。*3/T:1 JJTT第二個(gè)任務(wù)邏輯的實(shí)現(xiàn)使用任務(wù)邏輯X按鍵與邏輯高電平(<*74HC08的一個(gè)與門實(shí)現(xiàn)。按鍵功能的實(shí)現(xiàn),是使用了y'7+5V),無(wú)鍵按下電平上拉至邏輯高電平,有鍵按下時(shí)降至接兩個(gè)按鍵d1| £ h >I 4F1XJTTVLII光電開餐組*kTiM1742T任務(wù)實(shí)現(xiàn)rfT回的信號(hào)是非標(biāo)發(fā)射極電壓小于+5V反1i_ V hi變化。若前方有障礙物2.光電* £L1.光電TE h ¥7將光電開關(guān)傳回的非標(biāo)準(zhǔn)的開關(guān)電平信號(hào)轉(zhuǎn)換成這對(duì)于 Mega16芯片是不適用的。T設(shè)計(jì)任務(wù):I寸出的紅外線在經(jīng)障礙物漫反射后會(huì)由光電開關(guān)再接則光電開關(guān)傳回低電平;若前方無(wú)障礙物但這并不影響前方障礙物的探測(cè)。型光電開關(guān)傳回的電平I個(gè) 5K1的電阻上拉,使輸出的高0。這樣輸出電平已經(jīng)轉(zhuǎn)化為 CMOS標(biāo)準(zhǔn)電平。不過(guò),這N h1*10K1:-:的變化可以實(shí)現(xiàn)對(duì)前方障礙物的探測(cè)。p-f豐 bCMOS標(biāo)準(zhǔn)電平(即將 09V轉(zhuǎn)換成05V)8050三極管來(lái)實(shí)現(xiàn)電平的轉(zhuǎn)換。由三極管的電氣特性,當(dāng)其基極為低電平時(shí),即基極T時(shí)傳回到Mega16的電平信號(hào)已經(jīng)和原來(lái)光電攵到,這會(huì)引則光電開關(guān)傳回的是高電平。有電平導(dǎo)通壓降,其輸岀電平為高電平,在其輸岀端有 極為高電平時(shí),三極管發(fā)射極正偏,輸出電平為lULI電機(jī)驅(qū)動(dòng)模塊的電路圖DIOIvLLI6vIviLL4148T4k4148QTOVOA*4148'414S+5Vj關(guān)閉時(shí)泄流之用nTA控制轉(zhuǎn)向電制其實(shí)現(xiàn)前進(jìn)對(duì)于后置電量不1OCO)連接T7IL?9fi ,WL298N芯片的SENSOLT4 0UT3 DWENBINS 再安+5VCKD ECENA IN;VSS 0LT2 OLT: SEs'A電機(jī)驅(qū)動(dòng)模塊主要功能是將主控芯片發(fā)岀的信號(hào)通/irp _ 1 /If1 _ 1 /Itocryoury7?ZTVOUT/頁(yè)過(guò)L298N由于我們足而產(chǎn)生的小車變慢的問(wèn)題。所以,我們將HIM動(dòng)電機(jī),我們不僅:電機(jī)控制芯片轉(zhuǎn)化為小車實(shí)際的動(dòng)作。雅L298N芯片有兩個(gè)電源引腳 VDD引腳和VCC引腳。VDD弓I腳接+9V電源用來(lái)給電機(jī)供電,VCC弓I腳接15L298N芯片通過(guò)一個(gè)有四個(gè) 4148二極管組成的保護(hù)電路與電機(jī)相連,保護(hù)電路主要是用來(lái)在電機(jī)開啟和呂退和停止,還要能夠控制其轉(zhuǎn)速以解-*vHENB引腳與 Mega16的PB3引腳機(jī)的輸岀功率,所以 ENA引腳(即轉(zhuǎn)向電機(jī)使能引腳)直接接+5 V,即讓轉(zhuǎn)向電機(jī)一直使能。Al /QA1 /QAI ?功率使能從而獲得最大的扭矩,保證小車轉(zhuǎn)向成功,而不用來(lái)實(shí)現(xiàn)PWM調(diào)速。T,驅(qū)動(dòng)模塊爾LTJlJU brJiIbILVtIT后退Vv1LLLLIIILI所用全部硬件資源2TATMega 16L/32LLLLLLLLL2983只8IL5K1電阻散熱(12)UU(13)40(15)y7*T目前程TA,<r IkIk1只幺(14)(16)(17)的動(dòng)作指令,并通過(guò)L298N芯片的IN3和IN4弓I腳分別與“Mega16增強(qiáng)版AIN2 引腳5列裝排線1米左右實(shí)驗(yàn)電路板1只502粘合劑1瓶獨(dú)立按鍵2只7 * 電池盒2只1、程序調(diào)試過(guò)程計(jì)(11)Mega 16LTTVTHrL1 .V*、°u羯和UT4來(lái)控制驅(qū)動(dòng)電機(jī)的正轉(zhuǎn)與反轉(zhuǎn),最終功能的實(shí)現(xiàn)表現(xiàn)在小車的前進(jìn)對(duì)尋障避障的方法前后有較大的改變。vfArt5 只,10Kr/Tl8050NP,經(jīng)經(jīng)歷了四個(gè)主要版本T7T13dt遙控電動(dòng)玩具車t飛7TN三極管WjF74HC02芯片、74HC08芯片各1片IFL298N 芯片“74148二極管彳十*南孚電池6節(jié),華太電池4節(jié)T#*右轉(zhuǎn)。E3F-DS30C4光電開關(guān)3只3V>*L,和調(diào)試過(guò)程VHTJ單片機(jī)1片.機(jī)驅(qū)動(dòng)芯片1片的PA3和PA2引腳連接用來(lái)接收主控芯片輸岀的驅(qū)動(dòng)電機(jī)J* L四、程序簡(jiǎn)版JTAG仿真器(程序的下載和仿真)7TLr和PA0引腳連接用來(lái)接收主控芯片輸岀的轉(zhuǎn)向電的動(dòng)作指令,并通過(guò) 0UT1和0UT2來(lái)控制轉(zhuǎn)向電機(jī)的正轉(zhuǎn)與反轉(zhuǎn),最終功能的實(shí)現(xiàn)表現(xiàn)在小車的左轉(zhuǎn)與寧的IN1和</L諭方無(wú)障冊(cè)物II詢方仃障礙物V麗進(jìn)等待下次中斷觸發(fā)4IJJ1TTi根據(jù)檢測(cè)到的障礙物怙況(分 7種人從7個(gè)動(dòng)作函數(shù)屮選擇 一個(gè)執(zhí)行ITT檢測(cè)傳感器端Ti.i最初的程序設(shè)計(jì)主流程端口值是多少?TI勺反饋值前方T發(fā)現(xiàn)左方有小障礙(001 ):前進(jìn)并右轉(zhuǎn)L V7個(gè)動(dòng)作:發(fā)現(xiàn)前方有小障礙發(fā)現(xiàn)右方有小n,iPWM模式控制小ZU07初始時(shí)小車的速度,以便于調(diào)試。第一版程序中為小車設(shè)計(jì)了如下而自然的想法。用定時(shí)器T0的快010 ):后退并右轉(zhuǎn)、障礙(100) :前進(jìn)并左轉(zhuǎn)障礙物根據(jù)種),從7個(gè)動(dòng)作函數(shù)中選擇一個(gè)執(zhí)行前進(jìn)等待下次中斷觸發(fā) 前方無(wú)障礙物INT0中斷觸發(fā)端口值是多r>NT0中斷觸發(fā)LJ1F檢測(cè)傳感器端口的反饋值1fTTTTTTTT的,不能根據(jù)環(huán)境自動(dòng)調(diào)整,前進(jìn)后退都太沖;因?yàn)閯?dòng)作都是用延時(shí)函數(shù)實(shí)現(xiàn)的,動(dòng)作中要禁用全局中斷,導(dǎo)致發(fā)現(xiàn)障TjT發(fā)現(xiàn)前方有大障礙(111):發(fā)現(xiàn)右方有大障礙(110 ):后退并右轉(zhuǎn);交大的后退并右轉(zhuǎn)發(fā)現(xiàn)左方有大障礙(011 ):后退并左轉(zhuǎn);發(fā)現(xiàn)兩邊有障礙但中間無(wú)障礙T 101):較大的后退并右轉(zhuǎn);按照這樣常常一頭撞上去:后退態(tài),經(jīng)常撞上后面的物體。礙物不及時(shí),時(shí)動(dòng)作無(wú)法調(diào)整,即使已經(jīng)避開了障礙物還是無(wú)法及時(shí)轉(zhuǎn)換成前進(jìn)狀巳整,鑒于以上發(fā)現(xiàn)的問(wèn)題,我們又修改寫成了第二版程序,流程圖與第一版大致 相同,所不同的r &反饋值,然后根據(jù)反饋值選擇下一步動(dòng)作。也就是說(shuō),理函數(shù)形成了循環(huán),循環(huán)的唯一岀口在前進(jìn)函數(shù)里,只有可的是每次動(dòng)作的時(shí)間都被改得非常短(約幾個(gè)毫秒),在每個(gè)動(dòng)作結(jié)束后都在此檢測(cè)探測(cè)器8個(gè)動(dòng)作函數(shù)(加了一個(gè)前進(jìn))和一個(gè) INTO中斷處已無(wú)障礙物時(shí)才能退nr vn vnr vn 器 Vnr v望通過(guò)縮短每次動(dòng)作的時(shí)間、縮短兩次探測(cè)之間的間隔時(shí)間來(lái)達(dá)到變行進(jìn)邊探測(cè)效果,使小車的動(dòng)作更加檢測(cè)到前方斷。我們希?TF靈敏。1.2miT1r01I前方無(wú)障礙物前方有障礙物L(fēng)仃障/L刖進(jìn)1/等待下次中斷觸發(fā)7種)斷端口值但隨之而來(lái)又出現(xiàn)了新TTT檢測(cè)判斷端口侑T個(gè)動(dòng)作函數(shù)中選擇一個(gè)執(zhí)行h V iff V v障礙物情況很拡檢測(cè)別的障礙物怙況(分7種)*從7個(gè)動(dòng)作函數(shù)中選擇一個(gè)執(zhí)疔有障礙 無(wú)障礙INTO中斷觸發(fā) 端口值是多少?檢測(cè)傳感器端口的反饋值前方有障礙物 根據(jù)檢測(cè)到的等待下次中斷觸發(fā) t卜 * TV ¥對(duì)于這一版程序,我們?cè)谡{(diào)試過(guò)程中發(fā)現(xiàn)小車四處亂撞的問(wèn)題已經(jīng)基本能解決了端I r俏足 多少?前方無(wú)障礙物檢測(cè)判INTO 中1斷觸發(fā)1r檢測(cè)傳感器端口的反饋價(jià)1L問(wèn)題的具VILI改為用觸發(fā)溢岀T1LI1III4LLT4T4前方無(wú)障礙物前方仃障円物I等待下次中斷觸發(fā)T1T端口俏足 多少?體表現(xiàn)為:端口值有規(guī)律根掘檢測(cè)到的陽(yáng)礙物情況(分 7種),從7個(gè)動(dòng)作函效中選擇 一個(gè)執(zhí)行有一個(gè)動(dòng)作,動(dòng)作完成后不再'1.3第三版程序的主流程圖:等待下次中斷再修改控制端口值。(分 7同時(shí)節(jié)省CPU時(shí)間,我們對(duì)程序進(jìn)行了較大調(diào)整 中進(jìn)行檢測(cè)和行動(dòng)。iflr ;地閃動(dòng),大約0.2秒閃一次,出現(xiàn)一個(gè)極短的脈沖,其值恰好是 前進(jìn)TA因造成了這種現(xiàn)象,是退岀中斷服務(wù)程序時(shí)的一個(gè)脈沖。IlA* LIITH前進(jìn)和轉(zhuǎn)向的端Tr溢岀中斷 端口值是多少? 檢測(cè)傳感器端口的反饋值 前方有障礙物 根據(jù)檢測(cè)到的障礙物情況為了解決端口電平不穩(wěn)定的問(wèn)題,也為了定時(shí)更加準(zhǔn)確 金器來(lái)控制動(dòng)作和檢測(cè)。這時(shí)的行動(dòng)只是改變控制端口值,不需要延時(shí)函數(shù),這就大大節(jié)約了 CPU時(shí)間。每個(gè)動(dòng)作函數(shù)都精簡(jiǎn)到只r1T1溢出中斷1檢測(cè)傳感器端口的反慣值1FfLLLI1種)另外在啟I自動(dòng)變速INT1LI在測(cè)試中I暢了許多71LLVv£LLLLL第四版程序中新增添了防卡死機(jī)實(shí)現(xiàn)1.4LL!Vn1VirnVII*T7,<r IkIkT1 Jv4 i動(dòng)作,從Jl j VJl j VhV “_L為了解決這個(gè)問(wèn)題,我們?cè)诘?制,結(jié)合定時(shí)器控制和延時(shí)函尋物Zu%比較慢,沒;V .<而卡死。后退,后退到光常靈敏,能1 .V我們發(fā)現(xiàn)這樣的改變收到了良好的效果。小等待下次不過(guò),在測(cè)試中我們還是發(fā)現(xiàn)了新的問(wèn)題:小車在碰上前方的障*L擊、&2/“二,、&kh. . |lhIt障礙的地方改變方向前進(jìn),這是程序設(shè)計(jì)的動(dòng)作;但是如果小車在光電開關(guān)檢測(cè)距離閾值的地方正好速度連續(xù)動(dòng)作的進(jìn)行時(shí)間,由程序* L第四版程序的主流程圖動(dòng)和制動(dòng)時(shí)給小車較大的動(dòng)力能夠保證小車在改變方向時(shí)有足夠的1/X1夕j J7個(gè)動(dòng)作函數(shù)中選從這一流程圖可以看出的速度不再由各個(gè)動(dòng)作函數(shù)直接指定,而是通過(guò)計(jì)算一個(gè). TA Z .的OCRO值。這樣做主要是為了配合小車的啟動(dòng)和制動(dòng),tLIl在前方障礙物的檢測(cè)和避過(guò)上已經(jīng),U 丁亠即 ff V在隨意放置的障礙物陣中迅速找到前進(jìn)的路線穿過(guò)陣列。由于加上了自動(dòng)變速程序,小車的動(dòng)作也變得流J*,亠riJ*,亠riJ*斷觸發(fā)我們盡可能的精簡(jiǎn)了小車的動(dòng)作過(guò)程而在一般行進(jìn)時(shí)使用普通功率,這樣就可以既有效的控制小車的速度,又 E們還修改丨兩個(gè)按鍵的功能,不再是控制起始速度,而是控制普通行進(jìn)時(shí)的速度,使這兩個(gè)控制按鍵更加實(shí)用。使得整個(gè)判斷處理過(guò)程簡(jiǎn)潔而迅速。1eVE'l*TJ LrJt4/端口值是多少?詢力無(wú)障礙物T1溢出中斷記錄上一次釣動(dòng)作持續(xù)時(shí)間檢測(cè)傳感器端口的反饋(311前方有障倚物根據(jù)檢測(cè)到的障筒物帖況(分 7種人從7個(gè)動(dòng)作函數(shù)中選擇 個(gè)執(zhí)行T1等待下次中斷觸發(fā)溢岀中斷端口值是多少?反饋值種),從否卡死?7個(gè)動(dòng)作函數(shù)中選擇一個(gè)執(zhí)行等待 I執(zhí)行卡死 處理函數(shù) 清空歷史記錄 否是次中斷觸發(fā)執(zhí)行卡死 處理函數(shù)清空歷史記錄前方有障礙物根據(jù)檢測(cè)到前方無(wú)障礙物記錄上(分 7次的動(dòng)作持續(xù)時(shí)間是尋物情況ILI寸是一個(gè)有7t8次動(dòng)作中有7次以上持續(xù)時(shí)間在V中間沒有時(shí)LLI行從障礙物中間穿過(guò)比較靈敏了IIL此外有兩函數(shù)。fLLLLILLI*共有J,<r IkTO定時(shí):timerO_init();PINB端口值判斷前方障礙物情況。I勺問(wèn)題,小車對(duì)OCRO1LLAisr_timerO_isr_INTO();mid_power個(gè)輔助軟件3L期間禁用了T17種設(shè)定的障礙物情況,詳T相關(guān)函數(shù):從啟動(dòng)開始,利用變量防卡死機(jī)制有效地解決了小車程序設(shè)計(jì)了 3擋自動(dòng)調(diào)速探測(cè)到障礙物需要障礙探測(cè)模塊:如前所述,通過(guò)讀取T0.4秒以下,就認(rèn)為小車被卡住了,這時(shí)執(zhí)行卡死處理函數(shù),讓小車退岀卡死區(qū)域。LjV1 Ljd* IlL障礙物的躲避也行進(jìn)方向 ymid_power 值加1卡死處理函數(shù)使用了延ax_power, fast_poWer,間,使用最大功率連續(xù)前進(jìn)或后退0.3秒以克服摩擦阻力,接下來(lái) 0.3秒時(shí)用較大功率,以后使用普通功I/n時(shí)重新計(jì)時(shí)。通過(guò)兩個(gè)獨(dú)立按鍵可以調(diào)整普通功率 q視障礙物情況執(zhí)行1-3次倒退轉(zhuǎn)向動(dòng)作。此外我們改變了一個(gè)動(dòng)作函數(shù)yrixl穴1氣1穴VXI孑相關(guān)函數(shù):- 1作為小車周期性探測(cè)和動(dòng)作的時(shí)鐘。,片f定時(shí)器產(chǎn)生0.1秒間隔的溢岀中斷每次行進(jìn)方向改變,即由后退轉(zhuǎn)為前進(jìn)或由前進(jìn)轉(zhuǎn)為后退時(shí)率。其間如果:V直計(jì)算按鍵的時(shí)間,每個(gè)時(shí)間單位count moVe來(lái)計(jì)算連續(xù)行動(dòng)的時(shí)這一版程序?yàn)槲覀冃≤嚨淖罱K定型程序。set_OCRO()trap_handler();delay100us(n); fjdelay10ms(n);動(dòng)作歷史記錄隊(duì)列為基礎(chǔ)的s亠timer1_init();.Iisr_timer1_ovf(); y/Tl|histoid,Hr *PWM波形來(lái)控制驅(qū)動(dòng)電機(jī)的輸出功率。F1程序模塊構(gòu)成J 1系統(tǒng)時(shí)鐘模塊:通過(guò)T1亍h *7718個(gè)元素的數(shù)組個(gè)八"即認(rèn)為一次連續(xù)動(dòng)作結(jié)束,記錄這個(gè)動(dòng)作的1IIIIAtII常規(guī)動(dòng)作模塊:1V10LLIrVLI110LLLhistory 8LL曰./若有改變則歷動(dòng)V1相關(guān)函數(shù)Itrap_handler();V*且保芻f相關(guān)函數(shù):V下(括號(hào)內(nèi)現(xiàn)端口值不穩(wěn)定的問(wèn)題,該函數(shù)使用100(A J¥La j¥L每次T1move_front_bigobj()V I)3次T在行進(jìn)中對(duì)障礙* Ik相關(guān)函數(shù):T1定時(shí)器,這樣設(shè)計(jì)是因?yàn)檐浖訒r(shí)對(duì)時(shí)間間隔的控制更為靈活。為了防止像以前版本中的軟件延時(shí)動(dòng)作73層嵌套判斷結(jié)構(gòu))8次連續(xù)動(dòng)作所經(jīng)過(guò)的時(shí)間。初始值都設(shè)定為HrI111):較大的后退并右轉(zhuǎn)說(shuō)明小車在(通過(guò) isforward變量標(biāo)志)isr timer1 ovf()_別足以使小車退到安全區(qū)域move_front_obj()史記錄自動(dòng)清空為初始狀態(tài)。%L%Lmove_right_obj()move_left_obj()函數(shù)一樣判斷,若中間有一次探測(cè)發(fā)現(xiàn)障礙物消失,則退岀函數(shù)繼續(xù)執(zhí)行常規(guī)動(dòng)作。這樣就可以使函數(shù)的最大動(dòng)作 動(dòng)作的流暢性。record_history();發(fā)現(xiàn)右方有小障礙(100 ):前進(jìn)并左轉(zhuǎn)VV 乂If V發(fā)現(xiàn)左方有小障礙(001 ):前進(jìn)并右轉(zhuǎn)“7/ - &7/*發(fā)現(xiàn)前方有小障礙(010):后退并右轉(zhuǎn)閾值的位置上且'一 LtJ*1 L*dB1 ktJ01等于4 (連續(xù)動(dòng)作持續(xù)時(shí)間小于或等于0.4秒),則變量recorder加1;若最終recorder值大于或等于 7賣多次改變了行進(jìn)方向,則認(rèn)為小車處在探根據(jù)障礙探測(cè)模塊的返回值,由8個(gè)動(dòng)作函數(shù)控制小車的各種動(dòng)作。修改后的動(dòng)作列表如THAI E發(fā)現(xiàn)兩邊有障礙時(shí)間達(dá)到0.9秒history數(shù)組的各個(gè)元素值行卡死處理函數(shù)trap_handler()。trap_handler()是一個(gè)使用軟件延時(shí)作為計(jì)時(shí)方法的函數(shù),執(zhí)行期間禁用isr_timer1 ovf( trap_handler();進(jìn)穿過(guò);(move_double_obj() i/V其值代表之前后退并右轉(zhuǎn);(move_rjght_bigobj()“發(fā)現(xiàn)左方有大障礙(011 ):后退并左轉(zhuǎn);(move_left_bigobj()V_LFlTf r1、系統(tǒng)實(shí)現(xiàn)功能:AA對(duì)于前方任意放置的障礙物的靈活規(guī)避;3檔自動(dòng)變速;正常行進(jìn)速度的手動(dòng)連續(xù)調(diào)節(jié);防卡死機(jī)制,可以有效地退岀夾縫、通過(guò)在小車前方擺放不同顏色的障礙物來(lái)測(cè)試小車的制動(dòng)距離。該項(xiàng)測(cè)量在小車行進(jìn)中進(jìn)行。“ T1 匕T2、系統(tǒng)主要參數(shù)測(cè)試:角落等區(qū)域。給光電開關(guān)供電,前側(cè)放置不同顏色障礙物,通過(guò)尾部指示燈觀察探測(cè)距離。淺色:30cm深色:20cm韋 1八;L