董陽(yáng),于洪鵬,臺(tái)立鋼,張禹
(1.沈陽(yáng)工業(yè)大學(xué) 機(jī)械工程學(xué)院,沈陽(yáng) 110870;2.中國(guó)科學(xué)院 沈陽(yáng)自動(dòng)化研究所,沈陽(yáng) 110017;3.中國(guó)科學(xué)院 機(jī)器人與智能制造創(chuàng)新研究院,沈陽(yáng) 110169)
近年來(lái),隨著互聯(lián)網(wǎng)、人工智能這些技術(shù)的高速發(fā)展,全世界都處在以科技創(chuàng)新為動(dòng)力的第四次工業(yè)革命浪潮之中,工業(yè)智能機(jī)器人扮演了重要的角色[1]。
本文使用工業(yè)相機(jī)采集目標(biāo)圖像的圖片,對(duì)圖像進(jìn)行預(yù)處理。改進(jìn)了原始的圖像Canny邊緣檢測(cè)算法,仔細(xì)分析了原Canny算法的思路和步驟,結(jié)合實(shí)驗(yàn)場(chǎng)景,改進(jìn)了Canny算法的梯度計(jì)算和雙閾值的選取。獲得目標(biāo)物體輪廓后,利用Hough變換投影法確定目標(biāo)物體的主軸獲取目標(biāo)物體最小面積的外接矩形,確定出目標(biāo)物的抓取位置點(diǎn)。通過(guò)實(shí)驗(yàn)驗(yàn)證了工件定位算法的準(zhǔn)確性。
開(kāi)啟固定位置的工業(yè)相機(jī)采集目標(biāo)工件圖像,對(duì)采集的圖像做預(yù)處理。接著利用文中提出的定位算法計(jì)算出目標(biāo)工件的像素坐標(biāo)。通過(guò)相機(jī)標(biāo)定和手眼標(biāo)定的結(jié)果,將工件抓取位置的像素坐標(biāo)轉(zhuǎn)換為相對(duì)于UR5機(jī)械臂的基坐標(biāo)系的世界坐標(biāo)。最后通過(guò)ROS(機(jī)器人操作系統(tǒng))下的MoveIt平臺(tái),控制機(jī)械臂到達(dá)指定抓取位置,完成工件的夾取操作。抓取任務(wù)的主要部件構(gòu)成如圖1所示,目標(biāo)物體抓取流程如圖2所示。

圖1 目標(biāo)工件抓取系統(tǒng)組成

圖2 目標(biāo)工件抓取流程
工業(yè)環(huán)境的光照均勻度、空氣的灰塵、鏡頭的制造誤差都會(huì)影響到采集目標(biāo)圖像的質(zhì)量。為了減少干擾圖像的信息,必須要對(duì)圖像進(jìn)行預(yù)先處理來(lái)加以改善。圖像預(yù)處理的目的就在于最大程度地保留目標(biāo)物體的有用的特征,弱化影響圖像處理和分析的無(wú)用干擾。
本文選用最大類間方差法自動(dòng)獲取閾值。該方法不會(huì)受到相機(jī)采集到的圖像亮度和對(duì)比度變化的影響,具有較好的抗噪性能。處理效果如圖3所示。

圖3 最大類間方差法
從兩幅圖像中可以看出,圖像經(jīng)過(guò)二值化處理后目標(biāo)圖像的特征更加明顯,有利于下一步的目標(biāo)輪廓檢測(cè)。
1986年John F. Canny開(kāi)發(fā)了Canny邊緣檢測(cè)算法。它使用多階段的算法來(lái)檢測(cè)圖像中廣泛的邊緣[2]。傳統(tǒng)的Canny檢測(cè)算法分為以下4個(gè)步驟:
1)使用高斯濾波器對(duì)原始圖像進(jìn)行去噪處理,提高圖像的質(zhì)量和檢測(cè)的精確性。設(shè)I(x,y)為原始輸入圖像,G(x,y)為高斯函數(shù),S(x,y)為濾波后的圖像結(jié)果。
則有:

2)計(jì)算濾波后圖像的各點(diǎn)梯度幅值和梯度方向。卷積算子如下所示。
計(jì)算圖像水平方向和垂直方向的一階偏導(dǎo)數(shù)H(x,y)、V(x,y),然后計(jì)算出圖像梯度幅值M(x,y)和梯度方向θ(x,y),如下列公式所示:

3)對(duì)計(jì)算得到的梯度幅值進(jìn)行非極大值抑制來(lái)細(xì)化邊緣。
4)雙閾值優(yōu)化圖像邊緣,確定檢測(cè)真實(shí)和潛在的邊緣。
通過(guò)上述4個(gè)步驟的分析可以得知,傳統(tǒng)的Canny檢測(cè)算法存在一些缺陷:計(jì)算高斯濾波后圖像的各點(diǎn)梯度幅值和梯度方向時(shí)[3],卷積算子是2×2的,卷積算子維度小且又是近似計(jì)算,所以易受噪聲干擾和計(jì)算精度差影響,導(dǎo)致檢測(cè)的結(jié)果不夠精確,因此更容易檢測(cè)到偽造邊緣或遺漏掉真實(shí)邊緣[4]。原始的Canny 算法的高低雙閾值是全局固定的,高低雙閾值的選取受人為因素影響較大,需要人工通過(guò)經(jīng)驗(yàn)設(shè)定,找到一個(gè)合適的高低閾值。但是這樣操作費(fèi)時(shí)費(fèi)力,往往不能達(dá)到最優(yōu)的分割效果。
針對(duì)本篇文章視覺(jué)的應(yīng)用場(chǎng)合,對(duì)Canny檢測(cè)算子做出如下改進(jìn),改進(jìn)后的Canny圖像邊緣檢測(cè)算法流程如圖4所示。

圖4 改進(jìn)后的Canny算子邊緣檢測(cè)算法流程
改進(jìn)的Canny 算子邊緣檢測(cè)算法的具體實(shí)現(xiàn)步驟如下:
1)利用Sobel算子的3×3卷積算子代替Canny原有的2×2卷積算子計(jì)算高斯平滑后的圖像的近似梯度。
a.水平方向的圖像卷積操作:

2)基于圖像的梯度的平均值和標(biāo)準(zhǔn)偏差的自適應(yīng)雙閾值。
利用圖像的梯度信息,計(jì)算圖像梯度的均值和方差。圖像的梯度大小反映著邊緣信息的豐富程度。梯度值的平均值反應(yīng)梯度值的分布中心位置,標(biāo)準(zhǔn)偏差反映了梯度值分布的離散程度[5]。一幅圖像的邊緣像素的梯度幅值都很大,通過(guò)梯度值的分布情況確定高低閾值的選擇方法。具體過(guò)程如下:
a.圖像經(jīng)過(guò)非極大值抑制后,統(tǒng)計(jì)出圖像的梯度幅值Grad(x,y),接著計(jì)算出梯度的平均值A(chǔ)veGrad(x,y)和標(biāo)準(zhǔn)差σ:

式(11)和式(12)中的U、V表示為圖像的行數(shù)和列數(shù),式(13)中的K為標(biāo)準(zhǔn)差的系數(shù),K值的大小決定著檢測(cè)邊緣信息的豐富程度。通過(guò)多次實(shí)驗(yàn)得出K=1.2時(shí),本文圖像檢測(cè)效果更佳。此種方法能夠?qū)崿F(xiàn)自適應(yīng)的雙閾值,節(jié)省調(diào)節(jié)參數(shù)的時(shí)間。
為驗(yàn)證本文的改進(jìn)Canny的圖像邊緣檢測(cè)算法的效果,設(shè)定原始Canny算子中的高閾值和低閾值分別為40 和200。原始Canny邊緣檢測(cè)算法和改進(jìn)后的Canny邊緣檢測(cè)算法進(jìn)行邊緣檢測(cè)后的圖像分別如圖5和圖6所示。

圖5 原始Canny算子邊緣檢測(cè)的圖像

圖6 改進(jìn)Canny算子邊緣檢測(cè)的圖像
通過(guò)兩圖的邊緣檢測(cè)效果可以看出,改進(jìn)Canny邊緣檢測(cè)算法獲得目標(biāo)圖像邊緣雜點(diǎn)較少,能夠去除一些偽邊緣。目標(biāo)邊緣的圖像輪廓也比原始Canny算法更加連續(xù),增加了邊緣檢測(cè)的準(zhǔn)確度。而且改進(jìn)后的檢測(cè)算法可以根據(jù)不同的圖像,自動(dòng)地選擇高閾值和低閾值,減少算法調(diào)試時(shí)間。
在工業(yè)環(huán)境中,工件大多都是輪廓形狀不規(guī)則的,一些輪廓檢測(cè)算法,常常得到的只是孤立、不連續(xù)的目標(biāo)輪廓,難以做出準(zhǔn)確的工件輪廓檢測(cè)。所以提出建立目標(biāo)工件的外接矩形,通過(guò)最小外接矩形獲取目標(biāo)工件的抓取信息[6]。
本文提出使用尋找主軸法來(lái)求取最小外接矩形,確定目標(biāo)物體的抓取點(diǎn)和偏轉(zhuǎn)角度。具體的實(shí)現(xiàn)步驟如下:
1)確定目標(biāo)物體的水平主軸和垂直主軸的初始位置和方向。
使用上一節(jié)改進(jìn)的Canny邊緣檢測(cè)算法,檢測(cè)目標(biāo)物體的輪廓。通過(guò)檢測(cè)到的輪廓數(shù)據(jù),利用重心原理,分別計(jì)算輪廓區(qū)域的橫縱坐標(biāo)的像素坐標(biāo)和,得到目標(biāo)物體主軸的起始位置:

2)水平主軸和垂直主軸的方向確定。
為了更加有效地描述目標(biāo)物體的形狀信息,本文使用Hough變換投影法確定目標(biāo)物體的主軸方向,利用圖像空間中共線的點(diǎn)與參數(shù)空間中相交的線存在對(duì)偶性[7],即在圖像空間下直線的方程為y=px+q,將其可轉(zhuǎn)換為在參數(shù)空間下對(duì)應(yīng)的極坐標(biāo)方程ρ=xcos θ+ysin θ。根據(jù)點(diǎn)線的對(duì)偶性,當(dāng)已知圖像空間的一些邊緣點(diǎn),就可通過(guò)Hough變換得到這些邊緣點(diǎn)的直線方程。Hough變換把圖像空間中的直線檢測(cè)問(wèn)題轉(zhuǎn)換到參數(shù)空間里對(duì)點(diǎn)的檢測(cè)問(wèn)題,通過(guò)在參數(shù)空間里進(jìn)行簡(jiǎn)單的累加統(tǒng)計(jì)完成檢測(cè)任務(wù)[8-10]。算法的流程如下:
a.對(duì)目標(biāo)圖像建立合適的平面直角坐標(biāo)系,并將其轉(zhuǎn)換到對(duì)應(yīng)的參數(shù)空間下的極坐標(biāo)系。
b.初始化投影角度φ值、最小極徑λmin和最大極徑λmax值為0。從0°到180°遍歷θ,每次增加1°。將目標(biāo)圖像的所有輪廓點(diǎn)逐個(gè)代入ρ=xcos θ+ysin θ,便可以把圖像上的屬于工件的輪廓點(diǎn)全部轉(zhuǎn)化為極坐標(biāo)。因此λ值會(huì)不斷地更新。比較每個(gè)θ對(duì)應(yīng)的λ值,尋找到非零點(diǎn)對(duì)應(yīng)最小極徑λmin和最大極徑λmax值,求出λmax-λmin的值λθ。
c.更新λθ值,直到求出最小的值為止。將投影軸角度轉(zhuǎn)換為主軸角度,當(dāng)θ大于90°,投影的方向?yàn)棣?90°。反之投影的方向?yàn)棣?90°。
得到的圖像主軸如圖7所示,圖中的直線為所求的目標(biāo)圖像主軸。

圖7 目標(biāo)圖像的主軸
3)獲取長(zhǎng)短軸與輪廓的交點(diǎn)點(diǎn)集并轉(zhuǎn)換為矩形點(diǎn)集。
a.獲得一條起始點(diǎn)為質(zhì)心并沿著主軸角度方向的射線l1,求出射線l1與目標(biāo)圖像輪廓的交點(diǎn)p1,將射線l1旋轉(zhuǎn)180°。得到與l1方向相反的并共線的射線l2,求射線l2與輪廓的交點(diǎn)p2。接著以p1為起始點(diǎn)沿著主軸反方向循環(huán)移動(dòng)一個(gè)單位,得到p1的移動(dòng)點(diǎn)p1m。獲取通過(guò)移動(dòng)點(diǎn)p1m并垂直于主軸長(zhǎng)軸的所有直線,求出直線與目標(biāo)輪廓的交點(diǎn)p11m1和p1m2,尋找兩交點(diǎn)的距離最大值。將兩交點(diǎn)記為p3和p4,則p3p4的長(zhǎng)度為短軸長(zhǎng)度。結(jié)果如圖8所示。

圖8 確定長(zhǎng)度的長(zhǎng)軸和短軸
b.已知長(zhǎng)短軸與輪廓的交點(diǎn)點(diǎn)集{p1,p2,p3,p4},根據(jù)公式

計(jì)算p1沿著主軸角度方向分別旋轉(zhuǎn)±90°,移動(dòng)短軸的1/2長(zhǎng)度,得到矩形頂點(diǎn)T1和T2;計(jì)算p2沿著主軸角度方向分別旋轉(zhuǎn)±90°,移動(dòng)短軸的1/2長(zhǎng)度,得到矩形頂點(diǎn)T3和T4。這時(shí)的T1、T2、T3、T4為初始的外接矩形4個(gè)頂點(diǎn),如圖9所示。

圖9 目標(biāo)物體初始矩形
4)優(yōu)化外接矩形的姿態(tài)。
通過(guò)Hough投影法在做投影的時(shí)候求得的主軸方向會(huì)出現(xiàn)一些誤差,獲取的初始外接矩形沒(méi)有完全將目標(biāo)輪廓包絡(luò)在內(nèi),所得的外接矩形并不是最優(yōu)的。所以本文使用旋轉(zhuǎn)法優(yōu)化外接矩形,判斷矩形是否為最佳。優(yōu)化外接矩形的步驟如下:
a.設(shè)初始的質(zhì)心點(diǎn)M(xˉ,yˉ)為旋轉(zhuǎn)中心,從矩形頂點(diǎn)點(diǎn)集獲取矩形頂點(diǎn)。計(jì)算矩形頂點(diǎn)坐標(biāo)繞中心坐標(biāo)旋轉(zhuǎn)θ角度后的橫坐標(biāo)和縱坐標(biāo)。用以下公式表示:

b.先對(duì)矩形輪廓繞點(diǎn)M逆時(shí)針旋轉(zhuǎn)修正角度β(0°~180°),計(jì)算每次輪廓的面積,如果旋轉(zhuǎn)矩形區(qū)域的輪廓面積小于上次,則更改旋轉(zhuǎn)方向,將旋轉(zhuǎn)方向設(shè)置為順時(shí)針,設(shè)置修正角度為順時(shí)針增量值度數(shù)。如果旋轉(zhuǎn)矩形區(qū)域的輪廓面積不小于上次,則加大修正角度,繼續(xù)優(yōu)化矩形的姿態(tài)。直至搜索到輪廓面積最小為止。若修正角度β超過(guò)180°,則停止旋轉(zhuǎn),不再進(jìn)行優(yōu)化。
5)修正外接矩形的尺寸。
在得到最優(yōu)姿態(tài)的矩形后,矩形的輪廓無(wú)法保證邊緣與目標(biāo)圖像輪廓正好相切,所以需要對(duì)矩形的邊緣進(jìn)行平移操作。
a.從矩形頂點(diǎn)點(diǎn)集獲取V1、V2、V3、V4點(diǎn),尋找V1V4邊與圖像輪廓的偏移值,需要判斷V1V4邊與圖像目標(biāo)輪廓的交點(diǎn)存在的關(guān)系,如果偏移方向?yàn)檫h(yuǎn)離質(zhì)心方向,偏移直線與輪廓無(wú)交點(diǎn),因此減一次偏移值可得到輪廓與偏移直線的相切點(diǎn)的偏移值,則說(shuō)明找到輪廓與偏移直線的相切點(diǎn)。如果偏移方向?yàn)榭拷|(zhì)心方向,偏移直線與輪廓存在一個(gè)交點(diǎn),則說(shuō)明找到輪廓與偏移直線的相切點(diǎn)。同理V1V2、V2V3、V3V4邊的偏移值也可獲得。在得到矩形4條邊與圖形輪廓的相切點(diǎn)的偏移值后,將矩形進(jìn)行平移,得到最終的最小外接矩形ABCD,如圖10所示。

圖10 最小外接矩形形成的過(guò)程
6)目標(biāo)的定位實(shí)現(xiàn)。
通過(guò)上述內(nèi)容的Hough投影主軸法求解出目標(biāo)物體的最小外接矩形,由目標(biāo)的最小外接矩形求得目標(biāo)物體的抓取點(diǎn),如圖11所示。

圖11 目標(biāo)物體的定位
在不考慮相機(jī)的成像有畸變的影響下,簡(jiǎn)化相機(jī)模型,可以將單目相機(jī)獲取圖像的成像過(guò)程看作為小孔成像模型,小孔成像模型可使物體的三維空間坐標(biāo)與圖像平面坐標(biāo)之間呈線性關(guān)系。原理如圖12所示。

圖12 簡(jiǎn)化的相機(jī)小孔成像模型
通過(guò)模型建立世界坐標(biāo)系與像素坐標(biāo)系之間的變換關(guān)系式:

式中:f、dx、dy、u0、v0均為相機(jī)的內(nèi)部參數(shù);Zc為比例因子。
由式(18)可知,若相機(jī)的內(nèi)外參數(shù)已知,則可以求得世界坐標(biāo)系的位置點(diǎn)在相機(jī)的圖像像素下的坐標(biāo)或者圖像像素的坐標(biāo)在世界坐標(biāo)系下的位置點(diǎn)。
相機(jī)標(biāo)定步驟:
1)首先把單目相機(jī)放到固定位置,在相機(jī)的視野范圍內(nèi),依次移動(dòng)標(biāo)定板并拍攝保存標(biāo)定板的當(dāng)前狀態(tài),共拍攝12張圖片,如圖13所示。

圖13 相機(jī)標(biāo)定模板圖片
2)利用OpenCV C++程序提取每個(gè)圖案的角點(diǎn)位置,保存角點(diǎn)位置。
3)開(kāi)始標(biāo)定,求出相機(jī)的內(nèi)外參數(shù)矩陣和畸變系數(shù)k1、k2、p1、p2、k3。
最終的相機(jī)標(biāo)定結(jié)果為:

本次實(shí)驗(yàn)使用UR5機(jī)械臂,Basler相機(jī),標(biāo)定板使用長(zhǎng)×寬為120 mm×120 mm大小的圓點(diǎn)標(biāo)定板。具體的手眼標(biāo)定系統(tǒng)實(shí)驗(yàn)步驟如下:
1)相機(jī)固定在某個(gè)位置上,末端夾爪夾持標(biāo)定板。通過(guò)UR5機(jī)械臂的示教器控制機(jī)械臂移動(dòng)至相機(jī)的視野范圍內(nèi),停留在某一處,此時(shí)從示教器里讀取機(jī)械臂的末端姿態(tài)。
2)機(jī)械臂靜止不動(dòng),保證相機(jī)的視野下的標(biāo)定板圖案清晰且不反光。固定位置的相機(jī)拍攝當(dāng)前姿態(tài)下的標(biāo)定板圖案。
3)在相機(jī)的視野范圍內(nèi),繼續(xù)通過(guò)示教器移動(dòng)機(jī)械臂并改變標(biāo)定板的方位,機(jī)械臂靜止不動(dòng),記錄下示教器的機(jī)械臂末端姿態(tài)。相機(jī)采集對(duì)應(yīng)姿態(tài)下的圖像。一共獲得到14張標(biāo)定圖案,如圖14所示。

圖14 手眼標(biāo)定圖片
手眼標(biāo)定的結(jié)果:

為驗(yàn)證本文圖像處理算法對(duì)目標(biāo)物體定位的效果,選擇螺栓作為抓取對(duì)象。在機(jī)械臂抓取之前,將螺栓隨機(jī)放置在相機(jī)的視野范圍內(nèi)。利用本文的定位算法獲取目標(biāo)工件的抓取位置和偏轉(zhuǎn)角度。
UR5機(jī)械臂的重復(fù)定位精度很高,通過(guò)UR5機(jī)械臂的控制器能夠?qū)崟r(shí)獲取機(jī)械臂末端法蘭盤(pán)中心處的位姿信息,因此利用UR5機(jī)械臂的末端姿態(tài)信息衡量本文定位算法的準(zhǔn)確性。以本文的定位算法得到的位置信息為測(cè)量值。手動(dòng)控制UR5機(jī)械臂的末端工具到達(dá)抓取位置后,以示教器中的位置數(shù)值為標(biāo)準(zhǔn)值。算法計(jì)算的測(cè)量值、機(jī)械臂得到的標(biāo)準(zhǔn)值和誤差值,如表1所示。

表1 視覺(jué)檢測(cè)數(shù)據(jù)
由表1中的內(nèi)容可知,視覺(jué)檢測(cè)的X軸位置的絕對(duì)誤差結(jié)果最大為1.89 mm,Y軸位置的絕對(duì)誤差結(jié)果最大為1.14 mm,Z軸偏轉(zhuǎn)角度最大為2°。絕對(duì)誤差結(jié)果不超過(guò)2 mm,相對(duì)誤差不超過(guò)1%,所以本文的圖像處理算法在控制誤差精度方面較好,滿足系統(tǒng)實(shí)際需求。
接下來(lái)要完成機(jī)械臂對(duì)目標(biāo)工件的抓取實(shí)驗(yàn)。本文借助于MoveIt下的C++程序接口控制機(jī)械臂抓取。3個(gè)長(zhǎng)度和直徑均不同的螺栓隨機(jī)放置。實(shí)現(xiàn)步驟如下:
1)首先初始化MoveIt平臺(tái),設(shè)置Move_Group規(guī)劃組,方便調(diào)用MoveIt平臺(tái)的程序接口。
2)發(fā)布控制Robotiq夾爪的話題“/gripper/cmd”。控制Robotiq 夾爪張開(kāi)至最大。設(shè)置機(jī)械臂的基座為參考坐標(biāo)系。
3)為減少機(jī)械臂運(yùn)動(dòng)求解的誤差,設(shè)置機(jī)械臂允許的誤差不超過(guò)1 mm。并允許機(jī)械臂在運(yùn)動(dòng)求解失敗后,重新進(jìn)行規(guī)劃。
4)將目標(biāo)工件的實(shí)際的位置和偏轉(zhuǎn)角度發(fā)布給機(jī)械臂。執(zhí)行程序控制機(jī)械臂運(yùn)動(dòng)到抓取位置。抓取過(guò)程如圖15所示。機(jī)械臂抓取數(shù)據(jù)如表2所示。

圖15 機(jī)械臂抓取實(shí)驗(yàn)過(guò)程
由表2數(shù)據(jù)可知,該實(shí)驗(yàn)結(jié)果證明了本文提出的基于機(jī)器視覺(jué)工件定位技術(shù)算法具有較好的可行性和準(zhǔn)確性。

表2 機(jī)械臂抓取數(shù)據(jù)
本文基于機(jī)器視覺(jué)技術(shù),以UR5機(jī)械臂為研究對(duì)象,針對(duì)工業(yè)生產(chǎn)中的不規(guī)則工件的輪廓難以定位的問(wèn)題,在ROS平臺(tái)下,提出并實(shí)現(xiàn)了一種聯(lián)合改進(jìn)的Canny邊緣檢測(cè)算法和Hough變換投影法尋找最小外接矩形的定位算法。在UR5機(jī)械臂上利用該算法進(jìn)行了抓取目標(biāo)工件的實(shí)驗(yàn)驗(yàn)證,展示了UR5機(jī)械臂抓取實(shí)驗(yàn)過(guò)程。通過(guò)實(shí)驗(yàn)驗(yàn)證了本文提出的圖像處理算法在控制誤差精度方面較好,滿足系統(tǒng)實(shí)際需求,具有實(shí)際工程的應(yīng)用價(jià)值。