<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于A(yíng)RM和Linux的路徑記憶循跡小車(chē)

基于A(yíng)RM和Linux的路徑記憶循跡小車(chē)

作者: 時(shí)間:2016-09-12 來(lái)源:網(wǎng)絡(luò ) 收藏

根據具體環(huán)境,可建立一個(gè)起點(diǎn)、多個(gè)終點(diǎn)的路線(xiàn),并將各個(gè)路線(xiàn)記憶分別保存在下的不同文件中,通過(guò)讀取文件中內容實(shí)現循跡功能。

4 系統軟件設計

系統軟件設計分為3個(gè)層次:應用層、操作系統層和驅動(dòng)層。應用層包括控制策略程序、建立和按鍵控制小車(chē)的工作模式;操作系統層包括Bootloader移植、操作系統內核的移植和根文件系統移植;驅動(dòng)層主要包括us-100超聲波模塊、SG90舵機以及電機驅動(dòng)模塊等驅動(dòng)程序。

4.1 系統移植以及驅動(dòng)程序

操作系統的移植包括uboot、內核和文件系統的燒寫(xiě),內核包含GPIO口、DM9000網(wǎng)卡、內存等關(guān)鍵的底層驅動(dòng)。小車(chē)啟動(dòng)時(shí),通過(guò)uboot對S3C6410進(jìn)行必要的初始化,然后引導的啟動(dòng)。

需要的驅動(dòng)程序有:電機驅動(dòng)模塊驅動(dòng)程序、SG90舵機驅動(dòng)程序、光電測速模塊驅動(dòng)程序以及us-100超聲波模塊驅動(dòng)程序。其中,舵機與超聲波編寫(xiě)到一個(gè)驅動(dòng)文件中。這些模塊的驅動(dòng)程序都是以混雜設備驅動(dòng)的方式編寫(xiě),主要的驅動(dòng)函數采用ioctl函數。而電機驅動(dòng)模塊與超聲波避障驅動(dòng)程序的結構相似,僅是實(shí)現功能不同。電機驅動(dòng)模塊驅動(dòng)程序框架如下:

d.jpg

e.jpg

光電測速模塊驅動(dòng)程序完成兩種功能:①采用中斷的方式來(lái)記錄小車(chē)的測速,并反饋給應用層作為PID控制的反饋;②通過(guò)應用層傳遞車(chē)輪運轉的周數,驅動(dòng)中利用異步通知的方式在運轉完規定周數后通知應用層,作為小車(chē)轉向時(shí)的控制。

4.2 程序設計

超聲波避障是決定智能小車(chē)運行狀態(tài)的關(guān)鍵所在。利用超聲波測得人為障礙物,讓智能小車(chē)通過(guò)躲避障礙物實(shí)現按預定路線(xiàn)行走,并通過(guò)Linux文件系統將小車(chē)行走過(guò)程中所有的狀態(tài)都記錄在一個(gè)文件中形成記憶庫。程序流程圖如圖3所示。

f.jpg

4.3 智能小車(chē)控制策略程序設計

智能小車(chē)基本的控制是通過(guò)電機驅動(dòng)模塊將模塊上對應的引腳與11的GPL口和GPK口中的部分引腳相連,通過(guò)對GPIO口輸出高低電平來(lái)控制小車(chē)的直行、90°左轉彎、90°右轉彎和180°掉頭。

由于小車(chē)在轉向時(shí),輪胎會(huì )出現打滑現象,這樣會(huì )影響小車(chē)的90°與180°的精確轉向。為了讓小車(chē)能在無(wú)黑線(xiàn)的情況下精確轉向,本設計中采用hmc58831電子羅盤(pán)作為小車(chē)的“眼睛”。一般的電子羅盤(pán)都會(huì )存在一定的偏差,通過(guò)校正以后可以使精度達到1°左右。

由于本設計中只是為了讓小車(chē)轉向,并非準確地測出與地理北極方向的偏向角,所以在校正后可直接使用輸出數據。為了讓小車(chē)轉向時(shí)迅速且準確,設計了分段的轉向運行方案,利用光電測速模塊和20格碼盤(pán)控制小車(chē)的運行。主要的程序流程圖如圖4所示。

g.jpg

為了讓小車(chē)能在無(wú)黑線(xiàn)的情況下走出相對距離內的直線(xiàn),在電機的控制中采用PID控制算法進(jìn)行調速。根據測速系統反饋回來(lái)的當前電機速度和設定速度進(jìn)行比較,將偏差作為新的輸入量控制PWM信號的占空比,從而實(shí)現各個(gè)電機在單位時(shí)間內走的路程近似相等。PID控制算法原理如圖5所示。

h.jpg

在記憶庫建立完成后,智能小車(chē)的運行是從記憶庫中讀取已定路線(xiàn)在各點(diǎn)的狀態(tài)值,最后實(shí)現小車(chē)按照規定路線(xiàn)行駛。主要的程序流程如圖6所示,而從終點(diǎn)回到起點(diǎn)只需將記憶庫的內容反向讀取,并將左右轉向取反。

i.jpg

4.4 工作模式的控制

本設計中智能小車(chē)的運行有兩種工作模式:第一是建立記憶庫;第二是按照記憶庫實(shí)現循跡。通過(guò)按鍵控制小車(chē)的工作模式,當環(huán)境發(fā)生改變時(shí),只需通過(guò)按鍵設置成建立記憶庫模式,即可完成記憶庫的修改。

5 系統測試結果及結論

通過(guò)對智能小車(chē)的測試,小車(chē)能將行駛過(guò)程中各個(gè)狀態(tài)記錄入庫,完成了利用超聲波避障和Linux文件系統的記憶庫的建立,并且通過(guò)記憶庫可實(shí)現小車(chē)按設定路徑的循跡的功能。

本方案使得小車(chē)在不同的環(huán)境中只需人為地重新設置障礙,通過(guò)設置小車(chē)的功能模式讓智能小車(chē)按障礙路線(xiàn)運行一次便可建立新的記憶庫,不需要重新布線(xiàn)或更改程序。本設計進(jìn)一步地擴展了智能小車(chē)的應用,增強了小車(chē)的環(huán)境適應性,并且可以擴展到智能家居和遠程監控領(lǐng)域,具有較強的實(shí)用性。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: ARM Linux 智能小車(chē) 記憶庫

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>