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