基于嵌入式Linux的移動(dòng)機器人控制系統
摘要:以嵌入式Linux開(kāi)發(fā)平臺為基礎,根據模糊控制算法進(jìn)行機器人路徑規劃,同時(shí)將兩自由度云臺和超聲波測距模塊相結合,擴大了障礙物檢測范圍。根據測試,移動(dòng)機器人可以根據操作人員的語(yǔ)音指令,實(shí)現前進(jìn)、后退、測量距離等動(dòng)作,并通過(guò)MP3播放功能播放出所測量到的距離值和機器人當前的運行狀態(tài)。在運行過(guò)程中,機器人可以自動(dòng)檢測方位并修正,實(shí)現無(wú)碰撞行駛。
本文引用地址:http://dyxdggzs.com/article/201609/304733.htm引言
隨著(zhù)科學(xué)技術(shù)的發(fā)展和社會(huì )的需要,移動(dòng)機器人技術(shù)得到了迅速發(fā)展,正在滲透到各行各業(yè)中,使人們的生活更加便利?,F今以單片機為核心的移動(dòng)機器人存在處理數據量有限、控制系統速度低、人機交互機制單一等缺點(diǎn),不能滿(mǎn)足機器人多任務(wù)的要求。系統中增加協(xié)處理器的系統結構也得到了廣泛應用,雖然可以管理多種傳感器,但這種結構卻增加了硬件的冗余度和復雜度,見(jiàn)參考文獻。為此,提出了以嵌入式處理器S3C2440為核心的多任務(wù)機器人控制系統。
1 控制系統硬件設計
控制系統選用兩輪獨立驅動(dòng)小車(chē)為移動(dòng)式機器人平臺,后輪為一個(gè)尼龍萬(wàn)向輪。處理器為三星公司的S3C2440,系統主頻最高可達533 MHz,外接512 MB的NAND Flash和64 MB的SDRAM,支持SPI、I2C、UART等接口,滿(mǎn)足移動(dòng)機器人控制系統的需求,如圖1所示。

整個(gè)控制系統工作過(guò)程如下:語(yǔ)音識別芯片LD3320通過(guò)SPI總線(xiàn)接口接入ARM處理器,處理器可以對識別的結果進(jìn)行分析和匯總,并通過(guò)查表提取出操作人員的命令碼;同時(shí),處理器通過(guò)串口讀取機器人當前的航向信息;超聲波測距和紅外線(xiàn)地面檢測模塊由處理器的GPIO引腳控制;通過(guò)控制兩自由度的云臺,可以進(jìn)行多方位的超聲波障礙物檢測,利用LD3320模塊的MP3播放功能播放所檢測到的障礙物距離和路況信息??刂葡到y根據傳感器的數據和所識別的操作人員的命令碼,利用信息融合技術(shù)提取環(huán)境特征,通過(guò)路徑規劃技術(shù)作出決策,控制電機狀態(tài),最終控制機器人的姿態(tài)。
2 控制系統軟件設計
在軟件設計中,將系統中所有要處理的任務(wù)劃分為不同的、相互獨立的任務(wù)模塊。根據系統的性能指標和技術(shù)要求,可將任務(wù)劃分為:語(yǔ)音識別、航向測量與計算、超聲波測距、電機控制、信息處理等任務(wù)。
2.1 進(jìn)程的創(chuàng )建與狀態(tài)轉換
移動(dòng)機器人控制系統在初始化完成后,利用系統調用fock機制分別為語(yǔ)音識別、航向測量與計算和超聲波測距等任務(wù)產(chǎn)生相應的子進(jìn)程,實(shí)現方式如圖2所示。進(jìn)程創(chuàng )建成功后,操作系統會(huì )根據調度算法進(jìn)行進(jìn)程調度,這使系統在行駛過(guò)程中,能夠及時(shí)響應語(yǔ)音命令。

2.2 進(jìn)程間通信機制
在信息處理進(jìn)程中,需要對不同任務(wù)返回的有效數據進(jìn)行信息處理和融合。由于不同進(jìn)程的數據段、堆棧段是相互隔離的,因此,采用共享內存的進(jìn)程間通信方式,在程序中可以使用shmget從系統中取出一塊未使用的物理內存并映射到用戶(hù)空間,如圖3所示。

在兩個(gè)進(jìn)程之間建立共享內存的具體實(shí)現步驟如下:
①在調用fock()前,使用shmget創(chuàng )建新的共享內存,返回值為共享內存標識碼:
shmid=shmget(IPC PRIVATE,1,PERM) //申請一個(gè)字節共享內存
②調用fock()函數,創(chuàng )建子進(jìn)程,根據fock()的返回值區分父進(jìn)程和子進(jìn)程,并分別在兩個(gè)進(jìn)程中使用shmat映射一塊共享內存,即允許當前進(jìn)程訪(fǎng)問(wèn)創(chuàng )建的共享內存:
if(fock()) p_addr=shmat(shmid,0,0);//將共享內存映射到父進(jìn)程
else{c_addr=shmat(shmid,0,0);}//將共享內存映射到子進(jìn)程
其中,shmid為shmget()函數的返回值,即共享內存標識碼。
從用戶(hù)的角度看,在父進(jìn)程中可以對p_addr進(jìn)行讀寫(xiě)操作,實(shí)際訪(fǎng)問(wèn)的是申請的共享內存。子進(jìn)程則可以對c_addr進(jìn)行讀寫(xiě),從而實(shí)現兩個(gè)進(jìn)程間的通信。共享內存的映射和進(jìn)程之間的關(guān)系,如圖4所示。

2.3 系統控制流程
在程序初始化完成后,為每項任務(wù)創(chuàng )建了相應的進(jìn)程,并建立了共享內存,如圖5所示。在每個(gè)進(jìn)程中采用循環(huán)執行方式,語(yǔ)音識別進(jìn)程中利用select函數監控是否有識別結果輸出,并將識別結果寫(xiě)入到相應的共享內存區。

航向測量和計算進(jìn)程循環(huán)讀取陀螺儀的角度信息并存儲。超聲波測距進(jìn)程在接收到信息處理進(jìn)程的控制命令后進(jìn)行測距并將數據返回至信息處理進(jìn)程。信息處理進(jìn)程融合了多傳感器的數據,根據設定的路徑規劃方案,將控制信息傳輸到電機控制進(jìn)程,實(shí)現機器人姿態(tài)的調整。
2.4 語(yǔ)音識別
在系統運行過(guò)程中,語(yǔ)音識別進(jìn)程獨立完成對語(yǔ)音模塊的初始化和讀取識別結果的任務(wù),因此,能夠及時(shí)響應操作人員發(fā)出的語(yǔ)音指令。程序中使用了select()函數監控read()是否可讀。當語(yǔ)音識別模塊LD3320有識別結果時(shí),將在中斷引腳輸出高電平以觸發(fā)系統中斷,結束驅動(dòng)程序中的等待狀態(tài),同時(shí)應用程序可以通過(guò)read()函數讀取LD3320的識別結果,并寫(xiě)入到相應共享內存區M中。在沒(méi)有中斷時(shí),read()函數將被阻塞,如圖6所示。

評論