吳文豪,張建國,高磊,魏諾,龐慶
(西安建筑科技大學(xué) 理學(xué)院,西安 710055)
?
基于ARM和Linux的路徑記憶循跡小車*
吳文豪,張建國,高磊,魏諾,龐慶
(西安建筑科技大學(xué) 理學(xué)院,西安 710055)
針對智能小車在實(shí)際應(yīng)用中的需要,設(shè)計(jì)了一種基于ARM和Linux的具有路徑記憶循跡功能的智能小車。利用ARM和Linux操作系統(tǒng),實(shí)現(xiàn)了對智能小車的超聲波避障模塊、電機(jī)等的控制。利用電子羅盤,實(shí)現(xiàn)了小車在無黑線情況下精確轉(zhuǎn)向;利用超聲波測距避障以及Linux文件系統(tǒng)建立和保存了智能小車運(yùn)行的路徑記憶庫;通過讀取記憶庫的數(shù)據(jù)實(shí)現(xiàn)智能小車的循跡功能。結(jié)果表明,該設(shè)計(jì)方案可以很好地實(shí)現(xiàn)循跡功能并且對環(huán)境的適應(yīng)性較強(qiáng)。
ARM;Linux; 智能小車;記憶庫
智能車是近年來發(fā)展起來的一門新興的綜合技術(shù),在軍事領(lǐng)域得到了廣泛應(yīng)用,而且在生產(chǎn)和生活中的應(yīng)用也日趨普遍[1-2]。
目前智能小車的自主移動方式有兩種:循跡和避障。一般的循跡功能可以通過算法使其能精確地在黑線上行駛,但是由于一些室內(nèi)環(huán)境的因素,要實(shí)施黑線的布置并不符合實(shí)際要求[3-4]。一般的避障功能僅僅是通過探測前方障礙物而進(jìn)行躲避,通過算法可以完成從出發(fā)點(diǎn)到定點(diǎn)的行駛[5-7],但是算法運(yùn)算量大且放在不同的環(huán)境,就需要更改程序,這對實(shí)際應(yīng)用帶來很大的不便。
基于這種背景,設(shè)計(jì)了一種利用超聲波測距避障功能以及Linux文件系統(tǒng)的路徑記憶循跡智能小車,通過人為地設(shè)置障礙物來規(guī)劃小車的行走路線,并將路線記錄入庫。小車只需讀取庫中的數(shù)據(jù)即可按照規(guī)劃的路線行駛以實(shí)現(xiàn)循跡功能,可擺脫尋查黑線的循跡方式。當(dāng)環(huán)境發(fā)生變化時,利用按鍵設(shè)置小車的工作模式,可以直接重新建立記憶庫,無需更改程序,具有一定的實(shí)際意義。
圖1 系統(tǒng)總體結(jié)構(gòu)框圖
圖1為本系統(tǒng)總體結(jié)構(gòu)框圖,主要由超聲波測距模塊與云臺、S3C6410控制器、電機(jī)驅(qū)動模塊、光電測速模塊以及電源等部分組成。其中,電源用于完成對整個系統(tǒng)的供電,超聲波測距模塊與云臺完成對小車運(yùn)行狀態(tài)的預(yù)判,電機(jī)驅(qū)動模塊根據(jù)預(yù)判的結(jié)果執(zhí)行相應(yīng)的操作,光電測速模塊用于PID控制的反饋以及在轉(zhuǎn)向時控制車輪運(yùn)行的周數(shù),S3C6410控制器在移植Linux操作系統(tǒng)的基礎(chǔ)上完成對各模塊的控制并建立小車運(yùn)行狀態(tài)的記憶庫。
2.1 控制器
S3C6410控制器[8]是由三星公司推出的一款低功耗、高性價(jià)比的RISC處理器,它基于ARM11內(nèi)核(ARM1176JZF-S),可廣泛應(yīng)用于移動電話和通用處理等領(lǐng)域??刂破饔珊诵碾娐钒搴椭靼鍍刹糠纸M成,核心板上設(shè)計(jì)有S3C6410、SDRAM存儲電路、NAND Flash、1.25 V電源電路和處理器復(fù)位電路等,主板上設(shè)計(jì)有串口、網(wǎng)口、按鍵等。
2.2 電源與電機(jī)驅(qū)動模塊
電源采用現(xiàn)有的鋰充電電池供電,鋰電池的電壓約為7.2 V。電機(jī)驅(qū)動采用的是L298N驅(qū)動模塊,該模塊采用 ST 公司的 L298N 芯片,采用高質(zhì)量鋁電解電容,可使電路穩(wěn)定工作;可以直接驅(qū)動兩路 3~16 V直流電機(jī),并提供了5 V輸出接口,可以給5 V單片機(jī)電路系統(tǒng)供電,支持3.3 V ARM 控制,可以方便地控制直流電機(jī)速度和方向。
2.3 超聲波測距模塊與云臺
采用US-100 超聲波測距模塊,該模塊可實(shí)現(xiàn)0~4.5 m的非接觸測距功能,擁有2.4~5.5 V的寬電壓輸入范圍,靜態(tài)功耗低于2 mA,自帶溫度傳感器對測距結(jié)果進(jìn)行校正,同時具有GPIO、串口等多種通信方式,內(nèi)置看門狗,工作穩(wěn)定可靠。
云臺采用SG90舵機(jī),工作電壓為4.8~6 V,無負(fù)載的情況下轉(zhuǎn)速為0.12 s/60℃??刂菩盘栍山邮諜C(jī)的通道進(jìn)入信號調(diào)制芯片,獲得直流偏置電壓。它內(nèi)部有一個基準(zhǔn)電路,產(chǎn)生周期為20 ms、寬度為1.5 ms的基準(zhǔn)信號。將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后,電壓差的正負(fù)輸出到電機(jī)驅(qū)動芯片,決定電機(jī)的正反轉(zhuǎn)。
2.4 光電測速模塊
本設(shè)計(jì)中的測速模塊采用槽型對射光電,只要在非透明物體中通過槽型即可觸發(fā)(配合小車測速碼盤20格使用)輸出5 V TTL電平,采用了施密特觸發(fā)器去抖動脈沖,非常穩(wěn)定,用于小車測轉(zhuǎn)速、測距離等。
2.5 電子羅盤
電子羅盤采用霍尼韋爾HMC5883L芯片,該芯片帶有數(shù)字接口的弱磁傳感器,應(yīng)用于低成本羅盤和磁場檢測領(lǐng)域,并附帶霍尼韋爾專利的集成電路,包括放大器、自動消磁驅(qū)動器、偏差校準(zhǔn)、能使羅盤精度控制在1°的I2C系列總線接口。
3.1 智能小車避障方案選擇
根據(jù)設(shè)計(jì)要求,小車在行駛過程中需要準(zhǔn)確地檢測前方的人為障礙物,并通過障礙物的位置來確定小車下一步的運(yùn)行狀態(tài),因此對測量距離有一定要求。障礙物檢測可以有多種方法:紅外光檢測、超聲波檢測和機(jī)械接觸。這些方法各有優(yōu)缺點(diǎn),常用的有紅外檢測和超聲波檢測,兩種方案的區(qū)別見表1。對比兩種方案的指標(biāo)后,本文避障方案選擇超聲波檢測,并且為了滿足系統(tǒng)要求添加了SG90舵機(jī)作為輔助,使用超聲波可以檢測多個方向。
3.2 智能小車的路徑狀態(tài)設(shè)計(jì)
為了簡化記憶庫的設(shè)計(jì)以及結(jié)合實(shí)際應(yīng)用中的情況,智能小車的運(yùn)行狀態(tài)設(shè)定成4種情況:直行、90°左轉(zhuǎn)彎、90°右轉(zhuǎn)彎和180°掉頭。其中,直行狀態(tài)在記憶庫中的表示是時間,通過Linux中的時間函數(shù)測量直行狀態(tài)的持續(xù)時間,單位為s。
為了使智能小車能按照上面的4種情況運(yùn)行,智能小車在行進(jìn)中遇到的路徑情況是人為設(shè)定的,如圖2所示。
圖2 人為設(shè)定的小車行駛情況
3.3 記憶庫的建立
智能小車的運(yùn)行狀態(tài)是人為設(shè)定的4種情況,記憶庫中的數(shù)據(jù)就是由這4個狀態(tài)標(biāo)志組成。人為設(shè)置好從起點(diǎn)到終點(diǎn)的障礙物后,即可讓小車在起點(diǎn)開始運(yùn)行,并在每次改變運(yùn)行狀態(tài)前將運(yùn)行狀態(tài)記錄入庫。在到達(dá)終點(diǎn)后以180°掉頭作為結(jié)束標(biāo)志,然后利用Linux文件系統(tǒng)將記憶庫里的數(shù)據(jù)保存到Linux下的一個文件當(dāng)中,到此完成記憶庫的建立。
根據(jù)具體環(huán)境,可建立一個起點(diǎn)、多個終點(diǎn)的路線記憶庫,并將各個路線記憶分別保存在Linux下的不同文件中,智能小車通過讀取文件中內(nèi)容實(shí)現(xiàn)循跡功能。
系統(tǒng)軟件設(shè)計(jì)分為3個層次:應(yīng)用層、操作系統(tǒng)層和驅(qū)動層。應(yīng)用層包括智能小車控制策略程序、建立記憶庫和按鍵控制小車的工作模式;操作系統(tǒng)層包括Bootloader移植、操作系統(tǒng)ARM-Linux內(nèi)核的移植和根文件系統(tǒng)移植;驅(qū)動層主要包括us-100超聲波模塊、SG90舵機(jī)以及電機(jī)驅(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進(jìn)行必要的初始化,然后引導(dǎo)Linux的啟動。
智能小車需要的驅(qū)動程序有:電機(jī)驅(qū)動模塊驅(qū)動程序、SG90舵機(jī)驅(qū)動程序、光電測速模塊驅(qū)動程序以及us-100超聲波模塊驅(qū)動程序。其中,舵機(jī)與超聲波編寫到一個驅(qū)動文件中。這些模塊的驅(qū)動程序都是以混雜設(shè)備驅(qū)動[9]的方式編寫,主要的驅(qū)動函數(shù)采用ioctl函數(shù)。而電機(jī)驅(qū)動模塊與超聲波避障驅(qū)動程序的結(jié)構(gòu)相似,僅是實(shí)現(xiàn)功能不同。電機(jī)驅(qū)動模塊驅(qū)動程序框架如下:
#defineDEVICE_NAME"ok6410_dianji"
//驅(qū)動層ioctl函數(shù)
static int s3c6410_dianji_ioctl(struct inode
*inode, struct file *file, char buff)
s3c6410_dianji_fops={
.owner=THIS_MODULE,
.ioctl=s3c6410_dianji_ioctl,
};
static struct miscdevice misc={
.minor=MISC_DYNAMIC_MINOR,
.name=DEVICE_NAME,
.fops=&s3c6410_dianji_fops,
};
static int__init s3c6410_dianji_init()
static void__exit s3c6410_dianji_exit()
module_init(s3c6410_dianji_init);
module_exit(s3c6410_dianji_exit);
光電測速模塊驅(qū)動程序完成兩種功能:①采用中斷的方式來記錄小車的測速,并反饋給應(yīng)用層作為PID控制的反饋;②通過應(yīng)用層傳遞車輪運(yùn)轉(zhuǎn)的周數(shù),驅(qū)動中利用異步通知的方式在運(yùn)轉(zhuǎn)完規(guī)定周數(shù)后通知應(yīng)用層,作為小車轉(zhuǎn)向時的控制。
4.2 記憶庫程序設(shè)計(jì)
超聲波避障是決定智能小車運(yùn)行狀態(tài)的關(guān)鍵所在。利用超聲波測得人為障礙物,讓智能小車通過躲避障礙物實(shí)現(xiàn)按預(yù)定路線行走,并通過Linux文件系統(tǒng)將小車行走過程中所有的狀態(tài)都記錄在一個文件中形成記憶庫。程序流程圖如圖3所示。
圖3 建立記憶庫主程序流程圖
4.3 智能小車控制策略程序設(shè)計(jì)
智能小車基本的控制是通過電機(jī)驅(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è)計(jì)中采用hmc5883l電子羅盤作為小車的“眼睛”。一般的電子羅盤都會存在一定的偏差[10-11],通過校正以后可以使精度達(dá)到1°左右。
由于本設(shè)計(jì)中只是為了讓小車轉(zhuǎn)向,并非準(zhǔn)確地測出與地理北極方向的偏向角,所以在校正后可直接使用輸出數(shù)據(jù)。為了讓小車轉(zhuǎn)向時迅速且準(zhǔn)確,設(shè)計(jì)了分段的轉(zhuǎn)向運(yùn)行方案,利用光電測速模塊和20格碼盤控制小車的運(yùn)行。主要的程序流程圖如圖4所示。
圖4 電子羅盤轉(zhuǎn)向控制流程圖
為了讓小車能在無黑線的情況下走出相對距離內(nèi)的直線,在電機(jī)的控制中采用PID控制算法進(jìn)行調(diào)速。根據(jù)測速系統(tǒng)反饋回來的當(dāng)前電機(jī)速度和設(shè)定速度進(jìn)行比較,將偏差作為新的輸入量控制PWM信號的占空比,從而實(shí)現(xiàn)各個電機(jī)在單位時間內(nèi)走的路程近似相等。PID控制算法原理如圖5所示。
圖5 PID控制算法原理圖
在記憶庫建立完成后,智能小車的運(yùn)行是從記憶庫中讀取已定路線在各點(diǎn)的狀態(tài)值,最后實(shí)現(xiàn)小車按照規(guī)定路線行駛。主要的程序流程如圖6所示,而從終點(diǎn)回到起點(diǎn)只需將記憶庫的內(nèi)容反向讀取,并將左右轉(zhuǎn)向取反。
圖6 記憶庫循跡主程序
4.4 工作模式的控制
本設(shè)計(jì)中智能小車的運(yùn)行有兩種工作模式:第一是建立記憶庫;第二是按照記憶庫實(shí)現(xiàn)循跡。通過按鍵控制小車的工作模式,當(dāng)環(huán)境發(fā)生改變時,只需通過按鍵設(shè)置成建立記憶庫模式,即可完成記憶庫的修改。
通過對智能小車的測試,小車能將行駛過程中各個狀態(tài)記錄入庫,完成了利用超聲波避障和Linux文件系統(tǒng)的記憶庫的建立,并且通過記憶庫可實(shí)現(xiàn)小車按設(shè)定路徑的循跡的功能。
[1] 劉崇翔,于力革,高美鳳.基于ARM的智能小車驅(qū)動程序的開發(fā)[J].計(jì)算機(jī)與現(xiàn)代化,2012(8):173-175.
[2] 李波,楊衛(wèi),張文棟.一種智能小車自主尋/循跡系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)測量與控制, 2012,20(10):2798-2801.
[3] 董宗祥.基于ARM的自尋跡機(jī)器人小車的研發(fā)[D].上海:東華大學(xué),2010.
[4] 余紅英.基于ARM的智能尋跡小車的設(shè)計(jì)與實(shí)現(xiàn)[D].太原:中北大學(xué),2012.
[5] 閆晶,周浚哲,劉喜梅.基于DSP的智能小車避障系統(tǒng)設(shè)計(jì)[J].沈陽理工大學(xué)學(xué)報(bào),2008,27(1):37-41.
[6] 李磊,曹生煒.智能小車避障技術(shù)的實(shí)現(xiàn)[J].微電機(jī),2011,44(6):109-111.
[7] 盧威.智能小車避障系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].南昌:南昌大學(xué),2012.
[8] Samsung.USER’S MANUAL S3C6410X RISC Microprocessor,2009.
[9] 楊水清,張劍.精通ARM嵌入式Linux系統(tǒng)開發(fā)[M].北京:電子工業(yè)出版社,2012.
[10] 孟健.三軸磁強(qiáng)計(jì)誤差分析與校正[D]. 哈爾濱:哈爾濱工業(yè)大學(xué),2011.
[11] 晁敏,蔣東方,文彩虹.磁羅盤誤差分析與校準(zhǔn)[J].傳感器技術(shù)學(xué)報(bào),2010,23(4):525-531.
吳文豪(在校研究生)、張建國(副教授),主要研究方向?yàn)楣怆姍z測與嵌入式技術(shù)。
Car Path Tracking Memory Based on ARM and Linux
Wu Wenhao,Zhang Jianguo,Gao Lei,Wei Nuo,Pang Qing
(Faculty of Science,Xi’an University of Architecture and Technology,Xi’an 710055,China)
Aiming at the practical application,a smart car based on ARM and Linux is designed,which has the function of path tracking memory.The design uses the ARM and Linux operating system to achieve the control of ultrasonic obstacle avoidance module and motor module.The car realizes accurate steering without black line using the electronic compass.A running state memory bank of the car is established using the ultrasonic obstacle avoidance and Linux file system.Then it achieves intelligent car tracking function by reading data from memory bank.The experimental results show that the scheme can realize tracking function and has strong adaptability to the environment.
ARM;Linux;smart car;memory bank
國家自然科學(xué)基金項(xiàng)目:11347119;陜西省大學(xué)生創(chuàng)新項(xiàng)目:0885。
TP312
A
迪娜
2015-01-19)