諸進才,胡艷娥
(廣州鐵路職業技術學院機電工程學院,廣州 510430)
STL(StereoLithography,原意為“立體光刻”)是由美國3D Systems公司創立、原本用于立體光刻計算機輔助設計軟件的一種文件格式[1]。零件的STL文件格式采用了三角面片近似地描述三維模型外表面的幾何形狀,這種模型表述得非常簡單,既沒有顏色和材質貼圖,更沒有其他的如平面、孔等零件三維模型的屬性,因此也被稱為“輕量化模型”,是工程應用上最為簡潔和常用的一種交換文件格式之一。
基于PC機的數控機床的在機接觸式檢測系統是通過為數控機床配備一種檢測專用接觸式測頭以及相應的檢測代碼所構成的一種經濟、快捷卻非常有效的零件加工質量控制手段[2]。該技術是在數控機床完成零件的半精加工或精加工后,只更換加工用刀頭為檢測用測頭、調用檢測用程序即可在數控機床工作臺上完成檢測,其檢測結果實時呈現在用戶面前,因此被稱為數控加工精度“在線檢測”或“在機檢測”。實施數控加工精度在機檢測時,首先在基于VISUAL STUDIO開發的在機檢測軟件上讀取加工零件(即待檢測零件)的設計模型(目前只支持文件的STL格式)并拾取零件表面的理想設計元素(即待檢測的點特征)并規劃成自動檢測路徑,機床停止當前加工操作并將加工刀具更換成測頭、調用相關檢測程序和誤差補償程序即可在數控機床上不拆卸工件對工件進行快速檢測和及時反饋。STL格式零件模型因其表面保留的點特征元素是CAD設計模型的原始數據,且可從任何三維設計軟件輕易導出,因此常被作為不同軟件間的文件交換標準。
三維建模軟件設計好零件結構后即可輸出STL格式,開發的在機檢測軟件可讀取ASCII碼的STL格式文件,任一零件模型輸出ASCII碼的STL格式文件結構如下:
solid<file name> //文件名
facet normalni,nj,nk//該三角面片的法向矢量,方向由里指向外。三角面片開始
outer loop //loop開始,符合右手定則
vertexV1x,V1y,V1z//三角面片第1個頂點
vertexV2x,V2y,V12z//三角面片第2個頂點
vertexV2x,V2y,V2z//三角面片第3個頂點
end loop //loop結束
endfacet //三角面片結束
……
endsolid<file name> //文件結束
分析STL格式文件的結構可知,該文件類型應用于接觸式檢測至少存在兩個問題,分別分析如下。
(1)規則特征表面無點可拾取
開發的數控加工精度在機檢測系統能快速讀取加工零件數字模型的STL格式文件并進行三維渲染,可通過電腦屏幕操作鼠標任意拾取零件模型上的點元素作為在機檢測的基準(即設計理想點),為下一步的檢測路徑生成和檢測結果對比提供理論依據。然而由于STL格式模型表面特征全部由三角面片(只由3個頂點的坐標+1個表示面片方向的法向矢量組成)近似勾勒而成,只有三角面片上的3個頂點才是三維數字模型表面上的原始幾何元素。所以對于零件上的平面、鍵槽、圓柱或孔等規則特征的表面并非曲面,而是只有三角面片(只在特征邊緣處有頂點),如圖1所示為一帶孔長方體的STL格式模型,要直接拾取該數字模型內的表面(包括孔壁和平面)的測量點是無法實現的。

圖1 帶孔長方體STL格式模型
(2)測點法向矢量的精確計算問題
接觸式檢測的測頭是一個有一定直徑的圓球,當測球觸碰工件表面時,機床所記錄的當前點的位置實質上是經補償探針長度后得到的測球的中心,因此還需要沿著測量方向再補償測球的半徑r才能真正得到觸碰點的位置,所以如果測量方向(通常選擇工件表面觸碰點的法矢方向)不正確,必將引起較大的測量誤差[3]。如圖2(a)所示,測頭從工件的正上方往下(-Z方向)運動擬觸碰工件上的P點,由于測球有一定的直徑,在測頭下探的過程中測球邊緣先觸碰到P′點即停止了-Z方向運動并立即將當前球心(Q點)位置鎖存,此時再沿-Z方向補償測球半徑r得到的位置與擬測點P點還差一“余弦誤差”[4]。實踐已證實,接觸式檢測時測頭沿著測點所在表面的法矢方向觸碰工件是獲得精確測量位置的必要條件。而STL格式的數字模型因表面元素嚴重缺失致使測量點法矢的精確計算存在較大問題。

圖2 不正確的測量方向將帶來較大誤差
STL格式零件模型上的平面特征全部由連接邊緣處的三角面片組成,如圖3所示,所有可拾取到的點元素(即三角面片的頂點)均位于零件的邊緣轉角處,無法直接用于接觸式檢測。因此,基于零件STL格式模型的在機接觸式測量系統要順利實現平面特征的測量,必須要先獲取得到平面上的點作為測量點。

圖3 STL格式零件模型上的平面特征
課題組開發的在機檢測軟件讀入零件模型并在主界面渲染出零件的原貌,對于操作用戶而言,“所見即可選,所選即可得”是基本的要求。OpenGL基于名字堆棧和命中記錄的拾取機制可解決此類問題,該拾取機制是利用鼠標的位置調用了一個叫gluPickMatrix()的矩形拾取庫函數,鼠標單擊時即在鼠標單擊位置定義了一個由屏幕往里的狹長形的視景體,所有進入此選擇視景體的元素都會被選中。檢測元素的拾取是要求所看見的最外層(即靠近屏幕層)被選中,因此選擇時要做到“有的放矢”。課題組基于OpenGL拾取技術,巧妙地利用指向對象指針值的唯一性對其選擇模式進行了優化處理,只將落在鼠標點選位置確定的視景體之內的第一個(最上層)三角面片的名稱存儲在一個堆棧中,即可確定拾取到所要的三角面片。為提高拾取效率,系統設計了“矩形快速拾取”和“鼠標點選拾取”兩種三角面片的模式。
鑒于STL格式零件模型上的所有平面均由簡化的三角面片組成,其頂點全部位于平面的邊緣位置,是無法直接應用于接觸式檢測的。一種簡單的處理方法就是通過計算平面上每個三角形的重心位置的坐標值作為三角面片上的測量點,選用此方法需要拾取待檢測平面上的至少3個三角面片(每個三角面片生成1個測點,3點即可表示1個平面)。
在直角坐標系中,任一空間三角形重心的坐標應是其3個頂點坐標的算術平均數(如圖4所示),即空間三角形重心的坐標為:

圖4 三角形重心

檢測開始實施前,通過鼠標點選待測平面所有的三角面片并返回每個三角面片3個頂點坐標值并代入式(1)計算各個三角面片的重心坐標,增加“生成單個平面測點”菜單功能,調用計算所有已選擇三角形的重心坐標保存作為測量的理想點元素,并實時推送至界面顯示出來。
而對于圖3所示的規則平面,當表達某一平面的三角面片數少于3時,則生成的測點數無法滿足平面測量的最少元素要求,因此還需考慮只有兩個三角面片或只在某一個三角面片上檢測至少3個點的情況。通常地,檢測零件的某區域所選點是隨機拾取的,因此三角面片上的測點可借助隨機函數rand()來生成。在三角形里隨機生成點是與三角形的頂點位置有關的,因此頂點間的向量也是決定生成點位置的關鍵因素。假定三角形頂點A、B和C,那么可得兩個向量:

由隨機函數rand()生成2個0~1的隨機數x和y并確保x+y的值不大于1,那么可得隨機點:

由前面對STL格式文件結構的分析可知,任意一個三角面片都有現成的法向矢量,因此可以直接選取該平面內任一個三角面片并調用其法向矢量值作為接觸式檢測的方向。
STL格式下三維模型的圓柱孔(或軸)壁被簡化為狹長的三角面片,只有圓柱孔(或軸)兩端的邊緣處才有原CAD模型上的“點特征”,三維軟件導出的STL格式的圓柱數字模型如圖5所示,由于此類規則特征側壁上根本沒有點特征,實施在機檢測時孔壁上的測量點是無法通過鼠標直接在屏幕上點選得到的。因此,快速、準確地獲取規則特征表面上點元素是實現面向STL格式零件規則特征在機檢測順利實施的先決條件。

圖5 STL格式圓柱模型的渲染效果
對于圓柱(軸和孔可類似看待)類規則特征,結合STL格式文件的特點,只能從兩端邊緣處的原CAD數模的點元素著手考慮重構內壁位置點以滿足檢測的需要。在機檢測實施前需要用戶拾取(或重構)待檢測位置的點元素特征,然后根據系統算法優化檢測路徑。為了更好地反映被測圓柱的特征,圓柱表面的檢測需要分布在圓柱壁的2層且至少5個點。
STL格式模型上的孔或軸類特征邊緣處的點元素就是CAD數模表面上的點,但是這些邊緣位置無法直接用于接觸式檢測,即拾取到的邊緣點是不能作為檢測原始理想點的。由于普通三軸數控機床只能加工與坐標軸平行的孔,因此對于孔特征而言,可通過鼠標拾取孔邊緣處的多個點特征(拾取的2個點元素之間的跨度要盡可能地大,每個圓面建議共拾取應不少于3個點),然后沿孔深度方向(對于在機檢測,通常是+Z或=Z向)偏移一定的距離(一般至少要達到測球直徑的2倍,也可根據孔深或軸長在彈出的設置對話框里自行選擇確定)。如果要檢測圓柱度誤差等空間特征,還需在孔的另一頭的邊緣處拾取同樣數量的孔元素并完成類似的偏移,此時要充分考慮現有探針的長度,必要時可安裝加長探針以確保檢測結果能充分還原加工孔的原貌,如圖6(a)所示,根據邊緣所選點偏移生成的測點如圖6(b)所示。

圖6 圓柱壁測量點的獲取及生成
根據課題組前期的實驗驗證,測球半徑所帶來的誤差是接觸式測量主要的誤差來源[5]。因此,為了提高測量結果的精確度,應規范測頭觸碰工件的方法,前期大量的實驗已驗證,只有沿著測點法向矢量觸碰工件才能有效地避免因測球半徑所帶來的余弦誤差。因此,計算出相對精確的圓柱壁測點的法向矢量是實現圓柱壁精準測量的首要前提。經多次試驗,得到以下兩種估算圓柱孔壁任意點法矢的方法。
(1)規則圓柱孔壁任意點法矢
對于規則型孔,垂直于孔軸線的任意一平面內(比如某一邊緣)的3個點可形成一個圓,任意點指向該圓圓心的方向即為該點的法向矢量。
(2)非規則圓柱孔壁任意點法矢
計算三角網格任意頂點法矢最常用的方法是最早由Taubin[6]提出的離散估算法,其計算公式為:

式中:Aj為點集N(v)中以任意點vi為頂點的第j個三角面片的面積;n→Tj為以任意點vi為頂點的單位法矢。
由前述可見圓柱孔壁的三角面片都是一些狹長形的三角形,尤其在曲面突變嚴重區域其法矢方向與平緩區域是截然不同的,而式(3)并沒有考慮三角面片形狀的影響,因此神會存[7]在Taubin提出的方法的基礎上考慮了三角面片形狀所帶來的影響,即增加了三角形角度的權重,式(3)被修正為:

其中γj表示點集N(v)中任一點元素vi為頂點并與其相鄰的第j個三角面片在vi處的內角大小,依次將各個相鄰三角面片的角度權重加起來后進行單位矢量化,即得到了三角面片任意頂點vi處的法矢:

改良后的式(5)充分考慮了任意一點vi的法矢受鄰近各三角面片的走向所影響,如圖7(a)所示,經驗證其所估算的三角網格曲面任意頂點位置法矢的精度完全可滿足接觸式檢測工件的精度需要,對于非規則圓柱孔壁任意點法矢均可利用式(5)進行估算。但是類似橢圓形孔等特征仍然只有孔兩端的邊緣處才有頂點,孔內壁的表面只有狹長的三角面片,因此需要特別處理一下。課題組根據式(5)計算頂點法矢對鄰接三角面片元素的需要,通過已選點人工擬合圓的方法在任一測點周邊構造出鄰近至少4個頂點,如圖7(b)所示,估算的法矢值與CREO計算得到的法矢值偏差在5%以內,如果排除計算機不同進制間數據轉換和位數截取所帶來的誤差,該偏差基本可忽略,因此,通過該方法得到的測點法向矢量完全可以滿足在機檢測對測點法矢的精度要求。

圖7 曲面上任意點vi的法矢與鄰近點
基于數控加工精度在機檢測系統實施在機檢測時零件STL格式數模下其規則特征測點無法拾取及其法向矢量無法精確計劃等問題,提出了規則平面、規則孔和非規則孔孔壁測量點的生成策略,并在構造的鄰近測點的基礎上對孔壁任意測點的法向矢量進行了估算,與三維軟件所計算的法向矢量進行對比表明誤差完全可滿足在機檢測的精度要求,實現了零件STL格式數模規則孔特征表面的在機檢測。