文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)06-0027-03
水田除草機(jī)器人是指具備人工智能識(shí)別功能、能夠通過圖像或者其他傳感器對(duì)雜草的具體情況進(jìn)行識(shí)別并能夠通過推理判斷以產(chǎn)生具體的指令來指示機(jī)械除草機(jī)構(gòu)進(jìn)行除草的一種智能裝置[1],。
隨著工業(yè)機(jī)器人的發(fā)展,,一些發(fā)達(dá)國(guó)家(如日本、美國(guó)等)紛紛展開農(nóng)業(yè)機(jī)器人的研究和開發(fā)并已經(jīng)取得了一些階段性成果,。但由于一些經(jīng)濟(jì)特殊性的問題,,還沒有達(dá)到實(shí)用化的程度。日本發(fā)明了一種小型水田除草機(jī)器人,,它體積很小,,由電池供電,完成一次除草作業(yè)后,,可通過轉(zhuǎn)彎的方式換到另一除草位置進(jìn)行下一輪除草作業(yè)[2],。我國(guó)也開始了農(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)來完成機(jī)器人的運(yùn)行,。
(3)視頻采集方案:此部分要實(shí)時(shí)采集水田秧苗圖像,,并將圖像實(shí)時(shí)傳到PC,從而可以在PC上用瀏覽器來實(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)的低成本開發(fā)板,。它的可擴(kuò)展接口使得用戶可以方便訪問處理系統(tǒng)和可編程邏輯,,創(chuàng)建獨(dú)特而強(qiáng)大的設(shè)計(jì)[4-5]。
2 機(jī)器人控制系統(tǒng)實(shí)現(xiàn)
2.1 上位機(jī)部分
利用VC++6.0開發(fā)了除草機(jī)器人的人機(jī)交互界面,,開發(fā)類庫(kù)是基于MFC的對(duì)話框設(shè)計(jì)的,,通過ZigBee實(shí)現(xiàn)了上位機(jī)與Zedboard的通信。人機(jī)交互界面如圖2所示,,主要分為3部分來控制,。通過手柄和界面上的按鈕發(fā)送指令和數(shù)據(jù)。
行走電機(jī)是通過M0和M1編輯框中的數(shù)值設(shè)置速度大小,,運(yùn)動(dòng)方向可由Up和Down來控制,,注意這里不選擇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通過ZigBee接收從上位機(jī)來的數(shù)據(jù),,通過增量式PID算法整定控制PWM波形。Zedboard作為帶FPGA的處理器,,利用FPGA的邏輯資源十分有意義,。本文將介紹產(chǎn)生一路PWM發(fā)生器的IP核,如果要產(chǎn)生多路PWM發(fā)生器,,對(duì)FPGA來說僅僅是多消耗一些邏輯資源而已,,其過程是一樣的。
在Zedboard中運(yùn)行Linux系統(tǒng),,要使用本設(shè)計(jì)FPGA的IP核,,必須為這個(gè)IP核開發(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輸出的是控制量增量,,并無積分作用,,因此該方法適用于執(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邏輯通過讀寫這些寄存器與PS交互[4],。
由于Zedboard運(yùn)行的系統(tǒng)使用了FPGA資源,因此所開發(fā)的IP核必須在原有的工程里加入新的IP核,,重新生成新的bit流文件,,打開適合自己ise版本的官方demo,xps系統(tǒng)工程位于hw\xps_proj文件夾下,,打開這個(gè)xps工程。在xps中單擊Hardware->Create or Import Periphera進(jìn)入歡迎界面,,按照自己的要求定制IP核,,完成IP核制作的向?qū)?sup>[4]。
接下來把這個(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)程序的開發(fā)
Linux提供了內(nèi)核模塊機(jī)制,,模塊本身不被編譯入內(nèi)核映像,,從而控制了內(nèi)核的大小,模塊一旦被加載,,它就和內(nèi)核中的其他部分完全一樣,。驅(qū)動(dòng)程序是從來不主動(dòng)運(yùn)行的程序,而且等待應(yīng)用程序來調(diào)用,。應(yīng)用程序通過內(nè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)的開發(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ù)的一種設(shè)備/程序,。在Zedboard上運(yùn)行一個(gè)提供Web服務(wù)的程序,,使得Zedboard成為一個(gè)可以提供Web訪問服務(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è)中,,這樣就可以通過瀏覽器輸入Zedboard的IP地址來觀看傳回來的實(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)所示。
打開火狐瀏覽器,,輸入開發(fā)板的IP地址192.168.1.10,,這時(shí)可以觀察到機(jī)器人傳回的實(shí)時(shí)圖像。
本設(shè)計(jì)是在Xilinx的Zynq平臺(tái)上進(jìn)行實(shí)驗(yàn)的,。通過在機(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)控制。通過WiFi接入機(jī)器人的無線路由,,就可以獲取實(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] 呂常智,,姚志科.基于無線通信的移動(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] 杭啟樂,司賓強(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)用開發(fā)完全手冊(cè)[M].北京:人民郵電出版社,,2008.
[10] 宋寶華.Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解[M].北京:人民郵電出版社,,2008.