版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、電腦老鼠走迷宮競(jìng)賽,算法簡(jiǎn)介,08計(jì)算機(jī)(1)班 龔若皓,軟件算法所需要實(shí)現(xiàn)的功能,最基本的功能:1.正確記錄迷宮的信息2.正確記錄小車的狀態(tài)(當(dāng)前的方向,四周的擋板情況等)3.確保小車的移動(dòng),停止和轉(zhuǎn)彎的可控性需要實(shí)現(xiàn)的核心功能1.實(shí)現(xiàn)基本的從起點(diǎn)到終點(diǎn)的尋路過程。2.實(shí)現(xiàn)等高表的生成算法。3.實(shí)現(xiàn)從當(dāng)前的位置通過最有效的路徑移動(dòng)到指定的任意位置。(通過建立等高表來實(shí)現(xiàn))4.根據(jù)已經(jīng)得到的迷
2、宮地圖信息實(shí)現(xiàn)起點(diǎn)到終點(diǎn)的最短路徑分析。(通過建立等高表來實(shí)現(xiàn)),軟件算法所需要實(shí)現(xiàn)的功能,可拓展的部分:1.適當(dāng)修改步進(jìn)電機(jī)的驅(qū)動(dòng)函數(shù),提高步進(jìn)電機(jī)的加速和減速功能,提高整體的速度。2.改進(jìn)尋路算法,最好不要使用傳統(tǒng)的右手法則和左手法則,使用向心法則等高效的尋路方法。3.進(jìn)行數(shù)據(jù)補(bǔ)全,減少小車進(jìn)入“死胡同”的次數(shù)。4.改進(jìn)轉(zhuǎn)彎的方式,盡量實(shí)現(xiàn)前進(jìn)中拐彎,同時(shí)確保穩(wěn)定性,提高整體的速度。消除不必要的停頓使小車行駛更
3、加流暢。5.改進(jìn)傳統(tǒng)的等高表路徑分析算法,實(shí)現(xiàn)加權(quán)的等高表算法,將拐彎次數(shù)的信息也加入到最短路徑的分析過程中。,數(shù)據(jù)的存儲(chǔ)方式,1.迷宮信息的存儲(chǔ) 因?yàn)槊詫m分為16*16=256個(gè)方格,所以很直觀地可以想到用一個(gè)二維矩陣來存儲(chǔ)一個(gè)迷宮的信息,矩陣中的每一個(gè)元素用于存儲(chǔ)地圖中一個(gè)方格的信息,矩陣每個(gè)元素可以定義成Byte型,只用其中的四位就可以存儲(chǔ)方格四面的擋板信息了,有擋板的方向?qū)?duì)應(yīng)的位置位,沒有擋板
4、的將對(duì)應(yīng)位清零。要獲取某一個(gè)方格單個(gè)方向的擋板信息,只需要做一個(gè)簡(jiǎn)單的與運(yùn)算在看結(jié)果是否為零即可。剩下的四位用于其它的用途,例如在后期的加權(quán)等高表生成算法中存儲(chǔ)小車的方向信息。初始化的時(shí)候?qū)⒕仃囋氐臄?shù)值低四位初始化為0,標(biāo)識(shí)改坐標(biāo)是否被探測(cè)過。,數(shù)據(jù)的存儲(chǔ)方式,舉例: 假設(shè)Byte型的數(shù)據(jù)Data=0bxxxx1100存儲(chǔ)了某一個(gè)方格四個(gè)方向的擋板信息,高四位用于存儲(chǔ)其他信息,低四位用于存儲(chǔ)檔板的信息,從高位到低位
5、分別對(duì)應(yīng)方向?yàn)椋荷?,右,下,左(絕對(duì)方向)。 上 右 下 左 0b x x x x 1 1 0 0& 0b 0 0 0 0 0 1 0 0 0b 0 0
6、 0 0 0 1 0 0 結(jié)果不為零,判斷為右邊有擋板,數(shù)據(jù)的存儲(chǔ)方式,2.方向信息的存儲(chǔ)方向 絕對(duì)方向:以小車剛剛開始運(yùn)行的時(shí)候車頭面 向的方向作為“上”,
7、其他的方向 類推。 相對(duì)方向:顧名思義,相對(duì)于當(dāng)前小車所朝向 的方向的方向。例如絕對(duì)方向的下 相對(duì)于絕對(duì)方向的右的相對(duì)方向是 右方,數(shù)據(jù)的存儲(chǔ)方式,方向的分類:小車的車頭朝向的方向: 需要分配空間來固定地存
8、儲(chǔ)下來,平并且在小車運(yùn)行的過程中隨著轉(zhuǎn)彎而變化,是以絕對(duì)方向來表示的。小車轉(zhuǎn)彎的方向: 不需要分配單獨(dú)的空間的固定存儲(chǔ),只需要給不同的轉(zhuǎn)彎方向編制不同的實(shí)現(xiàn)函數(shù)就行了,例如給向右轉(zhuǎn)彎編制一個(gè)函數(shù)TurnRight(),這里的右方是相對(duì)方向,亦即是相對(duì)于當(dāng)前小車的車頭朝向的方向的方向,例如小車當(dāng)前是朝著絕對(duì)方向的右方的,那么現(xiàn)在右轉(zhuǎn)函數(shù)要實(shí)現(xiàn)的就是將小車車頭轉(zhuǎn)到面向絕對(duì)方向的下方,而不是絕對(duì)方向的右方。那么
9、轉(zhuǎn)彎后,記錄小車的車頭方向的變量應(yīng)該怎樣變化呢?,數(shù)據(jù)的存儲(chǔ)方式,絕對(duì)方向和相對(duì)方向的變換: 假設(shè)數(shù)值0,1,2,3分別表示絕對(duì)方向的上,右,下,左,那么就用0,1,2,3中的其中一個(gè)數(shù)值來表示當(dāng)前小車車頭朝向的方向,當(dāng)然這個(gè)數(shù)值是動(dòng)態(tài)變化的,每轉(zhuǎn)彎一次該數(shù)值應(yīng)當(dāng)變化一次,例如當(dāng)前方向的數(shù)值為3(左方),那么經(jīng)過一次右轉(zhuǎn)操作后該數(shù)值就應(yīng)該變化為0了(上方)。其實(shí)轉(zhuǎn)化的規(guī)則相當(dāng)簡(jiǎn)單,只要右轉(zhuǎn)方向數(shù)值就加1,只要左轉(zhuǎn)
10、方向數(shù)值就加3,只要后轉(zhuǎn)方向數(shù)值就加2,當(dāng)然可能有越界的情況,所以得出的方向數(shù)值再進(jìn)行模運(yùn)算對(duì)4取余數(shù)得出的結(jié)果就是轉(zhuǎn)彎后小車的車頭所面向的方向的數(shù)值了。,數(shù)據(jù)的存儲(chǔ)方式,綜上所述可以得出如下的表格:,數(shù)據(jù)的存儲(chǔ)方式,通過前面的表格可以找到當(dāng)前的小車方向和轉(zhuǎn)彎后的小車方向的對(duì)應(yīng)關(guān)系,得出的相對(duì)方向和絕對(duì)方向的轉(zhuǎn)換公式如下所示:轉(zhuǎn)彎后的絕對(duì)方向=(轉(zhuǎn)彎前的絕對(duì)方向+轉(zhuǎn)彎數(shù)值)% 4 小車的車頭方向一般是用一個(gè)
11、全局變量來存儲(chǔ)的,方便在轉(zhuǎn)彎的函數(shù)中進(jìn)行修改,避免C語(yǔ)言中一些作用域的問題。也可以通過傳指針的方式來完成,不過定義為全局變量比較方便。,小車的運(yùn)行包括的子過程,1.初始探測(cè) 確定小車的起點(diǎn)坐標(biāo)是(0,0)還是(15,0)。2.尋路 在找到迷宮終點(diǎn)的前提下盡量多地通過尋路算法獲取更多的迷宮信息并正確存儲(chǔ)起來。3.反向搜索(可以省略) 在找到迷宮的終點(diǎn)后不馬
12、上返回終點(diǎn),而是繼續(xù)探索,獲取更多的迷宮信息,為最短路徑的算法提供更多的信息。4.沖刺 在保證穩(wěn)定的情況下,用最快的速度控制小車從起點(diǎn)移動(dòng)到終點(diǎn)。,尋路算法簡(jiǎn)介,尋路是小車在運(yùn)行的整個(gè)過程中進(jìn)行的第一個(gè)操作,目的是讓小車在迷宮中探索,同時(shí)記錄已經(jīng)走過的路徑的信息,直到小車找到終點(diǎn)就可以結(jié)束探索尋路的過程了,當(dāng)然也可以在找到終點(diǎn)后繼續(xù)探索遍歷整個(gè)迷宮,使小車盡可能多地收集迷宮的地圖信息,以便后期進(jìn)行最短路徑的分
13、析計(jì)算時(shí)能夠運(yùn)用更多的信息,這樣就可能在分析數(shù)據(jù)后找到更好的最短路徑,得到更好的成績(jī)。,尋路算法簡(jiǎn)介,尋路算法的兩個(gè)關(guān)鍵點(diǎn):在岔路口的轉(zhuǎn)彎策略以及小車運(yùn)行的穩(wěn)定性 轉(zhuǎn)彎的策略一定程度上決定了從小車開始運(yùn)行到找到終點(diǎn)的時(shí)間長(zhǎng)短。良好的轉(zhuǎn)彎尋路策略可以大量減少不必要的尋路時(shí)間,用較高的效率尋找到終點(diǎn)。小車運(yùn)行的穩(wěn)定性對(duì)于尋路過程也十分重要,如果小車運(yùn)行時(shí)姿態(tài)不穩(wěn)定很有可能撞到擋板,這時(shí)電機(jī)就會(huì)空轉(zhuǎn)一段時(shí)間,那么統(tǒng)計(jì)的數(shù)據(jù)
14、就整個(gè)亂掉了,很有可能造成算法崩潰,所以小車的行進(jìn)和轉(zhuǎn)彎的過程一定要在機(jī)械和軟件方面都調(diào)節(jié)到最穩(wěn)定的狀態(tài),然后再開始設(shè)計(jì)后續(xù)的算法。,尋路算法簡(jiǎn)介,2. 正確使用堆棧,整個(gè)選路算法的運(yùn)行過程中會(huì)大量地使用堆棧的入棧和出棧操作,如果對(duì)入棧和出棧的條件判斷不正確,有可能造成數(shù)據(jù)紊亂,整個(gè)算法就崩潰了,最好使用調(diào)試版上的數(shù)碼管實(shí)時(shí)顯示堆棧棧頂?shù)臄?shù)據(jù),發(fā)現(xiàn)有錯(cuò)誤就在程序中尋找錯(cuò)誤,直到整個(gè)尋路算法穩(wěn)定為止。,轉(zhuǎn)彎策略簡(jiǎn)介,在尋路過程中,如
15、果小車遇到迷宮中的岔路口時(shí),應(yīng)該考慮的問題是在岔路口應(yīng)該選擇哪個(gè)方向繼續(xù)行進(jìn)探索。比較常規(guī)的策略有右手法則,左手法則,優(yōu)先向前法則,向心法則等等,下面詳細(xì)介紹一下它們的概念: 右手法則:小車在搜過程中有兩個(gè)以上的搜索方向時(shí),優(yōu)先選擇向右轉(zhuǎn),其次是向前行進(jìn),最后才考慮向左轉(zhuǎn)彎。 左手法則:小車在搜過程中有兩個(gè)以上的搜索方向時(shí),優(yōu)先選擇向左轉(zhuǎn),其次是向前行進(jìn),最后才考慮向右轉(zhuǎn)彎。,轉(zhuǎn)彎
16、策略簡(jiǎn)介,優(yōu)先向前法則:優(yōu)先向前行進(jìn)不轉(zhuǎn)彎,然后考慮向左或向右轉(zhuǎn)彎,向左或向右的優(yōu)先級(jí)可以自行靈活設(shè)定。 隨即策略:在可前進(jìn)的方向中隨機(jī)選擇一個(gè)前進(jìn),其選擇的結(jié)果是不定的,也沒有什么規(guī)律可循。 上述的所有策略都有一個(gè)共同的缺陷,就是在選擇轉(zhuǎn)彎方向時(shí),沒有考慮小車當(dāng)前在迷宮的那個(gè)位置,一味地調(diào)用一種尋路策略都是不科學(xué)的。因?yàn)槊詫m的終點(diǎn)是在迷宮地圖的中心固定不變的,所以在選擇轉(zhuǎn)彎的方向時(shí)應(yīng)該把小車所處
17、的位置考慮在內(nèi)。,轉(zhuǎn)彎策略簡(jiǎn)介,向心法則: 把整個(gè)16*16的迷宮地圖分解為左下,右下,左上,右上四個(gè)均等的區(qū)域,在不同的區(qū)域中選擇不同的轉(zhuǎn)彎策略,使得小車始終向著迷宮的中心靠近,這樣就可以以最快的速度接近終點(diǎn),總體上說比單獨(dú)的右手或者左手法則要科學(xué)有效。下面介紹具體的在地圖的那個(gè)區(qū)域采用哪種轉(zhuǎn)彎策略。,轉(zhuǎn)彎策略簡(jiǎn)介,向心法則需要根據(jù)小車車頭當(dāng)前朝向的方向和小車處在迷宮中位置來綜合判斷需要采用哪一種轉(zhuǎn)彎的策略
18、,所以在判斷條件上比較繁復(fù),但是實(shí)際的運(yùn)行效果是比較好的。犧牲一些程序的效率來實(shí)現(xiàn)向心法則是比較劃算的。在向心法則中轉(zhuǎn)彎方向的選擇以靠近中心為原則,可以得出策略的選擇如下面的圖表所示。,向心法則轉(zhuǎn)彎選擇統(tǒng)計(jì)表,尋路算法流程圖,檢測(cè)擋板信息,開始,統(tǒng)計(jì)方格四周沒有探索過的路徑數(shù)目,是否還有沒探索過的方向,有兩個(gè)以上的未探索方向,坐標(biāo)入棧,根據(jù)定好的策略轉(zhuǎn)彎,繼續(xù)前進(jìn),是,轉(zhuǎn)向剩下的一個(gè)方向,是,否,保存岔路口坐標(biāo)的堆棧為空?,否,棧頂?shù)牟?/p>
19、路口坐標(biāo)出棧,否,是否還有沒探索過的方向,否,控制小車到達(dá)該坐標(biāo),是,小車返回起點(diǎn),是,后轉(zhuǎn),結(jié)束尋路過程,進(jìn)入沖刺狀態(tài),等高表算法介紹,在電腦鼠的尋路過程中有一個(gè)比較特殊的過程,就是在小車遇到了死胡同時(shí),應(yīng)該讓小車回到上一個(gè)岔路口,雖然可以利用堆棧的先入后出的特性來存儲(chǔ)尋路過程中經(jīng)過的岔路口坐標(biāo),但是具體地要怎么樣使得小車從當(dāng)前的位置移動(dòng)到岔路口呢?換言之,我們需要實(shí)現(xiàn)將小車從當(dāng)前的位置移動(dòng)到一個(gè)指定的任意位置,而且還要使得移動(dòng)過程經(jīng)
20、歷的路徑盡可能地短。在后期的最短路徑的生成問題其實(shí)也是上面的問題的一個(gè)特例,只不過把當(dāng)前的位置設(shè)置為了迷宮的起點(diǎn),而要到達(dá)的位置設(shè)置成了迷宮的終點(diǎn)而已。,等高表算法介紹,綜上所述,我們只需要集中精力解決上面敘述的第一個(gè)問題就行了,即怎樣從當(dāng)前的位置尋找一條最短的路徑到達(dá)一個(gè)指定的任意位置,要實(shí)現(xiàn)上面的功能,就需要用到等高表。 其實(shí)等高表的概念并不復(fù)雜,其實(shí)在電腦鼠這個(gè)比賽中,等高表就是以一個(gè)二維矩陣的形式表現(xiàn)出來的,
21、對(duì)于16*16的迷宮地圖而言,我們可以開辟一個(gè)16*16的二維矩陣來表示等高表,數(shù)值類型選擇Byte型就夠用了,等高表中的每一項(xiàng)都對(duì)應(yīng)了迷宮地圖上的一個(gè)方格,用于存儲(chǔ)起點(diǎn)到該方格的最短路徑步數(shù)。,等高表算法介紹,我們可以形象地想象地圖中的每一個(gè)方格都有一個(gè)高度,起點(diǎn)的高度最高,而終點(diǎn)的高度最低,從起點(diǎn)到終點(diǎn)的過程其實(shí)就是沿著一條等高表的數(shù)值遞減的路徑行進(jìn)的過程。終點(diǎn)相當(dāng)于山腳,起點(diǎn)相當(dāng)于山頂,從起點(diǎn)向終點(diǎn)沖刺就是從山頂向山腳沖刺。,等高
22、表算法流程圖,開始,開辟16*16的存儲(chǔ)空間用于存儲(chǔ)等高表,遍歷整個(gè)二維矩陣,該方格是否是搜索時(shí)曾經(jīng)過的,將方格對(duì)應(yīng)的等高表數(shù)值賦值為0xFE,表示該方格信息有效,將方格對(duì)應(yīng)的等高表數(shù)值賦值為0xFF,表示該方格信息無效,是,終點(diǎn)坐標(biāo)等高值賦值為1,當(dāng)前坐標(biāo)設(shè)置為終點(diǎn)坐標(biāo),否,當(dāng)前坐標(biāo)旁邊還有有通路且等高表值比當(dāng)前坐標(biāo)等高值大二以上,當(dāng)前坐標(biāo)向旁邊移動(dòng),將對(duì)應(yīng)的等高值賦值為前一個(gè)坐標(biāo)對(duì)應(yīng)等高值加1,是,當(dāng)前的方格是不是有兩條以上岔路,將
23、當(dāng)前坐標(biāo)壓入堆棧,是,否,回到堆棧中保存的前一個(gè)岔路口坐標(biāo),如果該坐標(biāo)的方格只有一條或是沒有岔路可行了,就將該坐標(biāo)彈出堆棧,否,,求最短路徑——等高表生成算法演示:,,等高表生成算法,,,,,建立一個(gè)小型示意迷宮,假設(shè)老鼠已完成對(duì)迷宮的搜索,即掌握了迷宮地圖。,1,00,2,10,3,4,5,3,4,5,6,7,8,8,把走過的方格標(biāo)記為0xfe,未走過的標(biāo)記為0xff,起點(diǎn)標(biāo)記為1,把起點(diǎn)坐標(biāo)保存到堆棧,標(biāo)記為2,表示第二步到達(dá)的方格
24、,后面的以此類推,此時(shí)迷宮的前方和右方都有路,這是第三步,此時(shí)沒有可前進(jìn)的路,于是返回堆棧保存分支的地址繼續(xù)標(biāo)記,地址出棧,20,22,13,,,繼續(xù)保存分叉路的坐標(biāo),9,10,11,12,此時(shí)前進(jìn)方向的數(shù)比自己還小,所以無路可走,應(yīng)該返回到堆棧保存的分支地址,,6,32,7,,7,8,,4,5,,等高圖的最后的結(jié)果如左圖所示,圖中已經(jīng)標(biāo)明各個(gè)坐標(biāo)到起點(diǎn)需要的最少步數(shù),也就是找出了所有點(diǎn)到起點(diǎn)的最短路徑。,,,,,,,,,,,,,于是保
25、存分叉路的坐標(biāo),并隨便選一個(gè)方向前進(jìn),這不影響結(jié)果,此時(shí)搜索已沒有可前進(jìn)的方向,且堆棧中的分支地址僅有起點(diǎn)地址,所以可以判斷等高圖制作完畢。,普通等高表,對(duì)拐彎加權(quán)的等高表,最關(guān)鍵的功能:直接到指定的坐標(biāo),控制小車直接從當(dāng)前的坐標(biāo)達(dá)到一個(gè)指定的坐標(biāo)是整個(gè)軟件設(shè)計(jì)中要實(shí)現(xiàn)的最為關(guān)鍵的一個(gè)功能,在尋路的過程中涉及到頻繁地回到以前所經(jīng)歷的岔路口的過程,這就是一個(gè)從當(dāng)前坐標(biāo)移動(dòng)到指定的坐標(biāo)的典型情況,還有從起點(diǎn)到終點(diǎn)的沖刺過程其實(shí)也是一句
26、代碼完成的,就是將迷宮的起點(diǎn)作為小車的運(yùn)行起點(diǎn),將迷宮的終點(diǎn)作為小車運(yùn)行的終點(diǎn)來調(diào)用這個(gè)關(guān)鍵的功能。所以說這個(gè)從當(dāng)前坐標(biāo)移動(dòng)到指定的坐標(biāo)的功能是十分關(guān)鍵的。該功能的實(shí)現(xiàn)就要用到迷宮的等高表信息。,直接到指定的坐標(biāo)實(shí)現(xiàn)流程圖,制作以目的地為起始點(diǎn)的等高表,小車是否達(dá)到目的地,獲取當(dāng)前坐標(biāo)的等高值,尋找四周等高值較小的方向,前方的等高值較?。?否,前進(jìn)n個(gè)方格,n=0,否,前進(jìn)的方格數(shù)n++,是,小車是否達(dá)到目的地,向等高表數(shù)值較小的方向轉(zhuǎn)
27、彎,否,前進(jìn)n個(gè)方格,n=0,是,沖刺階段,沖刺階段沒有特殊的復(fù)雜算法問題,只需要調(diào)用前面已經(jīng)實(shí)現(xiàn)的從當(dāng)前坐標(biāo)到指定坐標(biāo)的的功能就行了,該功能實(shí)現(xiàn)的兩個(gè)坐標(biāo)之間的路徑的選擇已經(jīng)是最短的了。在沖刺的階段可以修改小車的速度參數(shù),使小車在沖刺的階段跑得快一點(diǎn),而在尋路的過程里可以跑得慢一點(diǎn),力求平穩(wěn)完成尋路的過程才可能完成比賽。,推薦軟件工具,Notepad++source insightVisual Studio 2005/2008
28、,添加一個(gè)方便的插件Visual Assist,軟件中可改進(jìn)的部分 1.消除不必要的停頓,在出廠代碼試跑中,小車每到一個(gè)岔路口就會(huì)停頓一下,即是在該岔路口不需要轉(zhuǎn)彎,小車也會(huì)先停頓在出路口,然后再重新加速開始前進(jìn),顯然是沒有必要的。根據(jù)上次比賽對(duì)代碼的分析,出現(xiàn)這種現(xiàn)象的原因在于出廠示例代碼的架構(gòu)安排不合理,出場(chǎng)的示例代碼中小車的前進(jìn)和在岔路口是否轉(zhuǎn)彎的判斷是分離的,所以小車每到一個(gè)岔路口程序就會(huì)從控制
29、前進(jìn)的函數(shù)跳回到主函數(shù)中進(jìn)行是否需要轉(zhuǎn)彎的判斷,然后再轉(zhuǎn)彎后又跳回到控制前進(jìn)的函數(shù)中運(yùn)行程序。這樣就在某些不需要在岔路口轉(zhuǎn)彎的情況造成了不必要的停頓。其實(shí)在岔路口是否需要轉(zhuǎn)彎應(yīng)該在控制前進(jìn)的函數(shù)結(jié)束前久判斷,如果不需要轉(zhuǎn)彎,就繼續(xù)進(jìn)行前進(jìn)的過程,不需要跳回主函數(shù)進(jìn)行是否需要轉(zhuǎn)彎的判斷,所以修正以上缺陷的方法就是增加控制前進(jìn)的子過程的返回條件,在不需要轉(zhuǎn)彎的岔路口不跳出前進(jìn)的子過程就行了。,軟件中可改進(jìn)的部分 2.去除“傻瓜式
30、”尋路過程,在出廠實(shí)例代碼的試跑過程中,可以發(fā)現(xiàn)其尋路過程效率非常低,經(jīng)常在一些三面都有擋板的單個(gè)方格間打轉(zhuǎn),其低效的原因其實(shí)是因?yàn)闆]有進(jìn)行數(shù)據(jù)補(bǔ)全,其實(shí)迷宮里面方格的信息并不是只有探測(cè)過此能夠得到,通過推斷的方法也是可以得到的,利用某個(gè)方格四周的方格的信息,就有可能推斷出這個(gè)方格的信息。而不需要每一個(gè)方格都探索。,軟件中可改進(jìn)的部分 3.防止小車在終點(diǎn)浪費(fèi)時(shí)間,普通的代碼中并沒有在小車到達(dá)終點(diǎn)之后進(jìn)行特殊的處理,造成小車在
31、終點(diǎn)的四個(gè)方格中轉(zhuǎn)一圈然后才返回終點(diǎn),這顯然是應(yīng)該改進(jìn)的地方,需要對(duì)終點(diǎn)的判定增加特殊的處理。,軟件中可改進(jìn)的部分 4.限制探索迷宮的深度,在小車找到終點(diǎn)后,可以繼續(xù)探索迷宮,但是比賽的迷宮有256個(gè)方格,要全部探索完是相當(dāng)耗時(shí)間的,所以需要控制遍歷迷宮的深度,可以通過已經(jīng)探測(cè)的方格個(gè)數(shù)來衡量迷宮的探測(cè)程度,給探測(cè)的迷宮方格數(shù)設(shè)置一個(gè)上限,在到達(dá)探索的上限后返回迷宮起點(diǎn),結(jié)束尋路的過程,避免在尋路的過程中耗費(fèi)了太多的時(shí)間,影
32、響到比賽的成績(jī)。,軟件中可改進(jìn)的部分 5.改進(jìn)轉(zhuǎn)彎的模式,提高比賽成績(jī)的比較直接的方式,傳統(tǒng)的左拐彎和右拐彎都是先讓電機(jī)停轉(zhuǎn),然后一個(gè)電機(jī)正轉(zhuǎn),另外一個(gè)電機(jī)反轉(zhuǎn)實(shí)現(xiàn)小車轉(zhuǎn)彎,電機(jī)的停轉(zhuǎn)過程會(huì)浪費(fèi)很多時(shí)間,所以相對(duì)而言,沒有電機(jī)停轉(zhuǎn)過程的前進(jìn)中拐彎方式是比較理想的轉(zhuǎn)彎方式,如果實(shí)現(xiàn)在小車上,可以比較大幅度地提高比賽的成績(jī),但是創(chuàng)新的難度比較大。在改進(jìn)的過程里會(huì)遇到大量的問題,如小車轉(zhuǎn)彎后的坐標(biāo)應(yīng)該怎樣更新,小車轉(zhuǎn)彎后的位置,姿
33、態(tài)能不能穩(wěn)定地保持,傳感器的探測(cè)狀態(tài)應(yīng)該怎樣改進(jìn)才能配合好新的拐彎方式呢,有可能造成坐標(biāo)錯(cuò)亂,探測(cè)丟失,累計(jì)誤差等等問題,要修正眾多的bug是一個(gè)十分困難的過程。,本組參加比賽的經(jīng)驗(yàn),1.先求穩(wěn)定,再追求速度。2.先把機(jī)械部分的傳感器,電機(jī)調(diào)整到比較理想的狀態(tài),再開始試跑,盡量不要硬件上的誤差影響到程序的運(yùn)行。3.調(diào)試的時(shí)候要好好利用裝有數(shù)碼管的調(diào)試板,實(shí)時(shí)顯示小車的狀態(tài),以便發(fā)現(xiàn)軟件上的漏洞。4.多試跑,多思考,多討論,團(tuán)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于IEEE電腦鼠走迷宮競(jìng)賽的迷宮算法分析與實(shí)現(xiàn).pdf
- 基于arm的走迷宮電老鼠 何毅
- 電腦鼠走迷宮基礎(chǔ)教學(xué)大綱
- 基于arm7的老鼠走迷宮的游戲設(shè)計(jì)說明書
- 團(tuán)建游戲------走迷宮
- 走迷宮游戲的java實(shí)現(xiàn)
- 走迷宮的小車畢業(yè)設(shè)計(jì)
- 小車自動(dòng)走迷宮實(shí)驗(yàn)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-走迷宮
- 計(jì)算機(jī)控制小車走迷宮
- 幼兒園大班社會(huì)教案走迷宮
- 2024年[精選]老鼠看電腦看圖寫話
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---走迷宮游戲
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---走迷宮游戲
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---走迷宮游戲
- 幼兒園中班數(shù)學(xué)游戲走迷宮
- IEEE迷宮電腦鼠的設(shè)計(jì)與研究.pdf
- 小老鼠玩電腦看圖寫話(通用13篇)
- 小老鼠玩電腦看圖寫話(通用13篇)
- 健步走比賽競(jìng)賽規(guī)程
評(píng)論
0/150
提交評(píng)論