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