徐思遠(yuǎn),楊偉群
(北京航空航天大學(xué) 機(jī)械工程及自動(dòng)化學(xué)院,北京 100191)
3D打印技術(shù)(3D Printing),也被稱為增材制造技術(shù)(Addtive Manfacturing,AM)。美國材料與試驗(yàn)協(xié)會(huì)(ASTM)于2009年成立了3D打印技術(shù)委員會(huì)(F42委員會(huì)),該委員會(huì)隨后給出了3D打印技術(shù)的明確定義:3D打印技術(shù)是一種與傳統(tǒng)的材料加工方法截然相反,基于三維CAD模型數(shù)據(jù),通過增加材料逐層制造的方式。
由于STL模型文件是多數(shù)快速原型系統(tǒng)所應(yīng)用的標(biāo)準(zhǔn)文件類型,在不同平臺(tái)轉(zhuǎn)換時(shí)通用性更高,故對(duì)該類型文件的研究顯得尤為重要。STL文件格式簡單,具有高可重用性,高性能,高移植性,跨平臺(tái)的優(yōu)點(diǎn)。但同時(shí)也正因?yàn)楦袷胶唵卧斐闪舜鎯?chǔ)的信息不夠,其中的拓?fù)浣Y(jié)構(gòu)信息、尺寸信息、特征信息都需要利用反向工程求解。本文基于STL模型文件,重建模型拓?fù)浣Y(jié)構(gòu)、進(jìn)行模型缺陷檢測、提取擬合模型特征并進(jìn)行公差的計(jì)算,并提出一種可以應(yīng)用于3D打印技術(shù)的質(zhì)量表征技術(shù)。
STL(Stereolithography)是由3D Systems公司開發(fā)一種文件格式,最早出現(xiàn)在該公司開發(fā)的光固化成型技術(shù)的CAD軟件中。STL格式將零件的表面分解為無數(shù)的小三角面片,每個(gè)三角面片有三個(gè)頂點(diǎn)和一個(gè)法向量組成,法向量垂直于三角面片指向零件外側(cè)。如圖1所示,圖1(a)是三角面片的數(shù)據(jù)結(jié)構(gòu):法向量和頂點(diǎn)都是由笛卡爾坐標(biāo)系中x、y、z三個(gè)坐標(biāo)組成,在三角面片的內(nèi)部存儲(chǔ)中第一個(gè)是法向量,隨后是三個(gè)頂點(diǎn),頂點(diǎn)的排列順序沒有規(guī)定。圖1(b)是三角面片的示意圖。
圖1 STL文件中的三角面片
由于三角化算法的局限性,導(dǎo)致STL數(shù)據(jù)模型有以下不足:用小三角形面片近似實(shí)體表面降低了精度;因STL模型中各三角形面片間沒有拓?fù)湫畔?,三角形面片間的公用結(jié)點(diǎn)需要多次存儲(chǔ);沒有表示STL數(shù)據(jù)模型三角形面片之間的鄰接關(guān)系;為提高精度多個(gè)三角形面片進(jìn)行近似時(shí),很可能出現(xiàn)某個(gè)頂點(diǎn)的分離。
為了在缺陷檢車和特征擬合階段可以高效的訪問到模型的面片拓?fù)湫畔?,必須重新建立模型的拓?fù)浣Y(jié)構(gòu),保存點(diǎn)、線、面的鄰接關(guān)系、所屬關(guān)系。圖2是點(diǎn)、線、面的數(shù)據(jù)結(jié)構(gòu)。
圖2 點(diǎn)、線、面的存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)
從數(shù)據(jù)結(jié)構(gòu)中可以看出,在點(diǎn)、線、面的數(shù)據(jù)中各自存儲(chǔ)了所屬的上級(jí)特征和所包含的下級(jí)特征,建立了點(diǎn)-邊關(guān)系、點(diǎn)-面關(guān)系和邊-面關(guān)系,得到了模型數(shù)據(jù)的拓?fù)潢P(guān)系,為分析算法提供了數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)。
由于一個(gè)三角面片中含有三個(gè)頂點(diǎn),每一個(gè)頂點(diǎn)又可以存在于不同的若干個(gè)三角面片中,因此有頂點(diǎn)的重復(fù)存儲(chǔ),從STL文件中讀出的三角面片頂點(diǎn)數(shù)據(jù)是冗余的,這樣會(huì)浪費(fèi)存儲(chǔ)空間,也有可能造成數(shù)據(jù)的不一致錯(cuò)誤,因此在建立拓?fù)浣Y(jié)構(gòu)的過程中,完成了冗余點(diǎn)的剔除,使得算法更加簡潔高效。
為了保證擬合程序的順利進(jìn)行,必須確保STL模型的正確性。所以對(duì)模型的缺陷檢查尤為重要,本章闡述了STL模型文件的常見缺陷及檢測算法。
STL模型是通過對(duì)三維實(shí)體模型進(jìn)行表面三角面片離散得到的,只能在一定精度上實(shí)現(xiàn)與理論模型的配準(zhǔn)。在CAD造型中,文件常常需要在多個(gè)CAD軟件之間進(jìn)行轉(zhuǎn)換。由于軟件之間實(shí)現(xiàn)方式的差異以及二進(jìn)制文件中由于數(shù)據(jù)精度造成的四舍五入偏差,STL文件往往會(huì)出現(xiàn)各種各樣的缺陷及異常。這會(huì)在文件處理和打印處理時(shí)造成異常,甚至直接反映在打印成品上,造成質(zhì)量缺陷。
STL模型需要遵循以下規(guī)范:1)共定點(diǎn)規(guī)則,三角面片需要與鄰近面片有重合的兩個(gè)頂點(diǎn);2)取向規(guī)則,面片的法向量必須遵循右手定則,并且不可以指向?qū)嶓w內(nèi)部;3)充滿規(guī)則,三角面片必須連續(xù)充滿實(shí)體表面。
在此規(guī)范基礎(chǔ)上,STL模型常見的缺陷有空洞、法向量反向、縫隙與重疊、錯(cuò)位、多余、不共頂點(diǎn)等。圖3為常見缺陷示意圖。
圖3 常見缺陷示意圖
1)法向量反向:由于三角面片中頂點(diǎn)記錄順序混亂,有可能造成法向量的錯(cuò)誤,以至于實(shí)際的法向量與已經(jīng)記錄的三角面片的法向量不一致的情況出現(xiàn),因此有必要設(shè)計(jì)算法檢測法向量反向的錯(cuò)誤。
由于法向量嚴(yán)格遵守右手定則,故可以根據(jù)三頂點(diǎn)確定的符合右手定則的向量與文件中的法向量比較,方向一致則為正確的法向量。首先由三個(gè)頂點(diǎn)得到兩個(gè)向量,計(jì)算兩個(gè)向量的叉積可得到復(fù)合右手定則的法向量。將得到的法向量與原法向量進(jìn)行點(diǎn)積計(jì)算,若結(jié)果大于零則可確定該處法向量沒有發(fā)生反向錯(cuò)誤。依次計(jì)算每個(gè)三角面片的法向量。
2)懸邊和懸面檢測:懸邊是由于數(shù)據(jù)誤差或面片丟失導(dǎo)致所屬面只有一個(gè)的邊。懸面是由于三角面片丟失造成連接面少于三個(gè)的面片。由于拓?fù)潢P(guān)系的建立,這兩個(gè)缺陷的檢測相對(duì)容易。只需要將邊結(jié)構(gòu)中的e_faceId.size()和面結(jié)構(gòu)中的neighborFaceId.size()取出來判斷即可。
3)面間裂縫和空洞檢測:這類缺陷是由于計(jì)算誤差或面片丟失造成的。對(duì)于裂縫和空洞,首先他們的邊都是懸邊。根據(jù)前文可以從懸邊缺陷中得到,其中,空洞是首尾相連構(gòu)成的一個(gè)環(huán)。用模型中所有的懸邊構(gòu)造一個(gè)無向圖,通過無向圖的廣度優(yōu)先遍歷,可以得到頂點(diǎn)序列,然后再找出屬于空洞的邊,懸邊數(shù)組中去除空洞邊就是裂縫邊了。
提取屬于某個(gè)特征的數(shù)據(jù)點(diǎn)的總體思路是:先獲得一個(gè)屬于該幾何特征的三角面片,然后遍歷這個(gè)三角面片的相鄰三角面片,從中找到同樣屬于該幾何特征的三角面片,依次遞歸尋找該三角面片的相鄰三角面片中屬于當(dāng)前幾何特征的三角面片,直到找到所有的三角面片。然后從找到的所有三角面片提取出不重復(fù)的所有數(shù)據(jù)點(diǎn)。即是所有屬于當(dāng)前幾何特征的數(shù)據(jù)點(diǎn)。
1)棱邊要素?cái)?shù)據(jù)點(diǎn)的提取。如圖4是STL模型中兩個(gè)平面相交形成的棱邊,圖4(a)是STL模型渲染圖,圖4(b)是STL模型示意圖,圖4(c)是理想平面要素。本文以圖4(b)中所示的一組相鄰的三角面片作為棱邊要素,棱邊要素的數(shù)據(jù)點(diǎn)是這些三角面片所包含的不重復(fù)的點(diǎn)。圖4(c)中要提取的數(shù)據(jù)點(diǎn)屬于平面F1、F2相交形成棱邊,、分別是這兩個(gè)平面的法向量,朝向幾何體外側(cè)。要提取的三角面片需要滿足以下兩個(gè)條件:
(2)三角面片在棱邊法向量上的投影在棱邊的起點(diǎn)終點(diǎn)之間。
圖4 STL模型中的棱邊
2)平面要素?cái)?shù)據(jù)點(diǎn)的提取。按照前面介紹的思路,第一步先從紅黑樹中提取一個(gè)屬于平面要素的數(shù)據(jù)點(diǎn)。找第一個(gè)數(shù)據(jù)點(diǎn)的方法是先在理論模型中取理想平面上一點(diǎn),再在STL模型中找與之距離最近的三角面片。之所以找最近的三角面片,不直接找最近的點(diǎn)是因?yàn)樵赟TL模型中三角片的數(shù)量遠(yuǎn)遠(yuǎn)少于頂點(diǎn)的數(shù)量。在理想模型中取點(diǎn)時(shí)一般取平面中心的點(diǎn),這樣可以保證在STL模型中與之最近的點(diǎn)同樣屬于該平面。下一步是從面紅黑樹中讀取三角面片的相鄰三角面片,并判斷相鄰三角面片是否屬于該平面。相鄰三角面片滿足以下條件的可以認(rèn)為屬于該平面:
(1)把理想平面邊界和三角面片投影到坐標(biāo)面內(nèi),該三角面片在該平面內(nèi)的投影在平面邊界投影的范圍內(nèi);
(2)該三角面的法向量與理想平面的法向量成小角度。
如圖4所示,t1和t2是兩個(gè)三角面片,t1'和t2'分別是它們?cè)谧鴺?biāo)平面的投影,一個(gè)在平面邊界投影范圍內(nèi),另一個(gè)在平面邊界投影的范圍外,應(yīng)用條件一可知t1屬于該理想平面,t2不屬于該理想平面。在選擇投影坐標(biāo)平面時(shí),遵循使平面投影的面積最大原則。平面法向量那個(gè)方向的分量絕對(duì)值最大,說明垂直該分量的坐標(biāo)面即為所選坐標(biāo)面。
圖5 平面在坐標(biāo)面內(nèi)的投影
3)圓柱面要素?cái)?shù)據(jù)點(diǎn)的提取。提取圓柱面要素的數(shù)據(jù)點(diǎn)同樣是先提取屬于當(dāng)前圓面要素的三角面片,然后從中找出所有不重復(fù)的點(diǎn)。凡是屬于圓柱面的三角面片需要滿足以下三個(gè)條件:
(1)三角面片到理想圓柱面軸線的距離近似為理想圓柱面的半徑;
(2)三角面片的法向量與理想圓柱軸線夾角近似等于90°;
(3)三角面片應(yīng)當(dāng)位于理想圓柱面上下底面之間。
擬合幾何特征的過程可以看做是求解方程組的過程:加入某個(gè)幾何特征上的點(diǎn)都滿足f(p,x)=0,其中x是未知變量,x=(x1,x2,…,xn)T∈Rn,p是測量點(diǎn),p=(px,py,pz)T∈R3。代入m個(gè)測量點(diǎn)后得到一系列方程組:
在用最小二乘法擬合特征時(shí),該方程組是非線性方程組,解非線性方程組的方法有牛頓法[44]、高斯牛頓法、Levenberg-Marquardt(L-M)法,其中應(yīng)用最廣的還是L-M法。L-M法,中文名稱列文伯格-馬夸爾特法,是對(duì)高斯牛頓法的一種修正,加快了收斂速度[45]。使用LM法進(jìn)行最小二乘尋優(yōu),關(guān)鍵是適當(dāng)目標(biāo)函數(shù)和合適的初始值。
1)空間直線的擬合??臻g直線的點(diǎn)向式方程如下,其中點(diǎn)P0(x0,y0,z0)是直線上任意一點(diǎn),向量(m,n,p)是直線的單位法向量:
那么點(diǎn)(x,y,z)到該直線的距離為:
給定一組N個(gè)數(shù)據(jù)點(diǎn){(xi,yi,zi),i=1,2,…,N},優(yōu)化目標(biāo)函數(shù)為:
變量共有5個(gè):x0、y0、z0、m、n,式中p用代替。擬合結(jié)果獲得直線上一點(diǎn)的坐標(biāo)和直線單位法向量。
2)平面擬合。用平面上一點(diǎn)P0(x0,y0,z0)和平面的單位法向量(m,n,p)來表示任意平面,若P(x,y,z)是平面上任意點(diǎn),那么垂直:
那么點(diǎn)P(x,y,z)到該平面的距離為:
給定一組N個(gè)數(shù)據(jù)點(diǎn){(xi,yi,zi),i=1,2,…,N},優(yōu)化目標(biāo)函數(shù)為:
變量共有5個(gè):x0、y0、z0、m、n。擬合結(jié)果獲得平面上一點(diǎn)的坐標(biāo)和平面的單位法向量。
給定一組N個(gè)數(shù)據(jù)點(diǎn){(xi,yi,zi),i=1,2,…,N},優(yōu)化目標(biāo)函數(shù)為:
變量共有6個(gè):x0、y0、z0、m、n、R,式中p用代替。擬合結(jié)果獲得圓柱中心軸線上一點(diǎn)的坐標(biāo)和軸線的單位法向量。
在計(jì)算多幾何要素公差的某些公差項(xiàng)目,比如線性尺寸公差的定義是兩個(gè)提取平面的局部尺寸,在計(jì)算局部尺寸時(shí)需用到擬合導(dǎo)出中心平面,而擬合導(dǎo)出中心平面按照定義是兩個(gè)平行的擬合組成平面的中心平面,雖然這兩個(gè)平面的理想平面是平行的,但實(shí)際上兩個(gè)組成平面的擬合平面不一定平行,我們還是用平面上一點(diǎn)和平面的單位法向量來描述一個(gè)平面,那么在兩個(gè)擬合提取平面上各取一點(diǎn),它們的中點(diǎn)在擬合導(dǎo)出中心平面上,法向量為兩個(gè)擬合提取平面法向量的角平分線方向的向量。圖6是計(jì)算擬合導(dǎo)出平面的過程。平面F1、F2是兩個(gè)提取組成平面,F(xiàn)3是要求的擬合導(dǎo)出中心面。點(diǎn)p1、p1分別是擬合組成平面F1、F2上一點(diǎn),向量、分別是F1、F2的法向量。點(diǎn)p3是點(diǎn)p1、p1中點(diǎn),向量是、的角平分線。擬合導(dǎo)出中心面F3由點(diǎn)p3、單位向量來描述。
圖6 擬合導(dǎo)出平面
在計(jì)算含有基準(zhǔn)的公差項(xiàng)目時(shí),基準(zhǔn)的位置應(yīng)當(dāng)是幾何要素的理想位置,但是由測量得到數(shù)據(jù)點(diǎn)無法知道理想位置,因此用擬合得到的幾何要素作為理想幾何要素。
在計(jì)算公差時(shí)需要大量計(jì)算空間直線與三角面片集合(或者點(diǎn)云)的交點(diǎn),比如求點(diǎn)到提取平面的距離,求兩平面間距離時(shí)的局部尺寸等等。計(jì)算直線與三角面片集合(點(diǎn)云)的方法有很多種,本文采取的方法如圖7所示,已知擬合平面F,空間直線L,交點(diǎn)為P,在平面的點(diǎn)云數(shù)據(jù)中搜索找到離點(diǎn)P最近的三個(gè)點(diǎn)p1、p2、p3,這三個(gè)點(diǎn)可以組成一個(gè)三角面片,三角面片的中點(diǎn)是p',p'即是直線L與平面的實(shí)際交點(diǎn)。
圖7 直線與平面交點(diǎn)
求點(diǎn)p的過程如下,已知平面F上一個(gè)點(diǎn)P1(P1x,P1y,P1z),法向量為(n1x,n1y,n1z),直線上一點(diǎn)P2(P2x,P2y,P2z),法向量(n2x,n2y,n2z)。直線的參數(shù)方程為:
平面的點(diǎn)法式方程為:
解上面三個(gè)方程得到:
把t代入直線方程得到交點(diǎn)坐標(biāo)。
STL數(shù)據(jù)模型可視化的實(shí)現(xiàn)是在線服務(wù)以及加工中的一個(gè)重要環(huán)節(jié)。模型可視化功能的實(shí)現(xiàn)有助于對(duì)STL文件進(jìn)行診斷,良好的模型顯示效果對(duì)客戶的直觀感受及正確的選擇實(shí)體的切片方向有積極的效果。本次設(shè)計(jì)充分利用Three.js卓越的渲染能力和交互使場景處理能力,在WEB前端實(shí)現(xiàn)STL數(shù)據(jù)模型的可視化。如圖8是加載完成的STL模型。
圖8 加載完成的STL模型文件
Three.js為用于3D場景渲染的Java Script開源庫,并且由于其具有極強(qiáng)兼容性,支持加載多種式的文件,所以以Three.js引擎作為工具對(duì)STL模型進(jìn)行加載和渲染。Three.js庫中包含許多個(gè)工具文件,每一個(gè)文件中都封裝著完成特定功能的方法。Three.js文件是Three.js引擎中使用頻率最高的工具文件,其中封裝了調(diào)整場景、攝像機(jī)和材質(zhì)的相關(guān)方法,可以方便快捷地對(duì)渲染場景進(jìn)行初始化。Three.js引擎發(fā)展至今已經(jīng)有了多種加載器,可以支持JSON、OBJ、STL、CTM等多種格式。
圖9 引入JavaScript文件
使用Three.js引擎對(duì)STL模型進(jìn)行讀取之前,首先要引入必要的JavaScript文件,如圖9所示,STLLoader.js是STL文件對(duì)應(yīng)的加載器文件,文件中封裝了讀取STL二進(jìn)制文件和STL文本文件數(shù)據(jù)并初始化網(wǎng)格體的方法;TrackballControls.js是控制模型視角變換的函數(shù)庫文件;AsciiEffect.js是添加ASCII動(dòng)畫效果的js文件。
如圖10所示,依次通過初始化渲染場景(設(shè)置相機(jī)位置、光源位置及屬性等)、加載STL文件、渲染計(jì)算等步驟實(shí)現(xiàn)STL模型的可視化。其中scene是一個(gè)場景容器,用來跟蹤并保存所有需要渲染的物體。
圖10 初始化流程
本例所用的機(jī)器采用先臨三維科技公司自主研發(fā)的Shining3D-Scanner系列三維掃描儀。使用激光掃描儀掃描打印好的組件得到STL模型,本例中命名為model.stl。使用STL模型解析算法和錯(cuò)誤檢測算法對(duì)模型進(jìn)行分析,得到的模型信息結(jié)果和錯(cuò)誤信息結(jié)果如圖11所示。其中的反向面片、殼體和島孔錯(cuò)誤使用Magics軟件處理,由于微小面片對(duì)本例分析不會(huì)造成影響,故不考慮該問題。
圖11 模型信息和錯(cuò)誤信息
本例選取了尺寸公差、平行度公差、平面度公差作為特征擬合的檢測項(xiàng)目。如圖12所示為幾何精度參數(shù)檢測界面和檢測結(jié)果。使用PMI標(biāo)注功能,將檢測結(jié)果直接標(biāo)注在三維零件上。其中綠色標(biāo)注代表符合公差要求,紅色標(biāo)注代表超出公差要求范圍。
圖12 幾何精度參數(shù)檢測結(jié)果
近年來3D打印技術(shù)受到了廣泛的關(guān)注,但是在3D打印技術(shù)缺乏有效的數(shù)字化質(zhì)量表征技術(shù),嚴(yán)重阻礙了3D打印技術(shù)的推廣應(yīng)用。本文針對(duì)該問題系統(tǒng)研究了基于STL模型的數(shù)字化模型數(shù)據(jù)分析、質(zhì)量表征參數(shù),從幾何精度、表面質(zhì)量和其他質(zhì)量參數(shù)三個(gè)方面進(jìn)行了深入研究,為產(chǎn)品質(zhì)量數(shù)字化檢測提供了新的思路。