張 然, 郭海平, 謝靜遠, 周文鑫
(上海船舶工藝研究所, 上海 200032)
隨著工業(yè)機器人的快速發(fā)展,在船舶制造業(yè)、汽車制造業(yè)、鑄造業(yè)等重型制造業(yè)內(nèi),對零部件、工件的打磨處理作業(yè)已經(jīng)由傳統(tǒng)的人工作業(yè)模式轉(zhuǎn)變?yōu)橐怨I(yè)機器人為主導、視覺檢測為輔助的智能作業(yè)模式。智能打磨裝備在這些領域已經(jīng)得到廣泛應用[1]。視覺系統(tǒng)作為智能打磨裝備的重要組成部分,承擔著對打磨對象的檢測與識別功能,視覺檢測與識別算法的精度與速度直接影響打磨作業(yè)的完成質(zhì)量與效率。目前,智能打磨裝備的視覺系統(tǒng)主要基于2D圖像進行視覺識別,即利用電荷耦合器件(Charge-coupled Device, CCD)或互補金屬氧化物半導體(Complementary Metal Oxide Semiconductor, CMOS)相機,獲取打磨對象的圖像信息,利用灰度分析或圖像邊緣分析算法,對打磨對象進行特征檢測與識別[2-3]。這類視覺系統(tǒng)的檢測精度主要依賴圖像質(zhì)量,對相機的分辨率、現(xiàn)場光源環(huán)境等都有較高要求。還有一部分智能打磨裝備視覺系統(tǒng)采用線激光型傳感器,對打磨對象進行在線掃描和三維重構,為了保證掃描重構的質(zhì)量,線激光型傳感器的掃描速度一般較慢,打磨裝備的工作效率被限制[4]。
隨著雙目視覺和結構光技術的發(fā)展,深度相機已經(jīng)成為傳統(tǒng)圖像傳感器、激光類傳感器后的又一種視覺傳感器。深度相機因其較高的檢測精度與快速的數(shù)據(jù)處理速度,在無人駕駛、定位建圖領域已經(jīng)受到廣泛應用[5-6]?;诠I(yè)深度相機,針對船舶小構件智能打磨裝備,對其視覺系統(tǒng)進行算法設計,并完成視覺系統(tǒng)各算法模塊的功能實現(xiàn),為整套船舶小構件智能打磨裝備的高效高質(zhì)量提供可靠的視覺數(shù)據(jù)支撐。
船舶小構件自由邊智能打磨裝備是針對肘板、補板等小型船舶結構件設計的整套物料搬運、打磨作業(yè)的機器人工作站,構成高產(chǎn)能、高精度、高質(zhì)量的自動化生產(chǎn)單元,以滿足船廠的自動化打磨作業(yè)。智能打磨裝置的視覺系統(tǒng)主要承擔工件搬運及打磨前的視覺識別功能,基于深度相機完成對待搬運及待打磨工件的三維掃描、關鍵信息提取等作業(yè),為后續(xù)自動搬運與自動打磨提供準確全面的視覺信息。
智能打磨裝備的視覺識別系統(tǒng)按照算法功能主要分為3個算法模塊,分別為位姿估計及坐標變換模塊、工件搬運視覺模塊和工件打磨視覺模塊。視覺識別系統(tǒng)算法模塊框架設計如圖1所示。
圖1 視覺識別系統(tǒng)算法模塊框架
(1) 位姿估計及坐標變換模塊。該算法模塊主要用于實現(xiàn)視覺系統(tǒng)內(nèi)部的坐標建立及各坐標系間的坐標變換,包括建立標記坐標系,計算傳感器坐標系與標記坐標系間的變換矩陣,儲存運算得出的變換矩陣結果,為后續(xù)模塊提供計算依據(jù)。
(2) 工件搬運視覺模塊。該算法模塊主要承擔裝備搬運環(huán)節(jié)的視覺識別工作,包括對上料平臺上的工件進行掃描,獲取點云信息,將工件點云進行分割,對每個工件點云進行質(zhì)心計算與質(zhì)心坐標提取,并將質(zhì)心坐標上傳至上位機,為機器人執(zhí)行搬運作業(yè)提供視覺數(shù)據(jù)。
(3) 工件打磨視覺模塊。該算法模塊主要承擔裝備打磨環(huán)節(jié)的視覺識別工作,包括對打磨平臺上的工件進行掃描,獲取點云信息,將工件點云進行分割,對工件點云進行邊緣識別,提取工件邊緣點云,將邊緣點坐標上傳至上位機,為機器人執(zhí)行打磨作業(yè)提供視覺數(shù)據(jù)。
深度相機通常由普通的RGB彩色攝像頭、雙目紅外攝像頭和脈沖或光線發(fā)射、接收器等部件構成,因此深度相機又名RGB-D相機或主動雙目視覺相機,即在獲取普通彩色圖像的同時,可以獲得圖像中每個像素的深度信息,且相對于僅依靠雙目視差(被動雙目視覺)獲取深度信息的普通雙目視覺相機,深度相機依靠紅外結構光(Structured Light, SL)或飛行時間(Time-of-Flight,TOF)法原理,主動進行深度測量。其原理如圖2所示。
圖2 深度相機原理示例
SL型深度相機向探測目標發(fā)射一束光線,并根據(jù)返回的SL圖案,計算物體與自身之間的距離;TOF深度相機則向目標發(fā)射脈沖光,根據(jù)發(fā)送與返回之間的TOF,確定探測物體的距離。從原理上看,TOF型深度相機與傳統(tǒng)的激光型傳感器相似,但傳統(tǒng)的激光型傳感器通過逐點掃描獲取距離,而TOF型深度相機則可一次性獲取整個圖像中每個像素點的距離信息,大幅縮短掃描時間,提高視覺識別效率。
同時,在測量深度之后,深度相機會按照生產(chǎn)時各攝像頭的擺放位置自動完成深度信息與彩色圖像間的匹配,輸出一一對應的深度圖像與彩色圖像,同時計算像素點的3D坐標,生成3D點云。對深度相機采集的數(shù)據(jù),既可在圖像層面進行圖像處理,又可在點云層面進行點云處理,顯著豐富了信息的完整度。
智能打磨設備的視覺識別算法,基于圖漾PM801工業(yè)TOF深度相機進行設計,其結構如圖3所示,該深度相機采用主動雙目技術,包括雙目紅外攝像頭、RGB彩色攝像頭和光學增強系統(tǒng),可輸出RGB彩色圖像、深度圖像、三維點云等多種數(shù)據(jù)結構。為驗證視覺識別算法,基于新松SR210D機械手,搭建算法試驗平臺,如圖4所示,深度相機安裝于機械手端部,機械手下方放置工件:當放置多塊工件時,模擬上料平臺;當放置單個工件時,模擬打磨平臺。
圖3 圖漾PM801工業(yè)TOF深度相機
圖4 算法試驗平臺
智能打磨裝置視覺識別系統(tǒng)的位姿估計與坐標變換主要作用:使用Aruco_marker標記,在上料平臺與打磨平臺上分別設置坐標系,定義為標記坐標系Cmarker,通過Aruco_marker檢測算法進行相機位姿估計,獲取從標記坐標系Cmarker至圖像坐標系Crgb之間的轉(zhuǎn)換矩陣Tmarker,rgb;深度相機獲取的工件點云位于點云坐標系Cpcl中,從點云坐標系至圖像坐標系之間的轉(zhuǎn)換矩陣Tpcl,rgb為傳感器參數(shù)中的已知信息,結合相機位姿估計所得Tmarker,rgb,可將工件點云從點云坐標系轉(zhuǎn)換至上料平臺或打磨平臺上的標記坐標系Cmarker,進行下一步點云處理流程。位姿估計與坐標變換示例如圖5所示。
圖5 位姿估計與坐標變換示例
在一般情況下,點云數(shù)據(jù)在原始傳感器坐標系中處理,由于深度相機安裝于機械手的機械臂上,為了方便進行數(shù)據(jù)處理,例如點云分割等操作,需要保證深度相機與平臺水平,同時需要估算深度相機距離平臺的高度,算法條件相對苛刻。在進行坐標變換之后,點云數(shù)據(jù)可在作業(yè)區(qū)域坐標系內(nèi)處理,由于Aruco_marker標記貼附于作業(yè)區(qū)域表面,因此依據(jù)標記生成的坐標系xy軸平面與作業(yè)區(qū)域水平,近似貼合于作業(yè)區(qū)域表面,z軸垂直于作業(yè)區(qū)域表面豎直向上,方便后續(xù)對點云數(shù)據(jù)進行處理,同時對機器人及傳感器無特殊位置要求,只需保證重復定位精度即可。
3.2.1 Aruco_marker介紹
Aruco_marker是一種類似二維碼的簡易識別標記,廣泛應用于機器人導航、增強現(xiàn)實場景的相機位姿估計中。相機位姿估計主要任務在于找到點在真實3D環(huán)境中的坐標與2D圖像中的真實坐標并求出轉(zhuǎn)換關系,這一步驟通常比較復雜,而Aruco_marker標記可以被相機快速識別,并提供足夠計算相機位姿的對應信息。同時,標記內(nèi)部的二進制編碼使標記在錯誤檢查與修正方面保持一定的穩(wěn)定性。
一個Aruco_marker標記外圍均有一組黑色邊框,同時內(nèi)部有用于確定標記ID的二維矩陣。黑色邊框可加速標記在圖像中的檢測速度,內(nèi)部二維編碼能唯一識別該標記,同時進行錯誤檢測和錯誤修復。圖6為該視覺識別系統(tǒng)所用的Aruco_marker標記,ID號為582。Aruco_marker可用C++代碼直接生成,打印后即可用于相機位姿估計。
圖6 視覺系統(tǒng)所用Aruco_marker標記
3.2.2 相機位姿估計算法
Aruco_marker的檢測與位姿估計算法是基于OpenCV庫中的detectMarkers()函數(shù)與estimatePoseSingleMarkers()函數(shù)進行設計的。
首先,默認深度相機RGB攝像頭的內(nèi)部參數(shù)已知,RGB攝像頭的內(nèi)部參數(shù)一般在出廠時已經(jīng)計算完成,如果沒有也可利用傳統(tǒng)相機標定方法人工完成RGB攝像頭內(nèi)部參數(shù)標定。確定RGB攝像頭的內(nèi)部參數(shù)后,即可獲得去畸變之后的RGB圖像。以包含Aruco_marker標記的RGB圖像作為輸入,利用detectMarkers()對圖像進行檢測,確定圖像中的Aruco_marker標記、輸出標記角點(corner)及其他參數(shù),后續(xù)位姿估計均依賴于檢測輸出的結果。
獲取Aruco_marker的識別結果后,利用estimatePoseSingleMarkers()函數(shù)進行相機位姿估計,輸入?yún)?shù)為標記角點(corner)檢測結果、RGB攝像頭內(nèi)部參數(shù)(cameraMatrix)和RGB攝像頭畸變參數(shù)(distCoeffs),輸出結果為從標記坐標系至RGB相機坐標系的姿態(tài),該姿態(tài)通過1個旋轉(zhuǎn)向量(rvecs)和1個平移向量(tvecs)描述。
3.2.3 坐標變換計算
該算法所涉及的坐標系共3個,分別為深度相機中的點云坐標系Cpcl、深度相機中的圖像坐標系Crgb和上料平臺與打磨平臺上根據(jù)Aruco_marker生成的標記坐標系Cmarker。由深度相機采集到的原始點云位于點云坐標系Cpcl中,為了將原始點云轉(zhuǎn)換至標記坐標系Cmarker中進行下一步處理,需要計算得出從Cpcl至Cmarker的坐標轉(zhuǎn)換矩陣Tpcl,marker。假設現(xiàn)實環(huán)境中的某個點在點云坐標系、圖像坐標系、標記坐標系下的坐標分別為Ppcl、Prgb、Pmarker,則易知:
Prgb=Tpcl,rgbPpcl
(1)
式中:Tpcl,rgb為從點云坐標系至圖像坐標系的轉(zhuǎn)換矩陣,該矩陣可以通過查閱深度相機的參數(shù)表得到。
通過相機位姿估計算法,可以得到從標記坐標系Cmarker至圖像坐標系Crgb的轉(zhuǎn)換矩陣Tmarker,rgb,則從圖像坐標系Crgb至標記坐標系Cmarker的轉(zhuǎn)換矩陣為
(2)
同時可知:
Pmarker=Trgb,markerPrgb
(3)
將式(1)~式(3)整合可得
(4)
則可得出從Cpcl至Cmarker的坐標轉(zhuǎn)換矩陣為
(5)
C++的Eigen庫是一個開源的線性代數(shù)庫,可提供有關矩陣的線性代數(shù)運算,因此上述算法可基于Eigen庫進行開發(fā)實現(xiàn)。
由深度相機獲取的原始點云數(shù)據(jù)包含了工件點云、背景點云及無關點點云,為了對工件點云進行進一步的數(shù)據(jù)處理,需要將工件點云從原始點云中分割出來。原始點云數(shù)據(jù)的背景主要為上料平臺或打磨平臺,無關點主要為視場內(nèi)的少量輔助設備形成的干擾點。因此,工件點云分割工作分為背景點云分割與無關點濾除。
3.3.1 背景點云分割
背景點云由上料平臺或打磨平臺點云構成,這類背景點云為大面積平面類點云,且由于地面及打磨平臺都較為平整,幾乎沒有高度變化。工件放置于上料平臺或者打磨平臺上,同時在坐標變換時,已經(jīng)在上料平臺或打磨平臺上設置了標記坐標系,且原始點云已經(jīng)轉(zhuǎn)換至標記坐標系下,標記坐標系與平臺近乎貼合,z軸豎直向上。針對這類背景點云的特點及標記坐標系的特點,可以以工件厚度作為辨別工件與背景的判別條件,在z軸方向上設定合適的閾值,濾除大面積的背景點云。
3.3.2 工件點云提取
對于抓取環(huán)節(jié)的視覺識別,由于上料平臺上會放置多塊待抓取工件,僅對背景點云進行去除,已經(jīng)無法對每塊工件點云進行單獨處理。同時,由于上料平臺的尺寸較大,相機位姿估計的誤差會隨著尺寸增加而放大,導致背景無法完全過濾,殘余部分平面背景點云,這類點云也無法用離群點濾除進行過濾。由于工件點云亦為平面點云,因此可對去除背景后的點云數(shù)據(jù)采用隨機抽樣一致性(RANdom SAmple Consensus, RANSAC)算法進行工件點云的提取。
RANSAC算法是從1組含有“外點”的數(shù)據(jù)中正確估計出數(shù)學模型參數(shù)的迭代算法。該算法假設所有數(shù)據(jù)均由“內(nèi)點”與“外點”構成,“內(nèi)點”即組成模型參數(shù)的數(shù)據(jù),“外點”即模型以外不適合模型的數(shù)據(jù)。該算法通過反復選擇數(shù)據(jù)進行模型估計,一直迭代直至估計出較好的模型。該算法大多應用于直線特征提取,而RANSAC平面擬合提取的原理與直線擬合類似:首先在原始點云數(shù)據(jù)中隨機選出3點,按照平面方程構建平面模型,擬合出初始平面;然后將原始點云中所有點代入這個模型,計算出“內(nèi)點”數(shù)目(累加在一定誤差范圍內(nèi)的適合當前平面模型的數(shù)據(jù)),比較當前模型與之前擬合出的最好的模型的“內(nèi)點”數(shù)量,記錄包含最多“內(nèi)點”的模型參數(shù);最終直至迭代結束或達到設置的“內(nèi)點”上限,即完成平面擬合與提取。
RANSAC在點云中進行平面提取的算法可用點云庫中的SACSegmentation類進行實現(xiàn),算法的輸入為進行背景過濾后的點云數(shù)據(jù),并選擇RANSAC算法模型進行分割。SACSegmentation類中控制迭代次數(shù)的參數(shù)為segDistanceThreshold,即點至擬合平面的距離,若數(shù)據(jù)點至當前擬合平面的距離超過該閾值,則判斷該數(shù)據(jù)點不在平面模型內(nèi)。RANSAC算法是一種不穩(wěn)定算法,其擬合精度主要依靠迭代次數(shù),迭代次數(shù)越多,擬合越精準,但耗時也越多。應用于智能打磨裝備視覺識別系統(tǒng)中點云分割模塊內(nèi)的segDistanceThreshold參數(shù)設置為0.1 mm,其迭代次數(shù)即可保證工件平面可被準確分割,同時也兼顧算法實時性。
3.3.3 無關點濾除
對于打磨環(huán)節(jié)的視覺識別,由于打磨平臺尺寸較小,且每次只有1個工件放置于打磨平臺上,因此僅依靠設置閾值即可將絕大部分由打磨平臺構成的背景點云濾除。但由于打磨平臺周圍存在較多的輔助設備,例如點激光開關閥等,這些設備的一部分可能被深度相機捕捉到,形成無關點。這類無關點一般與工件點云距離較大,可按照離群點處理。離群點處理算法可基于K鄰近點(K-Nearest Neighbor, KNN)原理實現(xiàn),即設定鄰近點個數(shù)K與標準方差閾值Threshold,先求出某點附近K個鄰近點之間距離的標準方差dev,再計算該點到這些點的距離d,如果距離d大于該點附近K個鄰近點之間距離的標準方差與標準方差閾值的乘積,則該點判斷為離群點并進行濾除。無關點濾除算法基于C++與點云庫實現(xiàn)。
3.3.4 點云分割算法結果
如圖7所示,原始點云包含工件點云、背景點云及干擾點,經(jīng)過背景分割、工作點云提取及無關點濾除,可得到清晰的工件點云。
圖7 點云分割算法結果
工件質(zhì)心提取是搬運環(huán)節(jié)的主要算法功能。對分割出的工件點云進行質(zhì)心提取,得到質(zhì)心的三維坐標,并發(fā)送給上位機。機械臂移動至質(zhì)心坐標處,利用電磁鐵完成工件抓取。
通常物體的質(zhì)心計算公式為
(6)
式中:ri=(xi,yi,zi),i=1,2,…,n,為各質(zhì)點的坐標;mi為質(zhì)點的對應質(zhì)量。
利用C++進行工件質(zhì)心提取算法設計時,令式(6)中mi=1,質(zhì)心提取算法的公式為
(7)
利用C++程序與式(7)即可完成工件點云的質(zhì)心坐標計算,當質(zhì)心提取完成后,將質(zhì)心坐標保存,并發(fā)送至上位機,為機器人執(zhí)行搬運作業(yè)提供數(shù)據(jù)支撐。工件質(zhì)心提取結果如圖8所示。
圖8 工件質(zhì)心提取結果
工件點云的邊緣提取是打磨環(huán)節(jié)的核心算法。對打磨平臺上的待打磨工件進行分割之后,需要提取工件的邊緣點云,由于船舶小構件的幾何形狀存在非規(guī)則形狀,例如弧形邊緣等,僅提取少量邊緣特征點無法滿足打磨機器人的工作需求,需要對工件的邊緣進行完整的點云提取,并發(fā)送給機器人上位機,為機器人執(zhí)行打磨程序提供數(shù)據(jù)支撐。為了在三維點云中準確提取邊緣點云,選擇基于點云法線進行邊緣提取,即首先從原始點云上計算出法線,然后由法線結合數(shù)據(jù)估計出邊界,最后提取出邊緣點云。
平面的法線是與其垂直的單位向量。在點云表面,法線定義為垂直于與點云表面相切的平面向量,可提供關于平面的曲率信息。對于點云數(shù)據(jù)集的每個點的法線估計,可看做對表面法線的近似推斷,因此確定表面一點法線的問題可近似于估計表面的一個相切面法線的問題,轉(zhuǎn)換之后就成為最小二乘法平面擬合估計問題。 通過計算推導可將求解最佳擬合平面問題轉(zhuǎn)換為求解矩陣特征值與特征向量問題,所求得的最小特征值對應的特征向量即為最佳擬合平面的法向量。
完成工件點云中每個點的法線估計后,再利用各個法線方向之間的夾角即可判斷出工件點云的邊緣點,最終生成工件點云的邊緣點云信息。整個工件點云邊緣提取算法可基于C++與點云庫完成算法設計,算法輸入為完成點云分割后的單個工件點云和算法的約束參數(shù),參數(shù)reform用于法線估計算法中設定擬合平面的擬合半徑,一般設定為點云分辨率的10倍,而參數(shù)re用于邊緣判別算法中的法線夾角閾值,一般設置為π/2或π/4。算法輸出為識別提取出的工件邊緣點云。
完成工件邊緣點云提取后,將邊緣點的坐標保存,上傳至上位機,為機器人執(zhí)行打磨作業(yè)提供數(shù)據(jù)支撐。工件邊緣點云提取結果如圖9所示。
圖9 工件邊緣點云提取結果
針對船舶小構件打磨裝備,提出利用深度相機進行視覺識別系統(tǒng)算法設計,確定視覺識別系統(tǒng)的模塊框架與模塊功能。同時搭建算法試驗平臺,基于OpenCV庫與點云庫,利用C++程序語言完成各模塊的算法實現(xiàn)。與使用圖像傳感器和線激光型傳感器相比,基于深度相機設計的船舶小構件智能打磨裝備視覺識別算法在保證精度的同時,不再依賴現(xiàn)場光源和圖像分辨率,不需要移動傳感器進行在線掃描,提高了視覺識別的效率,為智能打磨裝備提供了準確全面的視覺數(shù)據(jù),保證了船舶小構件智能打磨裝備高質(zhì)量、高效率運行。