(廣東工業(yè)大學 計算機學院,廣州 510000)
近年來,隨著人工智能的發(fā)展,特別是深度學習技術(shù)對物體識別準確率的提高,機器人通過視覺獲取外部環(huán)境的感知處理各種任務的能力也在逐步提高。機器人得到任務,如何快速而準確地通過視覺從環(huán)境中提取目標、識別物體,通過“手”和“眼”的協(xié)調(diào)合作規(guī)劃機械手的運動是目前機器人研究的熱點之一[1]。而隨著機器人功能的日趨完善,為機器人編寫軟件的工作卻越來越復雜,機器人操作系統(tǒng)(Robot Operating System,ROS)是一種用于機器人的次級操作系統(tǒng),它提供了一種分布式處理框架,針對傳統(tǒng)機器人控制系統(tǒng)面對特定對象時,系統(tǒng)設計工作量大、可移植性差的問題,ROS通過提供統(tǒng)一的軟件平臺,使得代碼重用和模塊化設計變得更加簡便,可顯著提高機器人應用開發(fā)速度[2]。
本文基于ROS系統(tǒng)多模塊松耦合的特性作為統(tǒng)一的設計平臺,將視覺檢測、深度學習、機械臂運動規(guī)劃與物體抓取等技術(shù)相結(jié)合。深度學習進行實時物體檢測,通過手眼標定建立機械臂和相機的空間模型,計算得到待抓取目標的三維坐標,最后完成基于視覺的機械臂抓取系統(tǒng)的研究。
整個系統(tǒng)的構(gòu)成如圖1所示,機器人在接收到任務后,通過視覺傳感器獲取規(guī)劃場景信息,Kinect相機采集圖像,對目標物體進行視覺檢測,同時通過視覺標定建立的相機-機器人-目標物體三維坐標模型,將物體三維位置坐標發(fā)送給機器人,機器人在接收到信息后進行軌跡規(guī)劃處理。
圖1 系統(tǒng)構(gòu)成圖
1)Kinect相機:采用微軟(Microsoft)公司Kinect V1 深度相機,相機分辨率最大為640*480,滿足系統(tǒng)設計要求。
2)光源:采用CCS公司的LED環(huán)形光源,該光源響應時間快,可以獲得高品質(zhì)、高對比度的圖像。
3)電腦主機:配有英特爾(Intel)I7-8700K 處理器(CPU),英偉達(NVIDIA) GTX-1060顯卡的計算機,負責接收Kinect相機采集的圖像,通過算法處理完成物體識別與定位之后,將物體的三維坐標信息發(fā)送給機械臂并控制機械臂的規(guī)劃運動。
4)機器人:采用丹麥Universal Robots公司的UR3型機器人,該機器人采用TCP/IP通訊,具有6個關(guān)節(jié)自由度,延伸半徑 500 mm,重復定位精度為0.03 mm。
圖2 系統(tǒng)硬件結(jié)構(gòu)
相機通過拍攝目標物體的圖像,經(jīng)過目標檢測算法處理之后獲取目標物體相對于相機的位置信息,機器人無法直接進行物體抓取,因此需要建立機器人-相機-目標物體的三維坐標模型,將目標物體的信息轉(zhuǎn)換為三維空間的位姿。軟件系統(tǒng)設計的其中一個難點在于,模型建立后,還需考慮對模型準確性產(chǎn)生影響的因素,因此需要對鏡頭制作過程產(chǎn)生的徑向畸變和在相機組裝過程中產(chǎn)生的切向畸變進行相機標定和手眼標定消除其產(chǎn)生的影響[3]。
如圖3,uov是相機中的像素坐標系,它反映了相機芯片中像素矩陣的排列情況[4]。原點o位于圖像的左下角,坐標軸u、v軸分別與像平面的兩邊平行。由像素坐標與圖像坐標的關(guān)系,可得如下矩陣:
在獲得像素坐標與相機坐標的關(guān)系之后,為了完成相機-目標物體的坐標轉(zhuǎn)換,還需要建立相機坐標與世界坐標的關(guān)系。如圖3所示,由小孔成像模型可知,在攝像機的光心處建立坐標系,Z軸沿光軸方向,X軸沿圖像坐標沿圖像坐標水平增加的方向,在相機坐標系O-XYZ中,空間任意一點M與其圖像點m,M與相機光心O的連線為OM,OM與像平面的交點m即為空間點M在圖像平面上的投影。有如下矩陣表示:
圖3 相機坐標與像素坐標關(guān)系
其中:Z=f,f為相機的焦距,s為比例因子(s不為0),f為焦距(光心到圖像平面的距離),(x,y,z,1)T是空間點P在相機坐標系中的其次坐標。因此可以通過相機坐標系可以建立起世界坐標系與圖像像素坐標系的關(guān)系矩陣:
圖4 圖像坐標與世界坐標轉(zhuǎn)換
在基于機器視覺的物體檢測中,相機與機械臂末端手眼標定的準確性將直接影響到機械臂抓取的精度[5]。手眼標定的目的就是求得相機坐標系到機械臂基坐標系的變換關(guān)系矩陣[6]。
圖5 手眼標定流程
在手眼標定過程中,啟動相機內(nèi)外參標定程序,相機獲取視野內(nèi)標定板的棋盤格圖像。同時啟動機械臂標定程序,相機記錄機械臂末端執(zhí)行器在棋盤格標定板中移動過的位置,標定程序經(jīng)過對記錄的位置進行處理,通過相機坐標系-標定坐標系、機械臂基坐標系-機械臂末端坐標系-標定坐標系矩陣變換等,從而得到機械臂-相機-標定物體坐標系的轉(zhuǎn)換關(guān)系,建立參數(shù)模型。
圖6 手眼標定坐標轉(zhuǎn)換
如圖3,B為機械臂固定基座坐標系,E為機械臂末端坐標系,C為相機坐標系,W是用于標定的棋盤格坐標系,相機坐標系與末端坐標系間無相對運動,棋盤格坐標系W固定不動。手眼標定的目標就是要求得相機坐標系到機械臂基坐標系的變換關(guān)系矩陣:Pb=Rcb*Pc+Tcb, 其中Pc為相機坐標系下的一個坐標點,通過手眼變換關(guān)系可以得到點Pc在機械臂基坐標系下的坐標值,標定的目的是要求出兩個坐標系的變換矩陣Rcb和平移向量Tcb,也可以寫成Pb=Hcb*Pc。
九點標定直接建立相機和機械手之間的坐標變換關(guān)系[7]。控制機械臂末端從標定板上位置1依次移動到位置9,同時相機識別9個點得到像素坐標。對于每一個位置都有:
Pb=He*Pe
(1)
Pc=Hwc*Pw
(2)
Pb=Hcb*Pc
(3)
這樣就得到了9組對應的坐標。公式(2)中Hwc是相機標定得到的世界坐標系與圖像像素坐標系的變換,即棋盤格坐標系到相機坐標系的變換矩陣。通過9組坐標即可求得相機坐標系到機械臂的基坐標系的變換關(guān)系矩陣Hcb。
傳統(tǒng)的目標檢測大多采用OpenCV模板匹配或者如方向梯度直方圖(histogram of oriented gradient, HOG)、尺度不變特征變換 (scale-invariant feature trandform,SIFT)的方法,模板匹配原理是通過在輸入圖像image上滑動圖像塊,對實際的圖像塊和模板圖像templ進行匹配[8-9]。這種方式的缺點是由于模板匹配采用的是像素點的匹配,并且受環(huán)境光照等的限制較大,所以一旦當識別的種類增加或者外部環(huán)境變化時,模板匹配的效果并不理想。
目前,基于深度學習的目標檢測在性能上的表現(xiàn)明顯超出了傳統(tǒng)的目標檢測算法,對比于手工設計的特征,基于深度學習的目標檢測能夠進行自主學習,題圖不同層級的特征圖,使檢測性能大幅度提高。而SSD(Single Shot Multibox Detector)是一種基于卷積神經(jīng)網(wǎng)絡的端到端(end-to-end)目標檢測算法[10]。SSD算法滿足數(shù)據(jù)處理的效率、性能、速度和智能化等各個方面要求,與Faster RCNN[11]相比,SSD不再需要 RPN(Region Proposal Network)來生成候選區(qū)域 ROIs,SSD采用CNN來直接進行檢測,另外SSD網(wǎng)絡可以提取不同尺度的特征圖進行檢測,這使SSD在檢測小目標物體上具有良好的性能。因此,SSD 算法很好地改善了檢測速度,更能滿足目標檢測的精確性要求[12]。
SSD采用VGG16作為基礎模型,然后在VGG16網(wǎng)絡的基礎上新增了卷積層來獲得更多的特征圖用于檢測,SSD將VGG16的fc6和fc7兩個全連接層換成兩個卷積層,并去除VGG16的dropout層和分類層,最后通過非極大值抑制(NMS)得到最終檢測結(jié)果[13]。
本系統(tǒng)采用SSD算法進行物體檢測,并通過獲得的相機坐標系到機械臂的基坐標系的變換關(guān)系矩陣計算物體坐標,為后續(xù)機器人抓取規(guī)劃提供可靠信息。本文使用自建的數(shù)據(jù)集對目標檢測算法進行訓練與評估,數(shù)據(jù)集中包含1 800張原始圖片用于訓練與驗證,另外包含200張圖片用于測試。為了提高訓練的準確性,數(shù)據(jù)集使用隨機改變圖片亮度、對比度、灰度化處理以及對原始圖片進行剪切的方法進行數(shù)據(jù)增強,并且數(shù)據(jù)集中包含大量目標物重疊等復雜背景。算法的一般步驟為:
圖7 目標檢測處理流程
1)對相機實時獲取到的視頻幀進行去噪、隔幀采樣等處理,為了提高檢測的實時性,再對圖像進行灰度化處理。
2)對預處理后的圖像輸入神經(jīng)網(wǎng)絡,經(jīng)過SSD算法處理框選出物體在圖像中的像素位置。
3)通過標定建立的三維模型,將像素轉(zhuǎn)換為相機坐標,通過與世界坐標轉(zhuǎn)換得到物體的三維坐標。
4)將物體的三維坐標信息通過ROS通訊機制發(fā)送給機械臂,機械臂控制算法進行規(guī)劃運動。
運動規(guī)劃是指移動機械臂在解空間中通過算法和約束條件等操作避開障礙物,找到一條具有最優(yōu)解的機器人運動路徑[14]。
傳統(tǒng)的路徑規(guī)劃算法,如人工勢場法、遺傳算法、模擬退火算法以及其它智能優(yōu)化算法,由于需要在機器人解空間內(nèi)進行建模,因此在機器人自由度增多時計算的復雜度成指數(shù)上升,傳統(tǒng)的算法并不適合多自由度機器人在復雜環(huán)境條件下的規(guī)劃[15]。
基于快速擴展隨機樹(RRT / rapidly exploring random tree)的路徑規(guī)劃算法,是一種在高維空間中效率很高的路徑規(guī)劃算法,RRT的思想的快速像樹一樣擴張從而尋找到最優(yōu)的路徑。
RRT 的基本步驟是:
1) 起點作為一顆種子,從它開始進行隨機搜索;
2) 在機器人的解空間中,隨機生成一個點Xrand;
3)在樹上找到與Xrand最近的點,記為Xnearest;
4)連接Xrand和Xnearest,朝著樹的方向生長,如果沒有碰到障礙物就把生長后的Xnearest添加到樹上,返回步驟 2);
隨機點Xrand一般是均勻分布的,所以沒有障礙物時樹會近似均勻地向各個方向生長,這樣可以快速探索空間。RRT算法通過對狀態(tài)空間中的采樣點進行快速的碰撞檢測,避免了對空間的建模有效地解決了高維空間和復雜約束的路徑規(guī)劃問題[16]。
機械臂的運動軌跡的規(guī)劃是通過ROS中的moveIT!包實現(xiàn)的,本系統(tǒng)使用RRT算法,在ROS平臺上結(jié)合使用UR3機械臂對通過相機進行轉(zhuǎn)換后的三維物體坐標進行運動規(guī)劃控制。
通過基于深度學習的視覺檢測算法得到物體的在相機中的圖像坐標,利用標定建立的參數(shù)化模型計算物體的三維坐標,然后將物體的世界坐標映射到機器人的基礎坐標系中得到物體在機器人基礎坐標系中的位置,系統(tǒng)操控機器人進行軌跡規(guī)劃與目標物體的抓取。實驗采用將機器人對同一目標物體在不同位置進行抓取,隨機測試3個不同的位置點,每個位置點讓機器人進行8次規(guī)劃。機器人定位精度為0.03 mm,實驗表明,機器人可以準確地抓取目標物體,本系統(tǒng)具有較高的定位精度,能夠滿足一般工業(yè)的生產(chǎn)制作要求。抓取實驗如圖8所示。
圖8 抓取實驗測試
圖8(a)為相機中SSD算法檢測到目標物體,通過事先建立好的相機-機器人-目標物體參數(shù)模型計算出目標物體的三維坐標,然后在計算機中通過運動規(guī)劃算法模擬出機器人的運動軌跡,圖8(b)為機器人按照運動軌跡進行目標物體的抓取。
圖9(a)是采用傳統(tǒng)的模板匹配算法進行目標物體檢測,在與基于深度學習的SSD目標檢測算法對比中,SSD算法表現(xiàn)出了優(yōu)秀的目標檢測能力。在復雜的背景條件下,SSD算法依然表現(xiàn)出了很強的識別能力,而且算法的實時性也滿足系統(tǒng)設計的要求。
圖9 傳統(tǒng)算法與SSD算法比較圖
實驗隨機選擇3個位置點,每個位置點測試8組數(shù)據(jù),比較目標物體在圖像坐標和世界坐標的坐標值。結(jié)果如表1和表2所示。
表1 位置1實驗結(jié)果對比
表2 位置2實驗結(jié)果對比
實驗數(shù)據(jù)均來自于實驗室ur3機械臂和Kinect雙目相機。以上數(shù)據(jù),左側(cè)數(shù)據(jù)展示的是物體在圖像里的坐標,右側(cè)數(shù)據(jù)展示 的是經(jīng)過標定模型轉(zhuǎn)換后得到的物體在世界坐標的位置。經(jīng)過測試,圖像坐標誤差在1.2 px內(nèi),反映到物體實際坐標滿足實驗要求。
本系統(tǒng)基于機器視覺的目標物體進行識別定位與抓取,在機器人操作系統(tǒng)ROS中進行開發(fā),通過對本系統(tǒng)建立的相機-機器人-目標物體的參數(shù)化模型,能夠準確識別并且定位目標物體的位置坐標,結(jié)合機器人的運動規(guī)劃RRT算法,最后系統(tǒng)控制機器人能夠準確抓取目標物體。實驗證明,該系統(tǒng)具有比較高的定位精度,而且基于ROS進行開發(fā),具有較高的可擴展性,便于針對不同的需求進行二次開發(fā),滿足工業(yè)生產(chǎn)的要求,對于提高工業(yè)自動化水平具有重要的意義。
表3 位置3實驗結(jié)果對比