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