<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于ARM-Linux的自主避障機器魚設計

          基于ARM-Linux的自主避障機器魚設計

          作者: 時間:2013-10-09 來源:網(wǎng)絡 收藏
          隨著科技的發(fā)展與進步,出現(xiàn)了具有特殊功能的智能機器,如索尼公司生產(chǎn)的能夠以自我“意識”來“感覺”“學習”和“飼養(yǎng)”的寵物機器狗,以弗吉尼亞理工大學研制的CHARLI-L1機器人為基礎進行升級改造的SAFFIR的消防機器人等。作為一項比較新的產(chǎn)品,涉及到的智能開發(fā)并不深,因此的智能化程度并不高,但隨著機器魚研究的加深,相信機器魚的智能度會大大提高,功能也會更趨完善。目前的機器魚類型主要有遙控機器魚和語音控制機器魚,例如曾在德國漢諾威電子展上展現(xiàn)的通過機器魚體內(nèi)收縮來提供動力的遙控式機器魚和在西南民族大學誕生的國內(nèi)首個的聲控機器魚等。據(jù)調查顯示同內(nèi)涉及到具有自主避障與自主視覺功能的智能機器魚的研究與開發(fā)并不多。由于技術等諸多原因我們選擇了設計自主避障的機器魚。由于機器魚具有機動性、高效性、低噪性等優(yōu)點,所以高智能的機器魚適合去完成如探測污染物質、繪制港口的實時立體圖和對海底資源進行探測等具有一定難度和危險的任務。由于國內(nèi)涉及到機器魚智能的開發(fā)程度不高,所以高智能的機器魚研發(fā)有較大的空間。

          1 硬件系統(tǒng)設計

          1.1 工作原理

          機器魚主硬件原理如圖1所示。機器魚的自主避障功能是通過以ARM芯片、LINUX嵌入式系統(tǒng)、紅外傳感器等結合實現(xiàn)的。機器魚在水中分別通過攝像頭、紅外傳感器、LCD進行畫面采集、自主避障和畫而顯示。攝像頭采集到圖片后,圖像被緩存于SDRAM中。ARM芯片通過紅外傳感器的AD管腳向發(fā)射器傳送命令,使探測器的發(fā)射模塊不斷地向外發(fā)送紅外線,當接收器接收到返回的紅外線后會立刻通過AD管腳向ARM芯片傳送與紅外線返回的光強相應的電壓,電壓經(jīng)過ARM芯片的A/D轉換器轉變成十位的二進制數(shù)字量,通過一定的公式計算出此時與障礙物的距離。當計算出來的距離小于預設量時,ARM芯片的控制軟件執(zhí)行一個串行中斷指令改變脈沖的脈寬即改變改PWM波的占空比變,進而改變機器魚的游向從而避開障礙物。


          1.2 ARM芯片模塊設計

          ARM處理器擁有16/32Bit內(nèi)核和具有450MIPS運算能力。400MHz的標準工作頻率可滿足高速的應用要求。ARM主芯片有內(nèi)置數(shù)字攝像頭接口,可選配130萬像素CMOS號業(yè)攝像頭進行圖像采集。ARM處理器的外圍擴展了64M的SDRAM和FLASH,ARM主芯片支持Linux、uCOS-II、WINCE等操作系統(tǒng)。ARM芯片高度集成,主芯片擁有CPU、Nand flash、Nor flash、Ethernet controller等資源。CPU內(nèi)的所有可用資源可通過200pin引腳引出。接口核心板可以單獨構成系統(tǒng),無需外圍器件。

          嵌入式Linux (Embedded Linux)是指對標準Linux經(jīng)過小型化裁剪處理之后,能夠固化在容量只有幾KB或者幾MB字節(jié)的存儲器芯片或單片機中。它具有成本低、源代碼開放和移植性好的優(yōu)點。在工程中得到了廣泛的應用,適合于特定嵌入式的應用場合。

          1.3 紅外模塊

          紅外線是介于可見光和微波之間的一種電磁波。它兼具可見光折射、反射、直線傳播以及微波的貫穿一些不透明物質和較強的穿透的能力。紅外傳感器包括紅外發(fā)射模塊和紅外接收模塊。科學實驗表明溫度高于絕對零度的任何物體均可產(chǎn)生紅外輻射,因此紅外傳感器要有更強的發(fā)射紅外的能力。

          距離探測器的類型主要有激光探測器、視覺探測器、超聲波傳感器和紅外傳感器。由于激光探測器和視覺探測器比較昂貴而且對控制器的要求很高,所以不選為機器魚的避障器。超聲波傳感器測距范圍一般在30~300 cm,可見短距離測距是超聲波傳感器的盲區(qū)。能“看”到幾米之外障礙物對于機器魚的意義并不大,而紅外傳感器的測距距離一般在幾十厘米之內(nèi),因此我們選擇紅外傳感器作為機器魚的避障器。

          GP2YOA21YK0F是夏普的一款距離測量傳感器。它由PSD(position sensitive detector)、IRFD(infrared emitting diode)以及信號處理電路三部分組成。由于采用了三角測量方法,所以被測環(huán)境溫度、物體的材質以及測量時間均不會影響傳感器的測量結果的精確度。接收到反射回來的紅外線后,傳感器輸出一個與返回光強成正比模擬電壓。輸出的模擬電壓經(jīng)過ARM的A/D轉換器變成數(shù)字量,數(shù)字量傳到MCU后以一定的算法計算出機器魚與障礙物之間的距離。將探測的結果與預設值比較,若大于預設值則不執(zhí)行中斷即繼續(xù)前進,否則執(zhí)行中斷進行避障。紅外傳感器硬件原理如圖2所示。


          1.4 攝像頭模塊

          為機器魚配備的攝像頭是CMOS數(shù)字圖象傳感器。采用的是Ommvision公司的OV9650,OV9650具有130萬的像素、10Bit的數(shù)據(jù)接口與標準SCCB接口,其分辨率達1280x1024并采用CSP-28封裝該攝像頭用類似于IIc總線的Secb總線連接到ARM主芯片的IIc接口進行通信。在ARM芯片中,攝像頭的接口控制模塊(CAMIF)由圖像采集模塊、視頻預覽尺度模塊、模式混合模塊、特殊功能寄存器(SFR)模塊、碼流尺度模塊、視頻預覽DMA模塊以及碼流DMA模塊構成。COMS攝像頭OV9650輸出的ITU-656格式視頻碼流,經(jīng)CAMIF處理后,將采集到的視頻碼流成兩路不同的格式進行傳輸,兩路格式不同的信號分別進入不同的幀存儲單元進行存貯,之后根據(jù)ARM控制器的指令通過視頻DMA通道進行傳輸。攝像頭原理如圖3所示。


          1.5 LCD模塊

          LCD液品顯示器是(Liquid Crystal Display)的簡稱,LCD的構造是在兩片平行的玻璃當中放置液態(tài)的晶體,兩片玻璃中間有許多垂直和水平的細小電線,透過通電與否來控制桿狀水晶分子改變方向,將光線折射出來產(chǎn)生畫面。LCD有扭轉式向列型(Super Twisted Nematic,簡稱STN)和薄膜式晶體管型(Thin Film Transistor,簡稱TFT)兩種主流類型。因為TFT有反應速度快、可視角度大、色彩豐富、分辨率高、對比度、亮度高等優(yōu)點,所以我們選擇TFT的LCD。LCD硬件原理、LCD控制器功能如圖4所示。

          LCD的工作受其控制器控制完成,圖5為LCD控制器功能圖。通過LCD控制器的寄存器組REGBANK來對LCD控制器的各項參數(shù)進行設置。而LCDCDMA則是LCD控制器專用的DMA通道,負責將視頻數(shù)據(jù)從顯存(顯存是SDRAM中的一塊區(qū)域,可利用REGBANK編程設定)中取出,并從VIDPRCS從VD[23:0]發(fā)送給LCD屏。同時LPC3600和TIMECEN負責產(chǎn)生LCD屏所需的控制時,然后從VIDEOMUX送給LCD屏。TIMEGEN包含可編程邏輯,可通過程序進行設定。TIMEGEN能產(chǎn)生不同LCD屏驅動電路所需要的時序信號。

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

          linux相關文章:linux教程


          聲控燈相關文章:聲控燈原理
          攝像頭相關文章:攝像頭原理

          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();