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