王 欣,伍世虔,鄒 謎
(武漢科技大學 冶金裝備及其控制教育部重點實驗室,武漢 430081)
我國的果蔬種植面積和產(chǎn)量已處于世界前列,目前的果蔬采摘過程普遍采用人工采摘的方法,自動化水平比較低,成本高,且耗時耗力[1-2]。隨著溫室培育果蔬技術(shù)的普及,實現(xiàn)智能機器人自動采摘果蔬的需求越來越強烈[3-4]。
相關(guān)學者在20世紀就已經(jīng)開始了智能采摘的研究。荷蘭農(nóng)業(yè)環(huán)境工程研究所研發(fā)的黃瓜自動采摘機器人,采用近紅外技術(shù)識別黃瓜成熟的程度并配備機械手進行抓取,同時能夠輕松避免損傷黃瓜的表面。該方法擁有兩個視覺系統(tǒng),配置要求比較高,不具有普遍性[5]。日本的Yamamoto等研發(fā)出草莓采摘機器人,由3個攝像機組成采摘機器人的視覺系統(tǒng)[6],通過切斷草莓梗來摘取果實,成功率較低,且視覺系統(tǒng)所采用的攝像機過多導致摘取的速度慢。美國加利福尼亞西紅柿機械公司研發(fā)的西紅柿采摘機連同西紅柿苗一起收割,在采摘之后進行西紅柿的分類,采摘的效率很高但智能化程度低[7]。近幾年來,國內(nèi)對采摘機器人進行了一系列深入研究,并取得了很大進展。中國農(nóng)業(yè)大學的張鐵中采用BP神經(jīng)網(wǎng)絡(luò)[8]的算法來識別草莓,并且通過LRCD算法對采集到的草莓圖像進行分割,從而確定最佳采摘果實位置點。LRCD算法適用于果實的顏色與果實的背景顏色差別較大的情況[9],若果實的顏色與葉子相似度高則會產(chǎn)生干擾影響,因此適用范圍非常有限。本文基于Kinect V2視覺設(shè)備,利用NAO機器人設(shè)計了一個完整的果實采摘系統(tǒng),不會受光線的影響,且獲取坐標的速度又快、又準。
Kinect V2內(nèi)置彩色攝像機、紅外發(fā)射器和一個麥克風陣列,采用了深度感應(yīng)技術(shù),如圖1所示。其中,紅外發(fā)射器投射紅外線脈沖并在脈沖受阻擋的時候返回。利用Time of Flight(ToF)得到Depth信息,Depth的數(shù)據(jù)范圍為0.5~4.5m。紅外感應(yīng)器的正常使用不受周圍光線的影響,視場中的果蔬在黑暗中依然清晰可見,采用獨立與可見光的視場,深度圖像是高保真圖像且進行了圖像去噪。
圖1 投射紅外脈沖
本文利用Kinect V2紅外攝像機對場景的深度進行采集來創(chuàng)建實時深度圖,較Kinect V1測得的深度范圍增大了0.5m,分辨率和視野范圍都有較大提高,新增加的紅外線探測功能使得圖像清晰、穩(wěn)定且噪點較少。利用Kinect V2采集的深度圖如圖2所示。
圖2 Kinect實時深度圖
Kinect近紅外攝像機的視場是金字塔形狀的。離攝像機遠的果蔬比近的果蔬擁有更大的視場橫截面積。每個像素的深度值和視場中果蔬離攝像機的距離是對應(yīng)的。Kinect的空間坐標系如圖3所示。
圖3 Kinect空間坐標系
采用棋盤格標定板對彩色相機和深度相機進行標定,圖4為棋盤格標定板在標定過程中的顯示、通過標定過程,來獲得攝像機內(nèi)部參數(shù)、外部參數(shù)和投影矩陣。
標定獲得的深度相機的內(nèi)參數(shù)(Matrix Ir)為
(1)
深度相機的外部參數(shù)的旋轉(zhuǎn)矩陣(Rotation)為
(2)
深度相機的外部參數(shù)的平移矩陣(Translation)為:
(3)
圖4 深度相機和彩色相機的標定
Kinect獲取的深度值是由16位的無符號整數(shù)來表示的。本文通過位運算獲取每一個像素的距離,將每一個像素點對應(yīng)的深度值zw顯示到界面。在計算機視覺中,利用相機的成像模型將三維空間點與二維像素點聯(lián)系起來。某點三維坐標為(xw,yw,zw),像素坐標為(uc,vc),在UI界面添加一個TextBlock,采用鼠標點擊事件MouseLeftButtonUp來觸發(fā)獲得深度圖像中果蔬及機器人的像素坐標。為了得到圖像每一幀的任意一個點的三維坐標值,要從圖像坐標系中轉(zhuǎn)換到相機坐標系下的三維坐標。由相機的成像模型原理可得
(4)
本文將標定獲得的參數(shù)結(jié)合式(1)~式(4),將空間任意一點的三維坐標表示為
(5)
(6)
由式(5)~式(6)得果蔬和機器人的三維坐標為(xw,yw,zw)。
NAO機器人手臂具有5個自由度,對機器人的末端執(zhí)行器采用D-H法進行正運動學分析,可得
(7)
式(7)右邊矩陣為機器人末端的位姿。其中,p為機器人末端位置。采用D-H法對NAO機器人的手臂末端進行逆運動學分析,5個關(guān)節(jié)對應(yīng)的關(guān)節(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參數(shù)如表1所示。
表1 NAO機器人右臂D-H參數(shù)
NAO機器人與人體結(jié)構(gòu)十分相近,符合人抓取的慣用姿態(tài),故取RElbowYaw、RWristYaw及RElbowRoll關(guān)節(jié)坐標的Y值相等,即
py=yRElbowYaw=yRwristYaw=yRElbowRoll
(9)
對機器人的5個關(guān)節(jié)采用D-H算法進行逆運動學分析。由式(7)~(9)可得
(10)
同理,可得θi。機器人逆運動學計算可得5個關(guān)節(jié)分別轉(zhuǎn)動的角度,從而成功摘取果實。圖5為機器人關(guān)節(jié)摘取果蔬時在視圖中的表示。
圖5 機器人的5個關(guān)節(jié)
NAO機器人通過WiFi與計算機進行數(shù)據(jù)傳輸,輸入機器人的IP地址到網(wǎng)頁瀏覽器,即可與計算機進行通信。NAOqi是機器人的控制結(jié)構(gòu),計算機使用本地調(diào)用(LPC)連接到機器人并交換信息,采用ALMemory存儲數(shù)據(jù)并監(jiān)控機器人。本文對機器人采用Python進行編譯,配置環(huán)境變量之后,可以在Python中使用NAOqi的AldebaranSDV,從而成功控制機器人。
Kinect V2采用C#語言進行編譯,讀取深度數(shù)據(jù)幀并復制到相應(yīng)的緩沖區(qū),讀取幀數(shù)據(jù)并建立數(shù)據(jù)文件。本文將采集的圖像數(shù)據(jù)以文件的形式發(fā)送給PC端,機器人讀取PC端的數(shù)據(jù)實現(xiàn)與Kinect的交互,實現(xiàn)數(shù)據(jù)的傳輸。
果蔬采摘系統(tǒng)的流程圖如圖6所示。
圖6 機器人摘取果蔬流程圖
試驗的具體過程如下:
1)Kinect V2設(shè)備放置在水平位置上,獲取果蔬和機器人的深度圖像,并采用過渡RGB顏色來表示不同的深度。
2)采用鼠標點擊事件MouseLeftButtonUp分別獲取果蔬形心三維坐標(xw,yw,zw)及機器人腰部Torso三維坐標(xr,yr,zr),將Kinect獲得的各項參數(shù)以文件的形式發(fā)送給計算機。
3)調(diào)用NAOqi模塊中的walkto(x,y,theta)函數(shù),讀取計算機獲得的三維數(shù)據(jù),機器人根據(jù)數(shù)據(jù)抵達最佳摘取果蔬的位置;再次利用Kinect獲取的機器人三維坐標,并將數(shù)據(jù)反饋給機器人。機器人采用閉環(huán)控制系統(tǒng),若機器人距離最佳摘取目標點誤差超過5mm,則再次利用walkto函數(shù)進行位置調(diào)整。
4)根據(jù)機器人三維坐標,NAO機器人根據(jù)逆運動學得出每個關(guān)節(jié)轉(zhuǎn)動的角度,準確完成摘取果蔬的任務(wù),如圖7所示。
圖7 機器人成功摘取果蔬
Kinect獲取的三維坐標如表2所示。在Kinect進行相機的標定后,測量精度高,誤差保持在2mm之內(nèi),且視覺系統(tǒng)測得的三維坐標速度快,獲取坐標時間只需0.15s。本文利用白色棒代替果蔬進行50次果蔬的采摘實驗,結(jié)果如表3所示。每次實驗機器人的位置與果蔬的位置都不相同,采摘成功率為78%。
表2 Kinect獲取的幾組三維坐標
表3 機器人摘取果蔬統(tǒng)計表
本文采用Kinect視覺設(shè)備獲取深度圖像,在不同光照條件下均可以得到果蔬的深度信息,采用相機的標定提出了一種獲取果實空間坐標的方法,此方法獲取的三維坐標誤差小于2mm,滿足果蔬采摘機器人的誤差要求。此外,本文采用文件的形式進行數(shù)據(jù)傳輸,實現(xiàn)了視覺系統(tǒng)與機器人系統(tǒng)之間的交互。根據(jù)果蔬的三維坐標,采用D-H法對機器人右手手臂進行逆運動學分析,最后末端執(zhí)行器準確抵達果蔬所在位置,成功率較高且耗時短。