文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)06-0027-03
水田除草機(jī)器人是指具備人工智能識(shí)別功能、能夠通過(guò)圖像或者其他傳感器對(duì)雜草的具體情況進(jìn)行識(shí)別并能夠通過(guò)推理判斷以產(chǎn)生具體的指令來(lái)指示機(jī)械除草機(jī)構(gòu)進(jìn)行除草的一種智能裝置[1]。
隨著工業(yè)機(jī)器人的發(fā)展,一些發(fā)達(dá)國(guó)家(如日本、美國(guó)等)紛紛展開(kāi)農(nóng)業(yè)機(jī)器人的研究和開(kāi)發(fā)并已經(jīng)取得了一些階段性成果。但由于一些經(jīng)濟(jì)特殊性的問(wèn)題,還沒(méi)有達(dá)到實(shí)用化的程度。日本發(fā)明了一種小型水田除草機(jī)器人,它體積很小,由電池供電,完成一次除草作業(yè)后,可通過(guò)轉(zhuǎn)彎的方式換到另一除草位置進(jìn)行下一輪除草作業(yè)[2]。我國(guó)也開(kāi)始了農(nóng)業(yè)機(jī)器人的研究,南京林業(yè)大學(xué)的陳勇等發(fā)明了一種高效除草機(jī)器人,它是由自動(dòng)導(dǎo)航和雜草識(shí)別攝像裝置、行間切割涂抹與行內(nèi)除草機(jī)構(gòu)以及控制系統(tǒng)組成[2]的。
1 機(jī)器人控制系統(tǒng)整體設(shè)計(jì)
1.1 控制系統(tǒng)需求分析
根據(jù)除草機(jī)器人所要完成的功能可將系統(tǒng)劃分為如圖1所示的控制框圖。由圖可以看出,控制系統(tǒng)主要分為三大部分:第一部分為上位機(jī)監(jiān)控部分;第二部分為運(yùn)動(dòng)控制部分;第三部分為視頻采集及識(shí)別部分。
(1)上位機(jī)監(jiān)控部分:此部分主要實(shí)現(xiàn)對(duì)機(jī)器人的實(shí)時(shí)控制和合理操作。上位機(jī)要與運(yùn)動(dòng)控制部分進(jìn)行數(shù)據(jù)通信[3]。
(2)運(yùn)動(dòng)控制部分:此部分主要負(fù)責(zé)接收上位機(jī)命令,并負(fù)責(zé)將這些數(shù)據(jù)進(jìn)行判斷解析,將其轉(zhuǎn)換為電機(jī)控制信號(hào)來(lái)完成機(jī)器人的運(yùn)行。
(3)視頻采集方案:此部分要實(shí)時(shí)采集水田秧苗圖像,并將圖像實(shí)時(shí)傳到PC,從而可以在PC上用瀏覽器來(lái)實(shí)時(shí)觀察圖像。因此,這里采用WiFi是非常合適的。
1.2 系統(tǒng)主控方案
本設(shè)計(jì)采用Zynq-7000平臺(tái),Zynq-7000實(shí)現(xiàn)了雙核Cortex-A9 MPcore和最新的28 nm 7系列可編程邏輯的緊密集成。Zynq芯片內(nèi)部可以分為PS(Processing System)和PL(Programmable Logic)兩部分,ZedBoard是基于Xilinx ZynqTM-7000擴(kuò)展式處理平臺(tái)的低成本開(kāi)發(fā)板。它的可擴(kuò)展接口使得用戶可以方便訪問(wèn)處理系統(tǒng)和可編程邏輯,創(chuàng)建獨(dú)特而強(qiáng)大的設(shè)計(jì)[4-5]。
2 機(jī)器人控制系統(tǒng)實(shí)現(xiàn)
2.1 上位機(jī)部分
利用VC++6.0開(kāi)發(fā)了除草機(jī)器人的人機(jī)交互界面,開(kāi)發(fā)類庫(kù)是基于MFC的對(duì)話框設(shè)計(jì)的,通過(guò)ZigBee實(shí)現(xiàn)了上位機(jī)與Zedboard的通信。人機(jī)交互界面如圖2所示,主要分為3部分來(lái)控制。通過(guò)手柄和界面上的按鈕發(fā)送指令和數(shù)據(jù)。
行走電機(jī)是通過(guò)M0和M1編輯框中的數(shù)值設(shè)置速度大小,運(yùn)動(dòng)方向可由Up和Down來(lái)控制,注意這里不選擇Select按鈕。
在圖2所示界面中,選中Select,這時(shí),為控制4個(gè)推桿電機(jī),鉤選R1、R2、1、2、3、4、L1、L2、Up、Down、Left、Right選項(xiàng),每?jī)蓚€(gè)選項(xiàng)控制一個(gè)推桿電機(jī),如R1控制一號(hào)推桿的前進(jìn),R2控制一號(hào)推桿的后退,推桿復(fù)位、設(shè)置p參數(shù)、解除復(fù)位這3個(gè)按鈕用于4個(gè)推桿電機(jī)初始化的設(shè)置。
2.2 運(yùn)動(dòng)控制部分
2.2.1 運(yùn)動(dòng)控制部分結(jié)構(gòu)框圖
運(yùn)動(dòng)控制部分結(jié)構(gòu)框圖如圖3所示。
Zedboard通過(guò)ZigBee接收從上位機(jī)來(lái)的數(shù)據(jù),通過(guò)增量式PID算法整定控制PWM波形。Zedboard作為帶FPGA的處理器,利用FPGA的邏輯資源十分有意義。本文將介紹產(chǎn)生一路PWM發(fā)生器的IP核,如果要產(chǎn)生多路PWM發(fā)生器,對(duì)FPGA來(lái)說(shuō)僅僅是多消耗一些邏輯資源而已,其過(guò)程是一樣的。
在Zedboard中運(yùn)行Linux系統(tǒng),要使用本設(shè)計(jì)FPGA的IP核,必須為這個(gè)IP核開(kāi)發(fā)Linux系統(tǒng)上的設(shè)備驅(qū)動(dòng),使得運(yùn)行在Linux系統(tǒng)上的應(yīng)用程序可以使用這個(gè)驅(qū)動(dòng)程序與FPGA端進(jìn)行通信,從而控制PWM的輸出。
2.2.2 增量式PID算法
PID算法廣泛應(yīng)用于控制系統(tǒng)中,本系統(tǒng)使用增量式PID算法,即:
增量式PID的輸出只與當(dāng)前拍和前兩拍的誤差有關(guān),因此累積誤差相對(duì)更小。上式中,e(n)對(duì)應(yīng)給定和反饋的偏差,u(n)對(duì)應(yīng)著輸出。增量式PID輸出的是控制量增量,并無(wú)積分作用,因此該方法適用于執(zhí)行機(jī)構(gòu)帶積分部件的對(duì)象,如電機(jī)等[6]。由于增量式PID輸出的是控制量增量,當(dāng)控制板出現(xiàn)故障時(shí),誤動(dòng)作影響較小,而執(zhí)行機(jī)構(gòu)本身有記憶功能,可保持原位,不會(huì)嚴(yán)重影響系統(tǒng)的工作。
2.2.3 PWM模塊的IP核設(shè)計(jì)
在Zynq上制作用戶IP核需要考慮如何與PS交換數(shù)據(jù)。有兩種方案,一種是EMIO交換數(shù)據(jù),一種是制作滿足AXI協(xié)議的IP核。通常采用第二種方案。Xilinx為用戶提供了Wizard,它會(huì)自動(dòng)生成總線(AXI)相關(guān)的代碼,做好地址譯碼邏輯、讀寫控制邏輯,并在用戶工作區(qū)生成一些寄存器。本設(shè)計(jì)中的PL邏輯通過(guò)讀寫這些寄存器與PS交互[4]。
由于Zedboard運(yùn)行的系統(tǒng)使用了FPGA資源,因此所開(kāi)發(fā)的IP核必須在原有的工程里加入新的IP核,重新生成新的bit流文件,打開(kāi)適合自己ise版本的官方demo,xps系統(tǒng)工程位于hw\xps_proj文件夾下,打開(kāi)這個(gè)xps工程。在xps中單擊Hardware->Create or Import Periphera進(jìn)入歡迎界面,按照自己的要求定制IP核,完成IP核制作的向?qū)?sup>[4]。
接下來(lái)把這個(gè)IP核添加進(jìn)xps工程,在IP Catalog中的USER選項(xiàng)中找到它,雙擊添加到系統(tǒng)中,然后在Bus Interface中,分別修改MPD、添加接口、修改HDL sources[7-8]。修改完畢后,在project菜單中選擇Rescan User Repositories,從port中可以看到新添加的引腳,選擇為External Ports把引腳引出去。分配地址,修改ucf約束文件,產(chǎn)生bit流文件。導(dǎo)入到SDK中,新建一個(gè)fsbl工程,重新生成BOOT.BIN文件。這樣用戶IP核的部分就完成了。
2.2.4 Linux下PWM模塊驅(qū)動(dòng)程序的開(kāi)發(fā)
Linux提供了內(nèi)核模塊機(jī)制,模塊本身不被編譯入內(nèi)核映像,從而控制了內(nèi)核的大小,模塊一旦被加載,它就和內(nèi)核中的其他部分完全一樣。驅(qū)動(dòng)程序是從來(lái)不主動(dòng)運(yùn)行的程序,而且等待應(yīng)用程序來(lái)調(diào)用。應(yīng)用程序通過(guò)內(nèi)核來(lái)調(diào)用驅(qū)動(dòng)程序[9],實(shí)現(xiàn)與實(shí)際硬件設(shè)備的通信。一般分為字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備3種類型[10]。需為上面生成的IP核進(jìn)行字符設(shè)備驅(qū)動(dòng)的開(kāi)發(fā)。
PWM模塊驅(qū)動(dòng)程序主要分為4個(gè)部分:加載函數(shù),卸載函數(shù),設(shè)置PWM的周期函數(shù),設(shè)置PWM的占空比函數(shù)[4]。
(1)加載函數(shù),主要完成以下幾項(xiàng)工作:內(nèi)核注冊(cè)設(shè)備驅(qū)動(dòng),創(chuàng)建PWM設(shè)備類,利用利用PWM設(shè)備類創(chuàng)建一個(gè)PWM設(shè)備,在PWM設(shè)備中創(chuàng)建周期和占空比兩個(gè)文件,將PWM模塊的物理地址映射到虛擬地址上[4]。
(2)卸載函數(shù),這個(gè)主要是在rmmod模塊時(shí)完成清除的工作,注銷設(shè)備。
(3)設(shè)置pwm的周期函數(shù),修改前關(guān)閉pwm模塊,將數(shù)值寫入到寄存器中。
(4)設(shè)置pwm的占空比函數(shù),修改前關(guān)閉pwm模塊,將數(shù)值寫入到寄存器中。
完成了pwm驅(qū)動(dòng)程序的編寫后,需要對(duì)驅(qū)動(dòng)程序進(jìn)行編譯,驅(qū)動(dòng)程序的編譯依賴于內(nèi)核,這就和一般的應(yīng)用程序不同了。因此除了要在Linux主機(jī)下安裝交叉編譯工具之外,還要編譯和運(yùn)行與Zedboard板子上的內(nèi)核版本一樣的內(nèi)核,然后編寫Makefile。Makefile中必須指定內(nèi)核所在的路徑,在這個(gè)Makefile的幫助下運(yùn)行make即可生成編譯模塊。
2.3 視頻采集方案
2.3.1 搭建嵌入式Web服務(wù)器
Web服務(wù)器是連接在網(wǎng)絡(luò)上提供Web訪問(wèn)服務(wù)的一種設(shè)備/程序。在Zedboard上運(yùn)行一個(gè)提供Web服務(wù)的程序,使得Zedboard成為一個(gè)可以提供Web訪問(wèn)服務(wù)的設(shè)備,這里選擇Boa服務(wù)器。
下載與移植Boa服務(wù)器,這里需要修改源碼目錄下的一些文件以及已經(jīng)發(fā)現(xiàn)的一些bug。
配置Boa服務(wù)器,在源碼目錄下找到boa.conf,在其基礎(chǔ)上做出自己的修改,配置Boa服務(wù)器。
在編譯配置完Boa服務(wù)器后,就需要在Zedboard上進(jìn)行部署,完成相關(guān)的設(shè)置,保證與boa.conf中的配置相符。
2.3.2 網(wǎng)絡(luò)攝像機(jī)的移植和搭建
網(wǎng)絡(luò)攝像機(jī)可以提供實(shí)時(shí)捕獲的圖像。攝像頭捕獲的圖像數(shù)據(jù)很大,因此需要將其壓縮后進(jìn)行網(wǎng)絡(luò)傳輸,接收端將接收到的壓縮數(shù)據(jù)進(jìn)行解碼后播放。利用網(wǎng)絡(luò)攝像頭實(shí)時(shí)采集圖像的工作原理如圖4所示。
在安裝編碼軟件mjpg-streamer之前,需要安裝libtool工具盒移植JPEG編碼庫(kù),移植mjpg-streamer需要修改源碼目錄中plugins/input_uvc目錄下的Makefile,然后使用交叉編譯。編譯完成后可以找到input_uvc.so、output_http.so,使用這兩個(gè)庫(kù),將JPEG編碼庫(kù)生成的libjpg庫(kù)拷貝到Zedboard文件系統(tǒng),最好是/usr/lib/下。
在視頻采集方案中,將mjpg-streamer與Boa結(jié)合使用,結(jié)合Web服務(wù)器一起將實(shí)時(shí)圖像嵌入到網(wǎng)頁(yè)中,這樣就可以通過(guò)瀏覽器輸入Zedboard的IP地址來(lái)觀看傳回來(lái)的實(shí)時(shí)圖像。
3 實(shí)驗(yàn)測(cè)試
測(cè)試:imsmod pwm_driver.ko
cd /sys/class/pwm_driver/pwm_device
echo 1000>pwm_frequency
echo 50>pwm_duty
產(chǎn)生頻率為10 kHz、占空比分別為50%和30%的PWM波,如圖5(a)、(b)所示。
打開(kāi)火狐瀏覽器,輸入開(kāi)發(fā)板的IP地址192.168.1.10,這時(shí)可以觀察到機(jī)器人傳回的實(shí)時(shí)圖像。
本設(shè)計(jì)是在Xilinx的Zynq平臺(tái)上進(jìn)行實(shí)驗(yàn)的。通過(guò)在機(jī)器人車身上安裝攝像頭可以實(shí)現(xiàn)對(duì)機(jī)器人的遠(yuǎn)程控制。實(shí)驗(yàn)結(jié)果表明,電機(jī)控制調(diào)節(jié)響應(yīng)快,電機(jī)驅(qū)動(dòng)器運(yùn)行穩(wěn)定可靠,實(shí)現(xiàn)了增量式PID閉環(huán)控制。通過(guò)WiFi接入機(jī)器人的無(wú)線路由,就可以獲取實(shí)時(shí)的圖像,能夠?qū)崿F(xiàn)對(duì)機(jī)器人的準(zhǔn)確控制,很好地滿足了實(shí)際的工程應(yīng)用。
參考文獻(xiàn)
[1] 張濱,杜啟亮,田聯(lián)房.基于FPGA的步進(jìn)電動(dòng)機(jī)加減速控制器[J].微特電機(jī),2012(08):71-74.
[2] 夏歡.水田用除草機(jī)器人的結(jié)構(gòu)與實(shí)現(xiàn)[D].廣州:華南理工大學(xué),2012.
[3] 呂常智,姚志科.基于無(wú)線通信的移動(dòng)機(jī)器人遠(yuǎn)程控制系統(tǒng)[J].煤礦機(jī)械,2012,33(3):239-241.
[4] 陸佳華,江舟,馬岷.嵌入式系統(tǒng)軟硬件協(xié)同設(shè)計(jì)實(shí)戰(zhàn)指南基于Xilinx Zynq[M].北京:機(jī)械工業(yè)出版社,2013.
[5] 何賓.Xilinx All Programmable Zynq-7000 Soc設(shè)計(jì)指南[M].北京:清華大學(xué)出版社,2013.
[6] 杭啟樂(lè),司賓強(qiáng),朱紀(jì)洪,等.基于DSP和CPLD的四相容錯(cuò)電機(jī)控制系統(tǒng)硬件設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2012,20(9):2413-2415.
[7] 吳厚航.深入淺出玩轉(zhuǎn)FPGA[M].北京:北京航空航天大學(xué)出版社,2010.
[8] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].北京:北京航空航天大學(xué)出版社,2003.
[9] 韋東山.嵌入式Linux應(yīng)用開(kāi)發(fā)完全手冊(cè)[M].北京:人民郵電出版社,2008.
[10] 宋寶華.Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解[M].北京:人民郵電出版社,2008.