吳安成 何衛(wèi)鋒 歐陽祥波
(廣東工業(yè)大學,廣東 廣州510006)
碼垛機器人是集機械、電子、信息、智能技術、計算機科學等學科于一體的高新機電產(chǎn)品,它能集成于生產(chǎn)線上的任意段,實現(xiàn)工件或包裝件的獲取、搬運、碼垛、拆垛等任務[1]。碼垛機器人在工作過程中,對目標工件位姿信息的獲取至關重要[2]。傳統(tǒng)的碼垛機器人在自動化生產(chǎn)線上,只能執(zhí)行固定的示教位置、抓取點固定、對定位工裝精度要求很高,同時需要精心設計手爪及特殊輔助機構[3-4]。在實際應用中,因工裝材料(如緩沖件等)、加工工藝、內(nèi)裝物本身精度以及為碼垛機器人抓取內(nèi)裝物預留的公差余量等原因,難以保證碼垛作業(yè)順利完成。視覺的引入可以使碼垛機器人根據(jù)內(nèi)裝物的實際位置動態(tài)調(diào)整抓取點,實現(xiàn)碼垛機器人對內(nèi)裝物的精確定位和智能抓?。?]。
碼垛機器人視覺系統(tǒng)對攝像機視場中的內(nèi)裝物進行識別、定位,將其圖像坐標系下的坐標值轉換為機器人中機械手坐標系(自定義工作坐標系)下的坐標值反饋給碼垛機器人運動控制系統(tǒng),實現(xiàn)對內(nèi)裝物的抓?。?-7]。手眼標定是將圖像坐標系與機械手坐標系關聯(lián)起來的必要條件,標定的精度直接影響著碼垛的成敗?,F(xiàn)有的手眼標定方法主要分為傳統(tǒng)的手眼標定法和基于商用視覺庫(如 Halcon、MatLab、VisionPro等)的標定法,前者是通過至少3次機器人的末端位姿變換,構建并求解AX=XB方程,對于方程AX=XB的求解,計算量特別大,最經(jīng)典的是Tsai[8]提出的轉站求解方法,但作者指出,該方法需要機器人移動比較大的角度,否則誤差較大;后者雖集成了現(xiàn)成的標定算法(如“九點”標定法),但使用商業(yè)視覺庫需要較高的開發(fā)成本,又因其不開源,故不利于產(chǎn)品的升級。OpenCV是一個基于BSD許可的開源視覺庫、包含了數(shù)百種計算機視覺算法,通過調(diào)用內(nèi)部函數(shù)可以省去大量的計算,又因其開源,故便于產(chǎn)品升級、節(jié)約開源成本。本文提出了一種簡易的基于OpenCV的“兩步”標定法。首先采用張正友標定法,以棋盤圖像作為標定的參照物,實現(xiàn)了世界坐標系與圖像坐標系之間的轉換;然后在機械手坐標系上設定四個標記點(內(nèi)裝物所在平面)進行位姿估計,實現(xiàn)了世界坐標系與機械手坐標系之間的轉換,從而推算出圖像坐標系與機械手坐標系之間的變換關系以完成手眼標定。實驗表明:該方法能滿足碼垛機器人對內(nèi)裝物的精確定位與抓取,在包裝件內(nèi)裝物整理排序和工業(yè)裝配線上具有一定的使用價值。
碼垛機器人視覺系統(tǒng)主要由碼垛機器人、攝像機、光源、以及運動控制器等組成,如圖1所示。本文用于研究的包裝件內(nèi)裝物是空調(diào)壓縮機。首先視覺系統(tǒng)對空調(diào)壓縮機進行粗定位與精定位,定位目的是為了使圖像中心與空調(diào)壓縮機大圓圓心(如圖1b所示)重合,然后機器人末端移動固定的距離(手與眼的相對距離),使手爪中心與空調(diào)壓縮機大圓圓心重合,執(zhí)行抓取動作,最后通過校正空調(diào)壓縮機的旋轉角,將空調(diào)壓縮機按規(guī)則地放置于托盤中。
在定位過程中,攝像機對視場中的空調(diào)壓縮機進行抓拍,通過識別定位算法可求得空調(diào)壓縮機大圓圓心的圖像坐標值,但要反饋給碼垛機器人運動控制系統(tǒng)的是機械手坐標系下的坐標值,而手眼標定可以實現(xiàn)圖像坐標值與機械手坐標值之間的轉換,故需要對碼垛機器人視覺系統(tǒng)進行手眼標定。
在碼垛機器人視覺系統(tǒng)中,機器人具有較大的工作范圍,為了避免圖像特征遮蓋問題、提高圖像精度,故將攝像機固聯(lián)于機械手的末端[9-10]。如圖2所示,攝像機標定能實現(xiàn)世界坐標系與圖像坐標系之間的轉換;“四點”位姿估計能實現(xiàn)世界坐標系與機械手坐標系之間的轉換,從而推算出空調(diào)壓縮機圖像坐標系下的坐標值對應的機械手坐標系下的坐標值,故經(jīng)過以上兩步操作實現(xiàn)了碼垛機器人視覺系統(tǒng)的手眼標定。
攝像機標定的方法大致可分為傳統(tǒng)攝像機標定法和攝像機自標定法[11-13]。OpenCV中采用的是一種介于傳統(tǒng)標定法與自標定法之間的非線性模型攝像機標定法[14-15],該方法具有較高的靈活性與標定精度,適用于碼垛機器人視覺系統(tǒng)[16]。
圖3為攝像機成像模型,實現(xiàn)了世界坐標到圖像坐標的轉換。OwXwYwZw為世界坐標系,OcXcYcZc為攝像機坐標系,oxy為圖像坐標系,O0u0v0為像素坐標系。
其數(shù)學模型表示為:
其中:fx、fy、u0、v0為攝像機內(nèi)參數(shù);rx、tx為外參數(shù);S 為尺度因子。
OpenCV使用了張正友的針孔攝像機模型,引入了透鏡的畸變[17]。引入透鏡的徑向畸變和切向畸變分別為:
其中:δx與 δy是非線性畸變值;k1、k2、k3為徑向畸變;p1、p2為切向畸變。
OpenCV標定具體流程[18]為:首先讀取采集到的棋盤圖像,對棋盤圖像提取角點,然后將能夠成功提取到角點的棋盤圖像進行亞像素化,獲得角點的亞像素坐標值,最后通過攝像機的標定得到攝像機的內(nèi)參數(shù)、畸變參數(shù)、投影誤差以及各姿態(tài)下棋盤圖像的外參數(shù)。
若空間坐標(X,Y,Z)為空調(diào)壓縮機大圓圓心坐標,某姿態(tài)下的棋盤圖像與空調(diào)壓縮機所在平面共面,則該狀態(tài)下棋盤的外參數(shù)即為空調(diào)壓縮機世界坐標與圖像坐標轉換的外參數(shù),通過式(1)可求得圖像坐標(x,y,z)對應的世界坐標(X,Y,Z),從而完成了兩步標定中的第一步——攝像機標定。
在三維空間中,可通過設定標記點來實現(xiàn)世界坐標系與機械手坐標系間的轉換[18]。由于視覺定位是為了使空調(diào)壓縮機大圓圓心與圖像中心重合。當手爪沒有達到這個位置時,視覺系統(tǒng)必須知道圓心相對于圖像中心的位置,即機器人需要移動的距離[19]。
在機械手處于原點狀態(tài)下,將標記點依次地置于機械手坐標系中,則實現(xiàn)的將是世界坐標系與機械手坐標系之間的轉換。標記點擺放位置如圖4所示。
點P1~P4為機械手坐標系中的標記點,通過圖4a可獲得P1~P4投影到攝像機的圖像平面上的點p1~p4,如圖4b所示。標記點 P1~P4與 p1~p4的變換由旋轉向量(rvec)和平移向量(tvec)來定義,也稱為歐式變換或剛性變換[19],具體形式為:
由于空調(diào)壓縮機都放置于同一平面上,故令圓心坐標Z=0,一個平面到另一個平面的投影映射,又稱兩幅圖像之間的單應性H,具體形式為:
其中:x、y為空調(diào)壓縮機圖像坐標值;X、Y為空調(diào)壓縮機機械手坐標值。也即:也即機器人要移動的坐標值,從而實現(xiàn)了“兩步”標定中的第二步——位姿估計。
為了獲得精確的攝像機畸變參數(shù),本文以25 mm×25 mm的棋盤圖像作為標定參照物。以不同角度隨機地放置標定板,采集20張能夠成功識別到角點的棋盤圖像[20],以確保為完全求解這些圖像在整個坐標系(相對于攝像機)的位置和攝像機內(nèi)參數(shù)提供足夠的信息,如圖5所示。
通過OpenCV中cv::calibrateCamera()對以上棋盤圖像進行標定,得到了攝像機的內(nèi)參數(shù)與畸變數(shù),如表1、2所示。
表1 攝像機內(nèi)參數(shù)
表2 攝像機畸變參數(shù)
機器人處于原點的狀態(tài)下,分別在機械手坐標系下設定標記點(0,0)、(150,0)、(150,150)、(0,150),其對應的圖像坐標值分別為:(1 958,1 166)、(1 069,1 083)、(1 155,194)、(2 040,278),標定點設定方式如圖4所示。將圖像坐標值、機械手坐標值、攝像機內(nèi)參數(shù)與畸變參數(shù)傳遞給cv::solvePnP()算法中可以得到旋轉向量rvec和平移向量tvec,并通過羅德里格變換cv::Rodrigudes()可求得rvec與tvec所對應的旋轉矩陣rmat及平移矩陣tmat。將標記點的世界坐標值、rvec和tvec傳遞給cv::projectPoints()進行重投影,把投影得到的圖像標記點的二維坐標值與實際上的圖像標記點的坐標值傳遞給cv::norm()求取投影誤差,最后由std::sqrt()求得平均重投影誤差為:0.727(像素),具體參數(shù)如表3所示。
表3 重投影誤差
圖6a為定位前的空調(diào)壓縮機大圓圓心坐標x(1525.02,745.54),將其代入公式(9),求得機器人要移動坐標值為X(-32.24,33.54)。經(jīng)過二次定位后空調(diào)壓縮機大圓圓心幾乎與圖像中心重合如圖6b所示,此時抓取誤差dev為(-0.11,0.82),歐式誤差err為0.83。對手眼標定的結果進行8次試驗,具體參數(shù)如表4所示,都能成功地將空調(diào)壓縮機進行抓取,并且其歐式誤差都控制在±1 mm內(nèi)。
表4 手眼標定實驗結果
本文提出了一種適用于碼垛機器人的簡易的手眼標定法——“兩步”標定法,該方法充分利用了OpenCV中的視覺算法庫,與傳統(tǒng)的手眼標定法和基于商用視覺庫的標定法相比,省去了大量的計算、節(jié)約開發(fā)成本以及便于產(chǎn)品的升級,而且只要通過簡單的攝像機標定與標記點位姿估計,就能實現(xiàn)手眼標定。測試結果表明,該手眼標定法結合為空調(diào)壓縮機識別、定位設計的視覺算法,能夠達到±1 mm的碼垛精度,適用于空調(diào)壓縮機的碼垛作業(yè),在包裝內(nèi)裝物整理排序和工業(yè)裝配線上具有一定的使用價值。