諸進(jìn)才,胡艷娥
(廣州鐵路職業(yè)技術(shù)學(xué)院機(jī)電工程學(xué)院,廣州 510430)
STL(StereoLithography,原意為“立體光刻”)是由美國3D Systems公司創(chuàng)立、原本用于立體光刻計(jì)算機(jī)輔助設(shè)計(jì)軟件的一種文件格式[1]。零件的STL文件格式采用了三角面片近似地描述三維模型外表面的幾何形狀,這種模型表述得非常簡單,既沒有顏色和材質(zhì)貼圖,更沒有其他的如平面、孔等零件三維模型的屬性,因此也被稱為“輕量化模型”,是工程應(yīng)用上最為簡潔和常用的一種交換文件格式之一。
基于PC機(jī)的數(shù)控機(jī)床的在機(jī)接觸式檢測系統(tǒng)是通過為數(shù)控機(jī)床配備一種檢測專用接觸式測頭以及相應(yīng)的檢測代碼所構(gòu)成的一種經(jīng)濟(jì)、快捷卻非常有效的零件加工質(zhì)量控制手段[2]。該技術(shù)是在數(shù)控機(jī)床完成零件的半精加工或精加工后,只更換加工用刀頭為檢測用測頭、調(diào)用檢測用程序即可在數(shù)控機(jī)床工作臺(tái)上完成檢測,其檢測結(jié)果實(shí)時(shí)呈現(xiàn)在用戶面前,因此被稱為數(shù)控加工精度“在線檢測”或“在機(jī)檢測”。實(shí)施數(shù)控加工精度在機(jī)檢測時(shí),首先在基于VISUAL STUDIO開發(fā)的在機(jī)檢測軟件上讀取加工零件(即待檢測零件)的設(shè)計(jì)模型(目前只支持文件的STL格式)并拾取零件表面的理想設(shè)計(jì)元素(即待檢測的點(diǎn)特征)并規(guī)劃成自動(dòng)檢測路徑,機(jī)床停止當(dāng)前加工操作并將加工刀具更換成測頭、調(diào)用相關(guān)檢測程序和誤差補(bǔ)償程序即可在數(shù)控機(jī)床上不拆卸工件對工件進(jìn)行快速檢測和及時(shí)反饋。STL格式零件模型因其表面保留的點(diǎn)特征元素是CAD設(shè)計(jì)模型的原始數(shù)據(jù),且可從任何三維設(shè)計(jì)軟件輕易導(dǎo)出,因此常被作為不同軟件間的文件交換標(biāo)準(zhǔn)。
三維建模軟件設(shè)計(jì)好零件結(jié)構(gòu)后即可輸出STL格式,開發(fā)的在機(jī)檢測軟件可讀取ASCII碼的STL格式文件,任一零件模型輸出ASCII碼的STL格式文件結(jié)構(gòu)如下:
solid<file name> //文件名
facet normalni,nj,nk//該三角面片的法向矢量,方向由里指向外。三角面片開始
outer loop //loop開始,符合右手定則
vertexV1x,V1y,V1z//三角面片第1個(gè)頂點(diǎn)
vertexV2x,V2y,V12z//三角面片第2個(gè)頂點(diǎn)
vertexV2x,V2y,V2z//三角面片第3個(gè)頂點(diǎn)
end loop //loop結(jié)束
endfacet //三角面片結(jié)束
……
endsolid<file name> //文件結(jié)束
分析STL格式文件的結(jié)構(gòu)可知,該文件類型應(yīng)用于接觸式檢測至少存在兩個(gè)問題,分別分析如下。
(1)規(guī)則特征表面無點(diǎn)可拾取
開發(fā)的數(shù)控加工精度在機(jī)檢測系統(tǒng)能快速讀取加工零件數(shù)字模型的STL格式文件并進(jìn)行三維渲染,可通過電腦屏幕操作鼠標(biāo)任意拾取零件模型上的點(diǎn)元素作為在機(jī)檢測的基準(zhǔn)(即設(shè)計(jì)理想點(diǎn)),為下一步的檢測路徑生成和檢測結(jié)果對比提供理論依據(jù)。然而由于STL格式模型表面特征全部由三角面片(只由3個(gè)頂點(diǎn)的坐標(biāo)+1個(gè)表示面片方向的法向矢量組成)近似勾勒而成,只有三角面片上的3個(gè)頂點(diǎn)才是三維數(shù)字模型表面上的原始幾何元素。所以對于零件上的平面、鍵槽、圓柱或孔等規(guī)則特征的表面并非曲面,而是只有三角面片(只在特征邊緣處有頂點(diǎn)),如圖1所示為一帶孔長方體的STL格式模型,要直接拾取該數(shù)字模型內(nèi)的表面(包括孔壁和平面)的測量點(diǎn)是無法實(shí)現(xiàn)的。
圖1 帶孔長方體STL格式模型
(2)測點(diǎn)法向矢量的精確計(jì)算問題
接觸式檢測的測頭是一個(gè)有一定直徑的圓球,當(dāng)測球觸碰工件表面時(shí),機(jī)床所記錄的當(dāng)前點(diǎn)的位置實(shí)質(zhì)上是經(jīng)補(bǔ)償探針長度后得到的測球的中心,因此還需要沿著測量方向再補(bǔ)償測球的半徑r才能真正得到觸碰點(diǎn)的位置,所以如果測量方向(通常選擇工件表面觸碰點(diǎn)的法矢方向)不正確,必將引起較大的測量誤差[3]。如圖2(a)所示,測頭從工件的正上方往下(-Z方向)運(yùn)動(dòng)擬觸碰工件上的P點(diǎn),由于測球有一定的直徑,在測頭下探的過程中測球邊緣先觸碰到P′點(diǎn)即停止了-Z方向運(yùn)動(dòng)并立即將當(dāng)前球心(Q點(diǎn))位置鎖存,此時(shí)再沿-Z方向補(bǔ)償測球半徑r得到的位置與擬測點(diǎn)P點(diǎn)還差一“余弦誤差”[4]。實(shí)踐已證實(shí),接觸式檢測時(shí)測頭沿著測點(diǎn)所在表面的法矢方向觸碰工件是獲得精確測量位置的必要條件。而STL格式的數(shù)字模型因表面元素嚴(yán)重缺失致使測量點(diǎn)法矢的精確計(jì)算存在較大問題。
圖2 不正確的測量方向?qū)磔^大誤差
STL格式零件模型上的平面特征全部由連接邊緣處的三角面片組成,如圖3所示,所有可拾取到的點(diǎn)元素(即三角面片的頂點(diǎn))均位于零件的邊緣轉(zhuǎn)角處,無法直接用于接觸式檢測。因此,基于零件STL格式模型的在機(jī)接觸式測量系統(tǒng)要順利實(shí)現(xiàn)平面特征的測量,必須要先獲取得到平面上的點(diǎn)作為測量點(diǎn)。
圖3 STL格式零件模型上的平面特征
課題組開發(fā)的在機(jī)檢測軟件讀入零件模型并在主界面渲染出零件的原貌,對于操作用戶而言,“所見即可選,所選即可得”是基本的要求。OpenGL基于名字堆棧和命中記錄的拾取機(jī)制可解決此類問題,該拾取機(jī)制是利用鼠標(biāo)的位置調(diào)用了一個(gè)叫g(shù)luPickMatrix()的矩形拾取庫函數(shù),鼠標(biāo)單擊時(shí)即在鼠標(biāo)單擊位置定義了一個(gè)由屏幕往里的狹長形的視景體,所有進(jìn)入此選擇視景體的元素都會(huì)被選中。檢測元素的拾取是要求所看見的最外層(即靠近屏幕層)被選中,因此選擇時(shí)要做到“有的放矢”。課題組基于OpenGL拾取技術(shù),巧妙地利用指向?qū)ο笾羔樦档奈ㄒ恍詫ζ溥x擇模式進(jìn)行了優(yōu)化處理,只將落在鼠標(biāo)點(diǎn)選位置確定的視景體之內(nèi)的第一個(gè)(最上層)三角面片的名稱存儲(chǔ)在一個(gè)堆棧中,即可確定拾取到所要的三角面片。為提高拾取效率,系統(tǒng)設(shè)計(jì)了“矩形快速拾取”和“鼠標(biāo)點(diǎn)選拾取”兩種三角面片的模式。
鑒于STL格式零件模型上的所有平面均由簡化的三角面片組成,其頂點(diǎn)全部位于平面的邊緣位置,是無法直接應(yīng)用于接觸式檢測的。一種簡單的處理方法就是通過計(jì)算平面上每個(gè)三角形的重心位置的坐標(biāo)值作為三角面片上的測量點(diǎn),選用此方法需要拾取待檢測平面上的至少3個(gè)三角面片(每個(gè)三角面片生成1個(gè)測點(diǎn),3點(diǎn)即可表示1個(gè)平面)。
在直角坐標(biāo)系中,任一空間三角形重心的坐標(biāo)應(yīng)是其3個(gè)頂點(diǎn)坐標(biāo)的算術(shù)平均數(shù)(如圖4所示),即空間三角形重心的坐標(biāo)為:
圖4 三角形重心
檢測開始實(shí)施前,通過鼠標(biāo)點(diǎn)選待測平面所有的三角面片并返回每個(gè)三角面片3個(gè)頂點(diǎn)坐標(biāo)值并代入式(1)計(jì)算各個(gè)三角面片的重心坐標(biāo),增加“生成單個(gè)平面測點(diǎn)”菜單功能,調(diào)用計(jì)算所有已選擇三角形的重心坐標(biāo)保存作為測量的理想點(diǎn)元素,并實(shí)時(shí)推送至界面顯示出來。
而對于圖3所示的規(guī)則平面,當(dāng)表達(dá)某一平面的三角面片數(shù)少于3時(shí),則生成的測點(diǎn)數(shù)無法滿足平面測量的最少元素要求,因此還需考慮只有兩個(gè)三角面片或只在某一個(gè)三角面片上檢測至少3個(gè)點(diǎn)的情況。通常地,檢測零件的某區(qū)域所選點(diǎn)是隨機(jī)拾取的,因此三角面片上的測點(diǎn)可借助隨機(jī)函數(shù)rand()來生成。在三角形里隨機(jī)生成點(diǎn)是與三角形的頂點(diǎn)位置有關(guān)的,因此頂點(diǎn)間的向量也是決定生成點(diǎn)位置的關(guān)鍵因素。假定三角形頂點(diǎn)A、B和C,那么可得兩個(gè)向量:
由隨機(jī)函數(shù)rand()生成2個(gè)0~1的隨機(jī)數(shù)x和y并確保x+y的值不大于1,那么可得隨機(jī)點(diǎn):
由前面對STL格式文件結(jié)構(gòu)的分析可知,任意一個(gè)三角面片都有現(xiàn)成的法向矢量,因此可以直接選取該平面內(nèi)任一個(gè)三角面片并調(diào)用其法向矢量值作為接觸式檢測的方向。
STL格式下三維模型的圓柱孔(或軸)壁被簡化為狹長的三角面片,只有圓柱孔(或軸)兩端的邊緣處才有原CAD模型上的“點(diǎn)特征”,三維軟件導(dǎo)出的STL格式的圓柱數(shù)字模型如圖5所示,由于此類規(guī)則特征側(cè)壁上根本沒有點(diǎn)特征,實(shí)施在機(jī)檢測時(shí)孔壁上的測量點(diǎn)是無法通過鼠標(biāo)直接在屏幕上點(diǎn)選得到的。因此,快速、準(zhǔn)確地獲取規(guī)則特征表面上點(diǎn)元素是實(shí)現(xiàn)面向STL格式零件規(guī)則特征在機(jī)檢測順利實(shí)施的先決條件。
圖5 STL格式圓柱模型的渲染效果
對于圓柱(軸和孔可類似看待)類規(guī)則特征,結(jié)合STL格式文件的特點(diǎn),只能從兩端邊緣處的原CAD數(shù)模的點(diǎn)元素著手考慮重構(gòu)內(nèi)壁位置點(diǎn)以滿足檢測的需要。在機(jī)檢測實(shí)施前需要用戶拾?。ɑ蛑貥?gòu))待檢測位置的點(diǎn)元素特征,然后根據(jù)系統(tǒng)算法優(yōu)化檢測路徑。為了更好地反映被測圓柱的特征,圓柱表面的檢測需要分布在圓柱壁的2層且至少5個(gè)點(diǎn)。
STL格式模型上的孔或軸類特征邊緣處的點(diǎn)元素就是CAD數(shù)模表面上的點(diǎn),但是這些邊緣位置無法直接用于接觸式檢測,即拾取到的邊緣點(diǎn)是不能作為檢測原始理想點(diǎn)的。由于普通三軸數(shù)控機(jī)床只能加工與坐標(biāo)軸平行的孔,因此對于孔特征而言,可通過鼠標(biāo)拾取孔邊緣處的多個(gè)點(diǎn)特征(拾取的2個(gè)點(diǎn)元素之間的跨度要盡可能地大,每個(gè)圓面建議共拾取應(yīng)不少于3個(gè)點(diǎn)),然后沿孔深度方向(對于在機(jī)檢測,通常是+Z或=Z向)偏移一定的距離(一般至少要達(dá)到測球直徑的2倍,也可根據(jù)孔深或軸長在彈出的設(shè)置對話框里自行選擇確定)。如果要檢測圓柱度誤差等空間特征,還需在孔的另一頭的邊緣處拾取同樣數(shù)量的孔元素并完成類似的偏移,此時(shí)要充分考慮現(xiàn)有探針的長度,必要時(shí)可安裝加長探針以確保檢測結(jié)果能充分還原加工孔的原貌,如圖6(a)所示,根據(jù)邊緣所選點(diǎn)偏移生成的測點(diǎn)如圖6(b)所示。
圖6 圓柱壁測量點(diǎn)的獲取及生成
根據(jù)課題組前期的實(shí)驗(yàn)驗(yàn)證,測球半徑所帶來的誤差是接觸式測量主要的誤差來源[5]。因此,為了提高測量結(jié)果的精確度,應(yīng)規(guī)范測頭觸碰工件的方法,前期大量的實(shí)驗(yàn)已驗(yàn)證,只有沿著測點(diǎn)法向矢量觸碰工件才能有效地避免因測球半徑所帶來的余弦誤差。因此,計(jì)算出相對精確的圓柱壁測點(diǎn)的法向矢量是實(shí)現(xiàn)圓柱壁精準(zhǔn)測量的首要前提。經(jīng)多次試驗(yàn),得到以下兩種估算圓柱孔壁任意點(diǎn)法矢的方法。
(1)規(guī)則圓柱孔壁任意點(diǎn)法矢
對于規(guī)則型孔,垂直于孔軸線的任意一平面內(nèi)(比如某一邊緣)的3個(gè)點(diǎn)可形成一個(gè)圓,任意點(diǎn)指向該圓圓心的方向即為該點(diǎn)的法向矢量。
(2)非規(guī)則圓柱孔壁任意點(diǎn)法矢
計(jì)算三角網(wǎng)格任意頂點(diǎn)法矢最常用的方法是最早由Taubin[6]提出的離散估算法,其計(jì)算公式為:
式中:Aj為點(diǎn)集N(v)中以任意點(diǎn)vi為頂點(diǎn)的第j個(gè)三角面片的面積;n→Tj為以任意點(diǎn)vi為頂點(diǎn)的單位法矢。
由前述可見圓柱孔壁的三角面片都是一些狹長形的三角形,尤其在曲面突變嚴(yán)重區(qū)域其法矢方向與平緩區(qū)域是截然不同的,而式(3)并沒有考慮三角面片形狀的影響,因此神會(huì)存[7]在Taubin提出的方法的基礎(chǔ)上考慮了三角面片形狀所帶來的影響,即增加了三角形角度的權(quán)重,式(3)被修正為:
其中γj表示點(diǎn)集N(v)中任一點(diǎn)元素vi為頂點(diǎn)并與其相鄰的第j個(gè)三角面片在vi處的內(nèi)角大小,依次將各個(gè)相鄰三角面片的角度權(quán)重加起來后進(jìn)行單位矢量化,即得到了三角面片任意頂點(diǎn)vi處的法矢:
改良后的式(5)充分考慮了任意一點(diǎn)vi的法矢受鄰近各三角面片的走向所影響,如圖7(a)所示,經(jīng)驗(yàn)證其所估算的三角網(wǎng)格曲面任意頂點(diǎn)位置法矢的精度完全可滿足接觸式檢測工件的精度需要,對于非規(guī)則圓柱孔壁任意點(diǎn)法矢均可利用式(5)進(jìn)行估算。但是類似橢圓形孔等特征仍然只有孔兩端的邊緣處才有頂點(diǎn),孔內(nèi)壁的表面只有狹長的三角面片,因此需要特別處理一下。課題組根據(jù)式(5)計(jì)算頂點(diǎn)法矢對鄰接三角面片元素的需要,通過已選點(diǎn)人工擬合圓的方法在任一測點(diǎn)周邊構(gòu)造出鄰近至少4個(gè)頂點(diǎn),如圖7(b)所示,估算的法矢值與CREO計(jì)算得到的法矢值偏差在5%以內(nèi),如果排除計(jì)算機(jī)不同進(jìn)制間數(shù)據(jù)轉(zhuǎn)換和位數(shù)截取所帶來的誤差,該偏差基本可忽略,因此,通過該方法得到的測點(diǎn)法向矢量完全可以滿足在機(jī)檢測對測點(diǎn)法矢的精度要求。
圖7 曲面上任意點(diǎn)vi的法矢與鄰近點(diǎn)
基于數(shù)控加工精度在機(jī)檢測系統(tǒng)實(shí)施在機(jī)檢測時(shí)零件STL格式數(shù)模下其規(guī)則特征測點(diǎn)無法拾取及其法向矢量無法精確計(jì)劃等問題,提出了規(guī)則平面、規(guī)則孔和非規(guī)則孔孔壁測量點(diǎn)的生成策略,并在構(gòu)造的鄰近測點(diǎn)的基礎(chǔ)上對孔壁任意測點(diǎn)的法向矢量進(jìn)行了估算,與三維軟件所計(jì)算的法向矢量進(jìn)行對比表明誤差完全可滿足在機(jī)檢測的精度要求,實(shí)現(xiàn)了零件STL格式數(shù)模規(guī)則孔特征表面的在機(jī)檢測。