李世裴, 李春琳, 韓家哺, 朱新龍
(上海工程技術(shù)大學(xué) 機(jī)械與汽車工程學(xué)院, 上海 201600)
機(jī)器人抓取技術(shù)是指機(jī)器人從復(fù)雜的實際環(huán)境中通過相機(jī)識別出目標(biāo)物體[1],完成對目標(biāo)物的定位,進(jìn)而進(jìn)行抓取操作。目標(biāo)檢測作為最核心問題之一,是一種基于目標(biāo)幾何和統(tǒng)計特征的圖像分割技術(shù)[2],尤其在復(fù)雜場景中進(jìn)行處理時,目標(biāo)檢測的準(zhǔn)確性和快速性顯得尤其重要。傳統(tǒng)視覺[3]利用圖像的幾何特征、顏色特征、局部特征等來進(jìn)行圖像的特征提取,這種方法無法檢測多種目標(biāo)物,也無法模擬真實的復(fù)雜工業(yè)環(huán)境,將深度學(xué)習(xí)與圖像相結(jié)合[4],可以取得很好的效果,深度學(xué)習(xí)在圖像上具有很高的特征提取能力[5],能快速有效地對深度圖像進(jìn)行特征提取,將特征進(jìn)行一系列的處理,最后輸出完成對目標(biāo)物的分類和定位[6]。Navneet Dalal等人使用描述方向梯度直方圖的HOG[7]將圖像邊緣信息和形狀信息由梯度信息描述,并使用線性SVM[8]作為分類器完成對目標(biāo)物的提取,這種方法可以完成對單個物體的識別,這種基于機(jī)器學(xué)習(xí)的目標(biāo)檢測方法為目標(biāo)檢測提供了一種新的思路,但是這種方法僅僅局限于一種物體,且在復(fù)雜的工業(yè)場景下,難以實現(xiàn)對目標(biāo)物的精準(zhǔn)識別。夏晶等[9]提出一套基于Mask R-CNN的目標(biāo)檢測方法提取三維場景中的可抓取區(qū)域,利用深度學(xué)習(xí)完成對目標(biāo)物的精準(zhǔn)識別具有重大意義,它標(biāo)志著機(jī)器人技術(shù)與深度學(xué)習(xí)的結(jié)合,這種利用深度學(xué)習(xí)對目標(biāo)進(jìn)行定位的機(jī)器人定位技術(shù)在深度檢測上具有較大的誤差,這些機(jī)器人抓取定位技術(shù)存在著定位精度不足,或者無法滿足對深度精確度的要求?;蛘咧荒芡瓿蓪σ环N物體的定位,當(dāng)目標(biāo)物種類變多或者工業(yè)場景發(fā)生改變,這些方法的定位便難以完成。牛津大學(xué)計算機(jī)視覺組提出構(gòu)建VGGNet-16等深度學(xué)習(xí)模型[10]應(yīng)用于SSD(Single Shot MultiBox Detector)深度學(xué)習(xí)模型中,能夠達(dá)到目標(biāo)檢測的精度和速度。將這個模型基于機(jī)器人抓取實際場景,與深度模型結(jié)合,完成對深度和像素位置的雙重精準(zhǔn)定位,通過深度模型對多種不同物體進(jìn)行精準(zhǔn)識別,完成對目標(biāo)物深度的精準(zhǔn)測量,二者在視覺系統(tǒng)中完成協(xié)作,相互通訊,通過完成對目標(biāo)物的精準(zhǔn)定位。這種方法的精確度高,誤差在毫米級別,并且可以適應(yīng)多種不同環(huán)境,具有很強(qiáng)的魯棒性。
依托搭建的協(xié)作機(jī)器人抓取視覺檢測系統(tǒng),提出通過雙目相機(jī)采集目標(biāo)物的圖像,經(jīng)過數(shù)據(jù)擴(kuò)增,創(chuàng)建數(shù)據(jù)集,從而研究目標(biāo)檢測和機(jī)器人抓取技術(shù)。通過將采集的圖像輸送至單步多目標(biāo)檢測模型[11]中進(jìn)行訓(xùn)練,完成對目標(biāo)物的平面定位實驗。通過雙目測距原理完成對目標(biāo)物的深度定位實驗。由相機(jī)標(biāo)定[12]和手眼標(biāo)定[13]獲取目標(biāo)物的機(jī)器人基坐標(biāo)位置信息,在機(jī)器人操作平臺ROS[14]中建立機(jī)器人與上位機(jī)通訊之后,將獲取到的機(jī)器人基坐標(biāo)信息發(fā)送給ROS。
如圖1所示,雙目相機(jī)固定安裝在工作空間正上方,工作空間中放置各種類的目標(biāo)物,三手指靈巧手安裝在協(xié)作機(jī)器人末端。雙目相機(jī)經(jīng)過相機(jī)標(biāo)定后,采集圖像輸送至單步多目標(biāo)檢測器,完成訓(xùn)練識別出目標(biāo)物類別和像素坐標(biāo),同時雙目相機(jī)根據(jù)雙目測距原理建立模型,輸出得到目標(biāo)物的深度。像素坐標(biāo)和深度坐標(biāo)信息通過手眼標(biāo)定轉(zhuǎn)換到機(jī)器人基坐標(biāo)。在ROS中建立機(jī)器人與上位機(jī)的通訊,將機(jī)器人基坐標(biāo)信息發(fā)送給ROS。
圖1 機(jī)器人抓取視覺檢測系統(tǒng)實驗平臺
機(jī)器人視覺系統(tǒng)由雙目相機(jī)、相機(jī)標(biāo)定系統(tǒng)和手眼標(biāo)定系統(tǒng)構(gòu)成,主要完成像素坐標(biāo)和目標(biāo)點(diǎn)的深度計算,并轉(zhuǎn)換為機(jī)器人基坐標(biāo),經(jīng)過視覺系統(tǒng)轉(zhuǎn)換的坐標(biāo)點(diǎn)會提供給ROS。
圖2 理想相機(jī)成像模型
P為空間中一點(diǎn),f為相機(jī)焦距,b為兩個相機(jī)之間的間距,z為P點(diǎn)到雙目相機(jī)的深度。根據(jù)三角形相似定律:
由上解得:
由視差d=xl-xr可得
(1)
由式(1)推導(dǎo)可知,左右相機(jī)之間的間距b和焦距f是相機(jī)本身的參數(shù),數(shù)值也是固定的,相機(jī)中的唯一變量是d,故雙目相機(jī)測距的核心問題是計算左右相機(jī)的視差,即左相機(jī)的每個像素點(diǎn)(xl,yl)和右相機(jī)中對應(yīng)點(diǎn)(xr,yr)的對應(yīng)關(guān)系。
(2) 極線約束和圖像矯正技術(shù)。相機(jī)坐標(biāo)系與目標(biāo)物構(gòu)成的三維坐標(biāo)系中,目標(biāo)物P點(diǎn)與左右相機(jī)的中心點(diǎn)(c1,c2)形成三維空間中的一個平面Pc1c2,這個平面稱為極平面。極平面與左右圖像相交的兩條直線稱之為極線,對于在左圖像中的P點(diǎn),尋找到在右圖像中的對應(yīng)點(diǎn),便可求解出P點(diǎn)的深度,極線約束就是當(dāng)同一個空間點(diǎn)在兩幅圖像上分別成像時,已知左圖投影點(diǎn)p1,那么對應(yīng)右圖投影點(diǎn)p2一定在相對于p1的極線上,這樣可以極大的縮小匹配范圍。如圖3所示,可以直觀地看到,沿著極線搜索,最終可以找到與左圖像對應(yīng)的點(diǎn)p2。
圖3 極線約束
但是在有些場景下兩個相機(jī)獨(dú)立固定,和c2不會完全水平,即使是固定在同一個基板上也會因為裝配的原因?qū)е耤1和c2不完全水平,圖像校正技術(shù)就是通過分別對兩張圖片求單應(yīng)矩陣得到的,這種技術(shù)把兩個不同方向上的圖像平面重新投影到一個平面且光軸相互平行,將非理想情況下的模型變成理想模型。
相機(jī)標(biāo)定是完成雙目測距的必要條件,使用張正友標(biāo)定法,打印一張棋盤格標(biāo)定板,雙目相機(jī)從至少3個方向采集標(biāo)定板的照片,就可以求出左右相機(jī)的內(nèi)外參數(shù)和雙目相機(jī)的徑向畸變K1,K2,K3和切向畸變P1,P2?;趏pencv將采集的圖像裁剪為左右兩張圖像,調(diào)用matlab中的stereo Camera Calibrator函數(shù),輸入棋盤格單位格大小以及裁剪完的圖像,便可求解出相機(jī)內(nèi)外參數(shù)及畸變參數(shù)。如表1所示,為雙目相機(jī)標(biāo)定的過程與結(jié)果。Rot代表相機(jī)2相對于相機(jī)1的旋轉(zhuǎn)矩陣,Trans代表相機(jī)2相對于相機(jī)1的偏移矩陣。
表1 雙目相機(jī)標(biāo)定結(jié)果
圖4 手眼標(biāo)定模型
通過求解不同位置時相機(jī)外參和機(jī)器人工具坐標(biāo)系相對于機(jī)器人基坐標(biāo)系的關(guān)系來求出相機(jī)坐標(biāo)系相對于機(jī)器人基坐標(biāo)系的關(guān)系。基于選取的手眼標(biāo)定類型為眼在手,手眼變換矩陣為:
(2)
(3)
(4)
可得:
AX=XB
(5)
手眼標(biāo)定的主要問題就是求解如式(5),opencv提供5種方法求解AX=XB,選擇Tsai兩步法速度最快,通過C++定義一個手眼標(biāo)定函數(shù)calibrateHandeye(),輸入機(jī)器人末端相對于機(jī)器人基坐標(biāo)系的旋轉(zhuǎn)矩陣與平移向量,標(biāo)定板相對于雙目相機(jī)的齊次矩陣,計算出手眼矩陣。在深度坐標(biāo)上,基于雙目相機(jī)測距原理,建立一個雙目測距模型,通過輸入像素坐標(biāo)便可得對應(yīng)的深度。
SSD(Single Shot MultiBox Detector)是一種單步多目標(biāo)檢測器,單步多目標(biāo)檢測器采用不同的尺度在不同的位置進(jìn)行密集采樣,用CNN得到的特征提取直接進(jìn)行分類和回歸。
在被SSD處理之前,圖像數(shù)據(jù)會被轉(zhuǎn)化為 300*300 的尺寸,SSD首先會經(jīng)過VGG-16卷積神經(jīng)網(wǎng)絡(luò)的前5個卷積組,每個卷積組都由卷積層和池化層構(gòu)成,SSD使用Astrous算法將第6層和第7層全連接層轉(zhuǎn)換為卷積層,接著再通過3個尺寸不同的卷積組和一個平均池化層檢測不同尺寸的物體。再每個卷積神經(jīng)網(wǎng)絡(luò)輸出對應(yīng)的特征圖后,卷積濾波器會產(chǎn)生不同的預(yù)測,得到大量的回歸框,SSD使用NMS(非極大值抑制)的方法來去除大量的重復(fù)框,當(dāng)閾值設(shè)定為0.01后,候選框便被消除掉,節(jié)約了大量計算,他將所有的計算封裝在單個網(wǎng)絡(luò)中,使得速度明顯加快。
在對機(jī)器人視覺系統(tǒng)搭建之后,使用相機(jī)采集了9種目標(biāo)物體在不同的位姿情況下的圖像。由于采集的圖像數(shù)量達(dá)不到理想的數(shù)量,通常會采用一些方法去擴(kuò)充這些圖像,進(jìn)而擴(kuò)大樣本集,防止過擬合的出現(xiàn)。接著需要對擴(kuò)充后的樣本集進(jìn)行標(biāo)注,此時樣本集中的有效信息將會被進(jìn)一步提取,經(jīng)過訓(xùn)練最終生成SSD目標(biāo)檢測模型,完成目標(biāo)檢測的任務(wù)。
3.2.1 樣本集的制作
深度學(xué)習(xí)中要在大型數(shù)據(jù)集上進(jìn)行訓(xùn)練,優(yōu)化相應(yīng)的參數(shù)最終得到一個合適的模型。如圖5所示,在實際實驗中選取了9種工業(yè)中常見機(jī)械部件(軸承、螺釘?shù)?。
圖5 實驗中所用的9種機(jī)械部件
3.2.2 樣本集的標(biāo)注
在訓(xùn)練SSD目標(biāo)檢測模型中需要對目標(biāo)物進(jìn)行標(biāo)注,讓計算機(jī)知道目標(biāo)物的類別和目標(biāo)物的像素坐標(biāo)位置。使用LabelImg標(biāo)注工具來對950張圖像進(jìn)行標(biāo)注,標(biāo)注的最終結(jié)果保存在“.xml”文件下,“.xml”下包含樣本集的所有信息。
完成標(biāo)注工作之后,要對數(shù)據(jù)集進(jìn)行劃分,將數(shù)據(jù)集劃分為訓(xùn)練集、測試集和驗證集。使用python編寫一個劃分的腳本,腳本按照設(shè)置的比例自動拆分訓(xùn)練集、測試集和驗證集最終生成以.txt結(jié)尾的文件。實驗選取基于Tensorflow深度學(xué)習(xí)框架的Object Detection API訓(xùn)練目標(biāo)檢測模型,其中的create_pascal_tf_record.py程序?qū)?shù)據(jù)集最終轉(zhuǎn)換為TFRecord格式。
3.2.3 SSD模型的訓(xùn)練
SSD模型訓(xùn)練首先要進(jìn)行實驗?zāi)P偷念A(yù)訓(xùn)練,選擇SSD-300 VGG-based作為預(yù)訓(xùn)練模型,編寫模型訓(xùn)練配置文件,修改相應(yīng)的訓(xùn)練則值為NCHW,在NVIDIA 1080TI的GPU環(huán)境下運(yùn)行conda進(jìn)行模型的訓(xùn)練。設(shè)置初始學(xué)習(xí)率0.000 6,訓(xùn)練次數(shù)為45 000次。使用TensorFlow中的TensorBoard可以完成對訓(xùn)練過程可視化,查看模型訓(xùn)練情況,模型的損失值隨著訓(xùn)練次數(shù)的增加逐漸減小。最后利用Object Detection API中的python腳本將模型結(jié)構(gòu)以及參數(shù)相關(guān)的文件轉(zhuǎn)化為PB可執(zhí)行文件。
在ROS平臺中完成SSD目標(biāo)檢測模型的搭建,則需要先創(chuàng)建detect_ros節(jié)點(diǎn),這個節(jié)點(diǎn)集成了SSD目標(biāo)檢測的PB文件、Object Detection API以及數(shù)據(jù)集的TFRecord文件,對相機(jī)中的圖像數(shù)據(jù)進(jìn)行檢測,將置信度、回歸框、坐標(biāo)中心等信息發(fā)布對話,完成訂閱便能得到置信度、回歸框、坐標(biāo)中心。
在目標(biāo)檢測實驗中,取出9個目標(biāo)物中的4種不同物體進(jìn)行實驗,用訓(xùn)練好的SSD模型進(jìn)行檢測,SSD模型會輸出每個物體的回歸框、編號、置信度。每個編號的回歸框也用不同顏色表示,如圖6所示。
圖6 目標(biāo)檢測結(jié)果
SSD在輸出矩形框的同時,會輸出矩形框的四點(diǎn)像素坐標(biāo),如圖7所示,根據(jù)坐標(biāo)位置可以確定目標(biāo)物的中心點(diǎn),物體的中心點(diǎn)經(jīng)過雙目測距模型可得目標(biāo)物的深度,實驗使用HBV-1780雙目相機(jī),相機(jī)參數(shù)如下:焦距2.1 mm,F(xiàn)OV為100°,相機(jī)間距60 mm,分辨率2 560*720。實驗選擇了4個位置,其像素坐標(biāo)分別為(540,270)、(550,300)、(690,260)、(700,330),將9種不同的物體分別放置在這4個位置,通過目標(biāo)檢測系統(tǒng)得到的像素坐標(biāo)平均值(Xm,Ym)與真實像素坐標(biāo)(Xr,Yr)的偏移量來計算x方向上和y方向上的絕對誤差,結(jié)果如表2所示。通過雙目測距模型得到的深度Zm和真實的深度平均值Zr來計算深度方向上的絕對誤差,結(jié)果如表3所示。
圖7 雙目測距結(jié)果
表2 像素坐標(biāo)平均值與方差
表3 深度測量平均值
試驗最終結(jié)果表明:整個抓取檢測系統(tǒng)能夠快速準(zhǔn)確地測量出多個物體在平臺的像素坐標(biāo)和深度值,且具有同時檢測多個目標(biāo)物的能力,像素坐標(biāo)位置誤差在3.5 mm以內(nèi),深度誤差在1.2 mm之內(nèi),整體定位誤差較小,可以滿足抓取操作的要求。
(1) 針對機(jī)器人抓取技術(shù)難以適應(yīng)真實工業(yè)環(huán)境的問題,面向機(jī)器人抓取給出了一種雙目視覺單步多目標(biāo)檢測方法。
(2) 采用單步多目標(biāo)檢測器替代傳統(tǒng)視覺檢測器檢測多種物體,獲得類別、回歸框、置信度,對獲得的回歸框進(jìn)一步處理獲取目標(biāo)物的中心點(diǎn)。
(3) 通過目標(biāo)檢測實驗表明,測試集表現(xiàn)良好,方法的目標(biāo)檢測誤差在3.5 mm以內(nèi),深度誤差在1.2 mm之內(nèi),具有很好的應(yīng)用推廣價值。下一步單步多目標(biāo)檢測算法可進(jìn)一步優(yōu)化,進(jìn)一步對像素坐標(biāo)的偏差進(jìn)行修正。