用51單片機做的小車如何實現小車走迷宮
1. 先從壹種比較簡單的迷宮說起,我稱之為"二叉樹"迷宮,即每個節點上最多連接三條支路,換句話 說,就是當妳面對岔路時,妳最多只有三個選擇,要麽左轉,要麽右轉,要麽回頭.
假如,我們將左轉編碼為0,右轉編碼為1,則迷宮的從入口到出口的路徑為壹串二進制編碼.對於最短路徑,我們可以讓機器人多走幾次迷宮,得到壹系列二進制串,位數最少的即為"局部最短路徑".我們還可以通過這些二進制串,得到迷宮"局部拓撲結構",壹種二叉樹結構.
註意,在上面的結果上我都加有"局部"兩字,這是因為機器人走迷宮的次數如果不夠多,或則說少於迷宮的總路徑數,我們得到結果都是不完整的,只有當機器人走迷宮的次數足夠大,以致於走遍了迷宮所有的路徑,這時我們才能得到完整的結果,然而這對於大多數迷宮來說都是不可實現的,也就是說,我們得到的結果都是局部的,最多是趨近於全局結果.
不知大家發現沒有,上面還有壹種情況我沒有編碼,那就是回退.這個問題處理起來比較復雜,因此不能僅僅用壹位二進制碼來表示,必須有專門的處理機制.
這個機制分為三個方面,
壹是,每次只回退壹步,即當前方無路可走時,回到上壹個叉路口,選擇另壹條支路,程序上就是將當前二進制串減少壹位,並將改變後的二進制串的最後壹位取反,代表選另壹條支路.
二是, 回退壹步後,仍無路可走時,再回退壹部,重復上述過程,直至有岔路可選.
三是,整個回退過程中,記錄並保存每次回退的路徑,即左右轉向的二進制編碼,壹個回退過即既是由開始回退到開始前進的整段過程.保留這些二進制串,是因為可以通過他們反推得出迷宮的壹些局部的拓撲結構
2. 熟悉上面"二叉樹迷宮"後 ,對於壹般迷宮通過如下方法設計
壹、估計出迷宮最大的支路數,即壹個叉路口最多有幾條岔路,這裏假設為a
二 、用a為二進制碼對每壹個岔路編碼,例如我們可以按順時針編碼
三、 將a為二進制編碼代替“二叉樹迷宮 ”的壹位二進制,其它步驟相仿即可。
當然,我們也可以用變長二進制碼表示壹次路徑選擇,不過這時得記錄保存每次選則對應的二進制碼的長度。
補充:
上面的算法,我說的都很籠統,但總體思路是明確的,即:以迷宮入口為根節點,每個叉路口為壹個節點,每個岔路為壹段樹枝,每個樹枝用壹定位數的二進制碼編碼,以樹形結構表示迷宮的拓撲結構,於是迷宮的通路可以表示為從樹的根節點到某壹葉節點的路徑。
硬件電路上,主要有兩個方面的設計:壹是,前進河和回退兩個狀態的識別與轉換;二是,岔路的識別與選擇。
以上都是個人觀點,思考並不周全,還望大家指正補充。