基于ARM和Linux的路徑記憶循跡小車
根據(jù)具體環(huán)境,可建立一個起點、多個終點的路線記憶庫,并將各個路線記憶分別保存在Linux下的不同文件中,智能小車通過讀取文件中內(nèi)容實現(xiàn)循跡功能。
4 系統(tǒng)軟件設(shè)計
系統(tǒng)軟件設(shè)計分為3個層次:應(yīng)用層、操作系統(tǒng)層和驅(qū)動層。應(yīng)用層包括智能小車控制策略程序、建立記憶庫和按鍵控制小車的工作模式;操作系統(tǒng)層包括Bootloader移植、操作系統(tǒng)ARM—Linux內(nèi)核的移植和根文件系統(tǒng)移植;驅(qū)動層主要包括us-100超聲波模塊、SG90舵機以及電機驅(qū)動模塊等驅(qū)動程序。
4.1 系統(tǒng)移植以及驅(qū)動程序
操作系統(tǒng)的移植包括uboot、內(nèi)核和文件系統(tǒng)的燒寫,內(nèi)核包含GPIO口、DM9000網(wǎng)卡、內(nèi)存等關(guān)鍵的底層驅(qū)動。小車啟動時,通過uboot對S3C6410進行必要的初始化,然后引導(dǎo)Linux的啟動。
智能小車需要的驅(qū)動程序有:電機驅(qū)動模塊驅(qū)動程序、SG90舵機驅(qū)動程序、光電測速模塊驅(qū)動程序以及us-100超聲波模塊驅(qū)動程序。其中,舵機與超聲波編寫到一個驅(qū)動文件中。這些模塊的驅(qū)動程序都是以混雜設(shè)備驅(qū)動的方式編寫,主要的驅(qū)動函數(shù)采用ioctl函數(shù)。而電機驅(qū)動模塊與超聲波避障驅(qū)動程序的結(jié)構(gòu)相似,僅是實現(xiàn)功能不同。電機驅(qū)動模塊驅(qū)動程序框架如下:
光電測速模塊驅(qū)動程序完成兩種功能:①采用中斷的方式來記錄小車的測速,并反饋給應(yīng)用層作為PID控制的反饋;②通過應(yīng)用層傳遞車輪運轉(zhuǎn)的周數(shù),驅(qū)動中利用異步通知的方式在運轉(zhuǎn)完規(guī)定周數(shù)后通知應(yīng)用層,作為小車轉(zhuǎn)向時的控制。
4.2 記憶庫程序設(shè)計
超聲波避障是決定智能小車運行狀態(tài)的關(guān)鍵所在。利用超聲波測得人為障礙物,讓智能小車通過躲避障礙物實現(xiàn)按預(yù)定路線行走,并通過Linux文件系統(tǒng)將小車行走過程中所有的狀態(tài)都記錄在一個文件中形成記憶庫。程序流程圖如圖3所示。
4.3 智能小車控制策略程序設(shè)計
智能小車基本的控制是通過電機驅(qū)動模塊將模塊上對應(yīng)的引腳與ARM11的GPL口和GPK口中的部分引腳相連,通過對GPIO口輸出高低電平來控制小車的直行、90°左轉(zhuǎn)彎、90°右轉(zhuǎn)彎和180°掉頭。
由于小車在轉(zhuǎn)向時,輪胎會出現(xiàn)打滑現(xiàn)象,這樣會影響小車的90°與180°的精確轉(zhuǎn)向。為了讓小車能在無黑線的情況下精確轉(zhuǎn)向,本設(shè)計中采用hmc58831電子羅盤作為小車的“眼睛”。一般的電子羅盤都會存在一定的偏差,通過校正以后可以使精度達到1°左右。
由于本設(shè)計中只是為了讓小車轉(zhuǎn)向,并非準確地測出與地理北極方向的偏向角,所以在校正后可直接使用輸出數(shù)據(jù)。為了讓小車轉(zhuǎn)向時迅速且準確,設(shè)計了分段的轉(zhuǎn)向運行方案,利用光電測速模塊和20格碼盤控制小車的運行。主要的程序流程圖如圖4所示。
為了讓小車能在無黑線的情況下走出相對距離內(nèi)的直線,在電機的控制中采用PID控制算法進行調(diào)速。根據(jù)測速系統(tǒng)反饋回來的當前電機速度和設(shè)定速度進行比較,將偏差作為新的輸入量控制PWM信號的占空比,從而實現(xiàn)各個電機在單位時間內(nèi)走的路程近似相等。PID控制算法原理如圖5所示。
在記憶庫建立完成后,智能小車的運行是從記憶庫中讀取已定路線在各點的狀態(tài)值,最后實現(xiàn)小車按照規(guī)定路線行駛。主要的程序流程如圖6所示,而從終點回到起點只需將記憶庫的內(nèi)容反向讀取,并將左右轉(zhuǎn)向取反。
4.4 工作模式的控制
本設(shè)計中智能小車的運行有兩種工作模式:第一是建立記憶庫;第二是按照記憶庫實現(xiàn)循跡。通過按鍵控制小車的工作模式,當環(huán)境發(fā)生改變時,只需通過按鍵設(shè)置成建立記憶庫模式,即可完成記憶庫的修改。
5 系統(tǒng)測試結(jié)果及結(jié)論
通過對智能小車的測試,小車能將行駛過程中各個狀態(tài)記錄入庫,完成了利用超聲波避障和Linux文件系統(tǒng)的記憶庫的建立,并且通過記憶庫可實現(xiàn)小車按設(shè)定路徑的循跡的功能。
本方案使得小車在不同的環(huán)境中只需人為地重新設(shè)置障礙,通過設(shè)置小車的功能模式讓智能小車按障礙路線運行一次便可建立新的記憶庫,不需要重新布線或更改程序。本設(shè)計進一步地擴展了智能小車的應(yīng)用,增強了小車的環(huán)境適應(yīng)性,并且可以擴展到智能家居和遠程監(jiān)控領(lǐng)域,具有較強的實用性。
評論