成奇龍,郭 銳
(1.中國科學(xué)院a.沈陽自動(dòng)化研究所;b.機(jī)器人與智能制造創(chuàng)新研究院,沈陽 110069;2.中國科學(xué)院大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,北京 100049;3.遼寧省智能檢測與裝配技術(shù)重點(diǎn)研究室,沈陽 110179)
隨著點(diǎn)云技術(shù)的發(fā)展,越來越多的領(lǐng)域,如自動(dòng)駕駛、醫(yī)學(xué)影像、城市規(guī)劃、地理測繪等都可以利用點(diǎn)云去解決實(shí)際問題,同時(shí)點(diǎn)云也可應(yīng)用于重建、定位、檢測、測量,本文主要利用點(diǎn)云數(shù)據(jù)實(shí)現(xiàn)測量彈簧參數(shù)的功能,彈簧是機(jī)械生產(chǎn)中重要的零部件,其結(jié)構(gòu)特點(diǎn)以中心軸成螺旋對稱,從側(cè)面各個(gè)方向投影后的形狀基本一致,螺旋彈簧的檢測參數(shù)主要是長度、直徑、垂直度及節(jié)距,通常對于長度、直徑的測量利用游標(biāo)卡尺等測量工具,測量精度為20 μm,對于垂直度測量通常利用1級精度直角尺或?qū)S昧烤邷y量,在無載荷狀態(tài)下,彈簧繞寬座角尺自轉(zhuǎn)一周后檢查另一端(端頭至1/2圈處考核相鄰第二圈)外圓素線與直角尺之間的最大距離來衡量垂直度[1-9],至于節(jié)距,由于節(jié)距間隙狹小,不便于采用工具測量方法,一般通過公式ρ=l-d*n/(n-1)計(jì)算,其中l(wèi)為彈簧總長;d為彈簧鋼絲直徑;n為彈簧圈數(shù),因而節(jié)距的測量存在誤差疊加,對于彈簧的傳統(tǒng)測量方法需要人工介入,并且測量耗時(shí)耗力,現(xiàn)階段對于小型零部件的測量方法大多利用二維圖像技術(shù),梁嚴(yán)、尤中桐等[10-15]利用圖像處理技術(shù)測量絲杠的螺距,實(shí)現(xiàn)了絲杠節(jié)距測量的自動(dòng)化;但二維圖像只能獲取彈簧平面結(jié)構(gòu),并且需要多次多角度拍攝,才能得出具有統(tǒng)計(jì)意義的結(jié)果,如張玉綱等[14]設(shè)計(jì)了基于視覺測量原理的彈簧同心度垂直度在線測量系統(tǒng),該系統(tǒng)從多旋轉(zhuǎn)位置拍攝彈簧圖像,通過二維圖像提取垂直度信息,而垂直度作為一種三維信息,而空間性是點(diǎn)云固有的性質(zhì),所以通過點(diǎn)云獲取垂直度是具有研究性的,因此基于PCL點(diǎn)云處理,本文提出一種自動(dòng)測量彈簧參數(shù)的算法,通過樣件對該方法的可行性進(jìn)行了試驗(yàn),并對結(jié)果精度進(jìn)行了評價(jià)。
需要測量的彈簧參數(shù)有長度、直徑、垂直度及節(jié)距,以下將分步描述各參數(shù)的測量方法。
采用線結(jié)構(gòu)激光傳感器獲取彈簧點(diǎn)云數(shù)據(jù),如圖1所示,本實(shí)驗(yàn)采用米銥線結(jié)構(gòu)激光傳感器,其工作原理為直接三角法[3],原理如圖2所示,相機(jī)坐標(biāo)系O-XYZ的Y軸垂直紙面向內(nèi),向待測物面表面某點(diǎn)P方向投射光線,投射角可以通過外參數(shù)標(biāo)定獲取,像點(diǎn)位置p在圖像上提取,結(jié)合相機(jī)的內(nèi)參數(shù)標(biāo)定結(jié)果,即可交會(huì)獲得P在相機(jī)坐標(biāo)系下的三維坐標(biāo)。通過該設(shè)備獲取的彈簧側(cè)面點(diǎn)云及端面點(diǎn)云如圖3和圖4所示。
圖1 試驗(yàn)臺(tái) 圖2 三角法原理示意圖
圖3 通過試驗(yàn)臺(tái)獲取 的彈簧端面點(diǎn)云 圖4 通過試驗(yàn)臺(tái)獲取 的彈簧側(cè)面點(diǎn)云
首先,通過試驗(yàn)臺(tái)掃描得到的點(diǎn)云數(shù)據(jù)存在無關(guān)點(diǎn)及噪聲點(diǎn),所以第一步需要進(jìn)行濾波處理,條件濾波將滿足給定條件的數(shù)據(jù)保留,不滿足條件的數(shù)據(jù)剔除,通過該濾波方式可以剔除支撐樣件的平臺(tái)點(diǎn)云,獲得樣件的獨(dú)立點(diǎn)云;統(tǒng)計(jì)濾波對每一個(gè)點(diǎn)的鄰域進(jìn)行一個(gè)統(tǒng)計(jì)分析,計(jì)算它到所有臨近點(diǎn)的平均距離。假設(shè)得到的結(jié)果是一個(gè)高斯分布,其形狀是由均值和標(biāo)準(zhǔn)差決定,那么平均距離在標(biāo)準(zhǔn)范圍(由全局距離平均值和方差定義)之外的點(diǎn),可以被定義為離群點(diǎn)并從數(shù)據(jù)中去除,因而統(tǒng)計(jì)濾波可以去除離群點(diǎn)得到較為純凈的樣件點(diǎn)云如圖5和圖6所示。濾波預(yù)處理結(jié)束后,可進(jìn)行4大參數(shù)的測量。
圖5 經(jīng)濾波后純凈 的彈簧端面點(diǎn)云 圖6 經(jīng)濾波后純凈 的彈簧側(cè)面點(diǎn)云
1.2.1 半徑的測量
利用端點(diǎn)云獲取半徑參數(shù),點(diǎn)云形態(tài)如圖5所示。算法步驟為:
步驟1:通過ransac算法[1]提取出端點(diǎn)云中的端平面點(diǎn)云P;
步驟2:對端平面點(diǎn)云,用ransac算法先擬合出端面的初始3d圓;
步驟3:計(jì)算點(diǎn)到通過圓心且與圓法向量平行的直線的距離d,如式(1)所示,若d大于半徑則作為“圓外點(diǎn)”加入圓外點(diǎn)集C中;
步驟4:對圓外點(diǎn)集通過ransac算法擬合出3d圓,重復(fù)步驟3;
步驟5:直至圓外點(diǎn)集的個(gè)數(shù)少于設(shè)定值m,迭代結(jié)束。
(1)
式中,o為3d圓心;pi為圓外一點(diǎn);n為過圓心的法向量,示意圖如圖7所示。算法流程圖如圖8所示。
圖7 圓外點(diǎn)判斷示意圖
圖8 半徑測量算法流程圖
通過該方法相較于直接提取邊緣,擬合3d圓,獲取半徑更具有統(tǒng)計(jì)意義,避免端面邊緣凸點(diǎn)或凹點(diǎn)的影響,擬合結(jié)果可視化如圖9所示。
圖9 擬合結(jié)果可視化
圖中,點(diǎn)集(淺灰色)表示經(jīng)濾波后的端點(diǎn)云,點(diǎn)集(深灰色)表示經(jīng)RANSAC算法分割得到的端平面點(diǎn)云,點(diǎn)集(黑色)表示最終用于擬合3D圓的點(diǎn)云。
1.2.2 自由長度的測量
自由長度利用側(cè)點(diǎn)云獲取,點(diǎn)云形態(tài)如圖6所示。
螺旋彈簧的外形結(jié)構(gòu)可能有如圖10所示的幾種形態(tài),為了避免不同形態(tài)下垂直度對長度的影響,在獲取側(cè)點(diǎn)云時(shí),使螺旋彈簧的端面與試驗(yàn)臺(tái)的YOZ面平行,才能使AABB包圍盒底面與彈簧的端面平行。
圖10 螺旋彈簧可能的外形結(jié)構(gòu) 圖11 側(cè)點(diǎn)云的AABB包圍盒
圖11中,深灰色向量為包圍盒底面法向量,深灰點(diǎn)與淺灰點(diǎn)為包圍盒上下底面點(diǎn)集。
算法步驟為:
步驟1:AABB包圍盒算法[6]獲得側(cè)點(diǎn)云的軸對稱包圍盒,提取包圍盒的6個(gè)關(guān)鍵點(diǎn);
步驟2:分別將位于某一側(cè)的點(diǎn)組合成某一個(gè)點(diǎn)集,可獲得兩個(gè)各具有3個(gè)點(diǎn)的點(diǎn)集,用于確定包圍盒的上下底面的面參數(shù),在此標(biāo)記為底面1與底面2;
步驟3:分別計(jì)算所有點(diǎn)分別到底面1與底面2的距離,與底面1距離小于設(shè)定值dmin1的點(diǎn)納入一個(gè)點(diǎn)集1,與底面2距離小于設(shè)定值dmin2的點(diǎn)納入一個(gè)點(diǎn)集2;
步驟4:查詢點(diǎn)集1中點(diǎn)的數(shù)量,若小于閾值m,則以L的步長放寬距離設(shè)定值,重復(fù)步驟3,點(diǎn)集2進(jìn)行同樣的操作,直至滿足點(diǎn)數(shù)閾值,迭代結(jié)束;
步驟5:點(diǎn)集1、2分別利用RANSAC擬合平面,計(jì)算面間距離為彈簧長度。
面間距離的計(jì)算公式:
(2)
式中,n1、n2分別為點(diǎn)集1與點(diǎn)集2中的點(diǎn)的個(gè)數(shù);P1、P2分別為點(diǎn)集1與點(diǎn)集2最終擬合的平面模型;dist(p,P)為點(diǎn)p到平面P的距離。
算法流程圖如圖12所示。
圖12 自由長度測量算法流程圖
1.2.3 垂直度的測量
依據(jù)垂直度的定義,方向公差中控制被測要素與基準(zhǔn)要素夾角為90°的公差要求,這里以包圍盒的底面法向量為基準(zhǔn),主成分分析法分析法獲得側(cè)面的軸向主方向,計(jì)算二者之間的夾角衡量垂直度。
數(shù)據(jù)集N中有n個(gè)點(diǎn),pi∈N,pi=(xi,yi,zi),標(biāo)準(zhǔn)化:
(3)
(4)
(5)
計(jì)算相關(guān)系數(shù)矩陣:
計(jì)算主方向:
計(jì)算R的特征值λ1、λ2、λ3與特征向量μ1、μ2、μ3,若λ1>λ2>λ3則λ1對應(yīng)的特征向量μ1為軸向主方向,λ3對應(yīng)的特征向量μ3為徑向主方向,包圍盒的底面法向量為n,則垂直度夾角:
(6)
1.2.4 節(jié)距的測量
螺旋彈簧節(jié)距的定義為彈簧相鄰兩圈對應(yīng)點(diǎn)在中徑上的軸向距離。
通過側(cè)點(diǎn)云數(shù)據(jù)可估計(jì)出每個(gè)點(diǎn)的法線特征,查詢其法向量與軸向主方向的夾角在90°及其±Δ范圍內(nèi)的點(diǎn)加入點(diǎn)集C命名為節(jié)距點(diǎn)集,將C中的點(diǎn)向徑向主方向投影,獲得新的點(diǎn)集M,M內(nèi)的點(diǎn)用于擬合節(jié)距線,M點(diǎn)集是由多個(gè)節(jié)距點(diǎn)簇組成,故利用DBSCAN算法[2,13]分離出各個(gè)點(diǎn)簇,對每一團(tuán)點(diǎn)簇利用RANSAC算法進(jìn)行直線擬合,計(jì)算相鄰線間的距離取平均作為節(jié)距值。相鄰線間的距離采用取樣法求取,即在其中一條直線上取若干點(diǎn)求到另一條直線的距離,求平均。
圖13 側(cè)點(diǎn)云的軸向主方向與徑向主方向 圖14 節(jié)距線點(diǎn)簇
本文在Windows平臺(tái)上采用C++編程語言結(jié)合PCL[12]實(shí)現(xiàn)了彈簧參數(shù)測量算法,對樣件的測量結(jié)果如表1所示,運(yùn)行時(shí)間為17.032 s。
表1 手動(dòng)測量方法與本文算法測量結(jié)果對比
本文針對半徑的測量,提出了一種外徑測量算法,該算法不僅可用于彈簧外徑的預(yù)測,同時(shí)對于管狀工件的外徑測量均適用,另外,就節(jié)距測量點(diǎn)簇聚類,發(fā)現(xiàn)基于密度的DBSCAN算法較K-Means聚類算法,更能剔除噪聲點(diǎn),使節(jié)距點(diǎn)簇更純潔,節(jié)距計(jì)算精度更高,相對于傳統(tǒng)的人工測量結(jié)果,通過本文算法獲得的各參數(shù)精度均在3%以內(nèi),達(dá)到了工業(yè)生產(chǎn)要求,提高了自動(dòng)化生產(chǎn)水平,減少了人力物力的投入。