• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 關 閉

    新聞中心

    EEPW首頁 > 工控自動化 > 設計應用 > 一種基于嵌入式Linux的移動機器人控制系統

    一種基于嵌入式Linux的移動機器人控制系統

    作者: 時間:2014-09-03 來源:網絡 收藏

      摘要:以開發平臺為基礎,根據模糊控制算法進行機器人路徑規劃,同時將兩自由度云臺和超聲波測距模塊相結合,擴大了障礙物檢測范圍。根據測試,移動機器人可以根據操作人員的語音指令,實現前進、后退、測量距離等動作,并通過MP3播放功能播放出所測量到的距離值和機器人當前的運行狀態。在運行過程中,機器人可以自動檢測方位并修正,實現無碰撞行駛。

    本文引用地址:http://www.czjhyjcfj.com/article/262537.htm

    linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

      引言

      隨著科學技術的發展和社會的需要,移動機器人技術得到了迅速發展,正在滲透到各行各業中,使人們的生活更加便利。現今以單片機為核心的移動機器人存在處理數據量有限、控制系統速度低、人機交互機制單一等缺點,不能滿足機器人多任務的要求。系統中增加協處理器的系統結構也得到了廣泛應用,雖然可以管理多種傳感器,但這種結構卻增加了硬件的冗余度和復雜度,見參考文獻。為此,提出了以嵌入式處理器為核心的多任務機器人控制系統。

      1 控制系統硬件設計

      控制系統選用兩輪獨立驅動小車為移動式機器人平臺,后輪為一個尼龍萬向輪。處理器為三星公司的,系統主頻最高可達533 MHz,外接512 MB的NAND Flash和64 MB的,支持SPI、I2C、UART等接口,滿足移動機器人控制系統的需求,如圖1所示。



      整個控制系統工作過程如下:語音識別芯片LD3320通過SPI總線接口接入ARM處理器,處理器可以對識別的結果進行分析和匯總,并通過查表提取出操作人員的命令碼;同時,處理器通過串口讀取機器人當前的航向信息;超聲波測距和紅外線地面檢測模塊由處理器的GPIO引腳控制;通過控制兩自由度的云臺,可以進行多方位的超聲波障礙物檢測,利用LD3320模塊的MP3播放功能播放所檢測到的障礙物距離和路況信息??刂葡到y根據傳感器的數據和所識別的操作人員的命令碼,利用信息融合技術提取環境特征,通過路徑規劃技術作出決策,控制電機狀態,最終控制機器人的姿態。

      2 控制系統軟件設計

      在軟件設計中,將系統中所有要處理的任務劃分為不同的、相互獨立的任務模塊。根據系統的性能指標和技術要求,可將任務劃分為:語音識別、航向測量與計算、超聲波測距、電機控制、信息處理等任務。

      2.1 進程的創建與狀態轉換

      移動機器人控制系統在初始化完成后,利用系統調用fock機制分別為語音識別、航向測量與計算和超聲波測距等任務產生相應的子進程,實現方式如圖2所示。進程創建成功后,操作系統會根據調度算法進行進程調度,這使系統在行駛過程中,能夠及時響應語音命令。



      2.2 進程間通信機制

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



      在兩個進程之間建立共享內存的具體實現步驟如下:

      ①在調用fock()前,使用shmget創建新的共享內存,返回值為共享內存標識碼:

      shmid=shmget(IPC PRIVATE,1,PERM) //申請一個字節共享內存

     ?、谡{用fock()函數,創建子進程,根據fock()的返回值區分父進程和子進程,并分別在兩個進程中使用shmat映射一塊共享內存,即允許當前進程訪問創建的共享內存:

      if(fock()) p_addr=shmat(shmid,0,0);//將共享內存映射到父進程

      else{c_addr=shmat(shmid,0,0);}//將共享內存映射到子進程

      其中,shmid為shmget()函數的返回值,即共享內存標識碼。

      從用戶的角度看,在父進程中可以對p_addr進行讀寫操作,實際訪問的是申請的共享內存。子進程則可以對c_addr進行讀寫,從而實現兩個進程間的通信。共享內存的映射和進程之間的關系,如圖4所示。



      2.3 系統控制流程

      在程序初始化完成后,為每項任務創建了相應的進程,并建立了共享內存,如圖5所示。在每個進程中采用循環執行方式,語音識別進程中利用select函數監控是否有識別結果輸出,并將識別結果寫入到相應的共享內存區。



      航向測量和計算進程循環讀取陀螺儀的角度信息并存儲。超聲波測距進程在接收到信息處理進程的控制命令后進行測距并將數據返回至信息處理進程。信息處理進程融合了多傳感器的數據,根據設定的路徑規劃方案,將控制信息傳輸到電機控制進程,實現機器人姿態的調整。

      2.4 語音識別

      在系統運行過程中,語音識別進程獨立完成對語音模塊的初始化和讀取識別結果的任務,因此,能夠及時響應操作人員發出的語音指令。程序中使用了select()函數監控read()是否可讀。當語音識別模塊LD3320有識別結果時,將在中斷引腳輸出高電平以觸發系統中斷,結束驅動程序中的等待狀態,同時應用程序可以通過read()函數讀取LD3320的識別結果,并寫入到相應共享內存區M中。在沒有中斷時,read()函數將被阻塞,如圖6所示。


    linux相關文章:linux教程



    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 平潭县| 贵德县| 四会市| 沽源县| 云林县| 象州县| 长泰县| 台南市| 象山县| 富阳市| 普格县| 勃利县| 永善县| 梧州市| 东山县| 阿拉善右旗| 左云县| 凤城市| 昭通市| 安国市| 金塔县| 南宁市| 临泉县| 曲靖市| 渝中区| 南宫市| 交口县| 特克斯县| 晋城| 河津市| 林周县| 永州市| 阳朔县| 德江县| 泌阳县| 辽阳县| 武宣县| 海原县| 榆林市| 木兰县| 交口县|