Final Project Report - Jian-PingWang/EE2405 GitHub Wiki

迷宮遊戲

實作方法

在 Boebot 上裝蟑螂腳及超音波感測器,控制車子走出迷宮。

因為走出迷宮最簡單的方式便是沿著迷宮的其中一面牆壁一直走,所以,如同展示影片所示,我讓車子會緊抓著右邊的牆壁前進。

首先,車子會一直前進,直到超音波發現前面有牆壁,此時,車子會左轉並將超音波感測器對準右邊的牆壁。

若超音波有抓到右邊的牆壁時,車子會不斷前進,直到蟑螂腳被撞到,代表這時要左轉。因為超音波抓到車子的右手邊有牆壁, 蟑螂腳抓到車子的前方有牆壁,故只剩左邊可走。按找此邏輯,就算是一條死路,車子也會連續左轉兩次而離開死路。

同理,若超音波發現右手邊的牆壁消失,代表此時要右轉,並且因為車子車身的關係,再右轉前要先讓車子直走一小段路,以免轉彎時撞到牆壁。

如此一來,車子就能由起點走至終點,再配合 midterm project 時在網頁上的迷宮,兩者即可競賽。

問題及解決方法

1.無法判斷終點:原本打算讓車子搭載 webcam 以判斷是否抵達終點,但因為車子似乎無法裝上 webcam,故走到終點時必須手動關掉電源。

2.電池供壓不足:原先寫的 code 應該要可以讓車子垂直轉彎,但因為電池電壓總是不夠,因此我改用延長線配合變壓器直接供電,以免車子轉彎失敗。

3.迷宮太小:因為教室空間有限,而車子轉彎時又要有能夠容納其車身的旋轉空間,故迷宮設置時必須非常小心,否則車子轉彎時若碰到牆壁可能會使轉彎角度歪掉,而無法走直線。

討論及檢討

1.沒有算出最快的走迷宮路徑,由於我當時沒有考慮清楚,所以沒有用更好的演算法來找出迷宮的解法,因此只用最簡單的暴力法。

2.其實若是只用超音波應該也可以完成這個功能,但若缺乏蟑螂腳的補助,就必須走一步偵測一步,很浪費時間。

3.與 midterm project 的聯結太低。應該要在多做些功能來呼應 midterm project,比方說,在 code 計算車子走出迷宮所花的時間,再用XBee 將車子花的時間傳回板子,同時網頁上的迷宮也可以計時,最後用版子判斷誰走的快。但是,這又牽涉到迷宮終點判斷的問題,因此我沒有做這個功能。

程式碼

final_project.c

展示影片

https://youtu.be/FgPXdpsECVU