王 欣,伍世虔,鄒 謎
(武漢科技大學 冶金裝備及其控制教育部重點實驗室,武漢 430081)
我國的果蔬種植面積和產量已處于世界前列,目前的果蔬采摘過程普遍采用人工采摘的方法,自動化水平比較低,成本高,且耗時耗力[1-2]。隨著溫室培育果蔬技術的普及,實現智能機器人自動采摘果蔬的需求越來越強烈[3-4]。
相關學者在20世紀就已經開始了智能采摘的研究。荷蘭農業(yè)環(huán)境工程研究所研發(fā)的黃瓜自動采摘機器人,采用近紅外技術識別黃瓜成熟的程度并配備機械手進行抓取,同時能夠輕松避免損傷黃瓜的表面。該方法擁有兩個視覺系統(tǒng),配置要求比較高,不具有普遍性[5]。日本的Yamamoto等研發(fā)出草莓采摘機器人,由3個攝像機組成采摘機器人的視覺系統(tǒng)[6],通過切斷草莓梗來摘取果實,成功率較低,且視覺系統(tǒng)所采用的攝像機過多導致摘取的速度慢。美國加利福尼亞西紅柿機械公司研發(fā)的西紅柿采摘機連同西紅柿苗一起收割,在采摘之后進行西紅柿的分類,采摘的效率很高但智能化程度低[7]。近幾年來,國內對采摘機器人進行了一系列深入研究,并取得了很大進展。中國農業(yè)大學的張鐵中采用BP神經網絡[8]的算法來識別草莓,并且通過LRCD算法對采集到的草莓圖像進行分割,從而確定最佳采摘果實位置點。LRCD算法適用于果實的顏色與果實的背景顏色差別較大的情況[9],若果實的顏色與葉子相似度高則會產生干擾影響,因此適用范圍非常有限。本文基于Kinect V2視覺設備,利用NAO機器人設計了一個完整的果實采摘系統(tǒng),不會受光線的影響,且獲取坐標的速度又快、又準。
Kinect V2內置彩色攝像機、紅外發(fā)射器和一個麥克風陣列,采用了深度感應技術,如圖1所示。其中,紅外發(fā)射器投射紅外線脈沖并在脈沖受阻擋的時候返回。利用Time of Flight(ToF)得到Depth信息,Depth的數據范圍為0.5~4.5m。紅外感應器的正常使用不受周圍光線的影響,視場中的果蔬在黑暗中依然清晰可見,采用獨立與可見光的視場,深度圖像是高保真圖像且進行了圖像去噪。

圖1 投射紅外脈沖
本文利用Kinect V2紅外攝像機對場景的深度進行采集來創(chuàng)建實時深度圖,較Kinect V1測得的深度范圍增大了0.5m,分辨率和視野范圍都有較大提高,新增加的紅外線探測功能使得圖像清晰、穩(wěn)定且噪點較少。利用Kinect V2采集的深度圖如圖2所示。

圖2 Kinect實時深度圖
Kinect近紅外攝像機的視場是金字塔形狀的。離攝像機遠的果蔬比近的果蔬擁有更大的視場橫截面積。每個像素的深度值和視場中果蔬離攝像機的距離是對應的。Kinect的空間坐標系如圖3所示。

圖3 Kinect空間坐標系
采用棋盤格標定板對彩色相機和深度相機進行標定,圖4為棋盤格標定板在標定過程中的顯示、通過標定過程,來獲得攝像機內部參數、外部參數和投影矩陣。
標定獲得的深度相機的內參數(Matrix Ir)為

(1)
深度相機的外部參數的旋轉矩陣(Rotation)為

(2)
深度相機的外部參數的平移矩陣(Translation)為:

(3)

圖4 深度相機和彩色相機的標定
Kinect獲取的深度值是由16位的無符號整數來表示的。本文通過位運算獲取每一個像素的距離,將每一個像素點對應的深度值zw顯示到界面。在計算機視覺中,利用相機的成像模型將三維空間點與二維像素點聯(lián)系起來。某點三維坐標為(xw,yw,zw),像素坐標為(uc,vc),在UI界面添加一個TextBlock,采用鼠標點擊事件MouseLeftButtonUp來觸發(fā)獲得深度圖像中果蔬及機器人的像素坐標。為了得到圖像每一幀的任意一個點的三維坐標值,要從圖像坐標系中轉換到相機坐標系下的三維坐標。由相機的成像模型原理可得
(4)
本文將標定獲得的參數結合式(1)~式(4),將空間任意一點的三維坐標表示為
(5)
(6)
由式(5)~式(6)得果蔬和機器人的三維坐標為(xw,yw,zw)。
NAO機器人手臂具有5個自由度,對機器人的末端執(zhí)行器采用D-H法進行正運動學分析,可得
(7)
式(7)右邊矩陣為機器人末端的位姿。其中,p為機器人末端位置。采用D-H法對NAO機器人的手臂末端進行逆運動學分析,5個關節(jié)對應的關節(jié)i分別為RShoulderPitch 、RShoulderRoll 、RElbowYaw 、RElbowRoll 、RWristYaw 。其中,Ai表示為
(8)
其中,sθi=sinθi,cθi=cosθi,sαi-1=sinαi-1,cαi-1=cosαi-1。 NAO機器人右臂的D-H參數如表1所示。

表1 NAO機器人右臂D-H參數
NAO機器人與人體結構十分相近,符合人抓取的慣用姿態(tài),故取RElbowYaw、RWristYaw及RElbowRoll關節(jié)坐標的Y值相等,即
py=yRElbowYaw=yRwristYaw=yRElbowRoll
(9)
對機器人的5個關節(jié)采用D-H算法進行逆運動學分析。由式(7)~(9)可得
(10)
同理,可得θi。機器人逆運動學計算可得5個關節(jié)分別轉動的角度,從而成功摘取果實。圖5為機器人關節(jié)摘取果蔬時在視圖中的表示。

圖5 機器人的5個關節(jié)
NAO機器人通過WiFi與計算機進行數據傳輸,輸入機器人的IP地址到網頁瀏覽器,即可與計算機進行通信。NAOqi是機器人的控制結構,計算機使用本地調用(LPC)連接到機器人并交換信息,采用ALMemory存儲數據并監(jiān)控機器人。本文對機器人采用Python進行編譯,配置環(huán)境變量之后,可以在Python中使用NAOqi的AldebaranSDV,從而成功控制機器人。
Kinect V2采用C#語言進行編譯,讀取深度數據幀并復制到相應的緩沖區(qū),讀取幀數據并建立數據文件。本文將采集的圖像數據以文件的形式發(fā)送給PC端,機器人讀取PC端的數據實現與Kinect的交互,實現數據的傳輸。
果蔬采摘系統(tǒng)的流程圖如圖6所示。

圖6 機器人摘取果蔬流程圖
試驗的具體過程如下:
1)Kinect V2設備放置在水平位置上,獲取果蔬和機器人的深度圖像,并采用過渡RGB顏色來表示不同的深度。
2)采用鼠標點擊事件MouseLeftButtonUp分別獲取果蔬形心三維坐標(xw,yw,zw)及機器人腰部Torso三維坐標(xr,yr,zr),將Kinect獲得的各項參數以文件的形式發(fā)送給計算機。
3)調用NAOqi模塊中的walkto(x,y,theta)函數,讀取計算機獲得的三維數據,機器人根據數據抵達最佳摘取果蔬的位置;再次利用Kinect獲取的機器人三維坐標,并將數據反饋給機器人。機器人采用閉環(huán)控制系統(tǒng),若機器人距離最佳摘取目標點誤差超過5mm,則再次利用walkto函數進行位置調整。
4)根據機器人三維坐標,NAO機器人根據逆運動學得出每個關節(jié)轉動的角度,準確完成摘取果蔬的任務,如圖7所示。

圖7 機器人成功摘取果蔬
Kinect獲取的三維坐標如表2所示。在Kinect進行相機的標定后,測量精度高,誤差保持在2mm之內,且視覺系統(tǒng)測得的三維坐標速度快,獲取坐標時間只需0.15s。本文利用白色棒代替果蔬進行50次果蔬的采摘實驗,結果如表3所示。每次實驗機器人的位置與果蔬的位置都不相同,采摘成功率為78%。

表2 Kinect獲取的幾組三維坐標

表3 機器人摘取果蔬統(tǒng)計表
本文采用Kinect視覺設備獲取深度圖像,在不同光照條件下均可以得到果蔬的深度信息,采用相機的標定提出了一種獲取果實空間坐標的方法,此方法獲取的三維坐標誤差小于2mm,滿足果蔬采摘機器人的誤差要求。此外,本文采用文件的形式進行數據傳輸,實現了視覺系統(tǒng)與機器人系統(tǒng)之間的交互。根據果蔬的三維坐標,采用D-H法對機器人右手手臂進行逆運動學分析,最后末端執(zhí)行器準確抵達果蔬所在位置,成功率較高且耗時短。