任清川, 何賽松, 徐 雷
(四川大學(xué)制造科學(xué)與工程學(xué)院,四川 成都 610065)
數(shù)控管切割機現(xiàn)在已經(jīng)大量應(yīng)用在機械、建筑、石油、化工等領(lǐng)域,與傳統(tǒng)的先放樣板、再繪制相貫線切割的手工切割管材相比,它在加工精度、加工時間、生產(chǎn)效率以及自動化程度上已經(jīng)取得了很大的進(jìn)步。但數(shù)控管切割機結(jié)構(gòu)復(fù)雜,操作困難,技術(shù)員需要有機床操作經(jīng)驗,才能設(shè)計出切割工藝[1]。如果都采用實際機床來練習(xí)操作,容易產(chǎn)生誤操作,損壞機床,因此,在實際切割前進(jìn)行三維動態(tài)加工仿真顯得十分必要。
一般的數(shù)控管加工機床結(jié)構(gòu)很復(fù)雜,如圖1所示。而OpenGL作為常用的三維開發(fā)圖形庫卻只能提供幾種簡單規(guī)則的3D物體模型,難于顯示清楚管切割機床的復(fù)雜三維結(jié)構(gòu)。因此,我們需要通過其他建模工具來輔助建立機床三維實體模型數(shù)據(jù)庫[2]。3DS Max作為Autodesk公司開發(fā)的三維動畫渲染和制作軟件,在數(shù)控機床的仿真中能做出逼真的三維模型。為此,我們先在3Ds max中建立復(fù)雜的數(shù)控管切割機3D模型,然后在OpenGL中通過參數(shù)驅(qū)動導(dǎo)入該3D靜態(tài)模型,模擬出整個管切割過程。
圖1 數(shù)控管切割機示意圖(實際機床坐標(biāo)系)
本文首先對 3DS文件的數(shù)據(jù)組織形式做了簡單分析,并研究了導(dǎo)入的靜態(tài)3DS模型如何在參數(shù)驅(qū)動下進(jìn)行相應(yīng)的運動。相對于傳統(tǒng)的根據(jù)碰撞檢測技術(shù)再現(xiàn)相貫線形狀的計算復(fù)雜和運算量大,提出了新的相貫線的計算方法,簡化了計算過程,提高了計算效率,最終實現(xiàn)了五軸四聯(lián)動管切割機的動態(tài)加工仿真。
3DS文件是基于"塊"存儲的,每個塊均包含了一些信息,如頂點、紋理、材質(zhì)等數(shù)據(jù)[3]。每個塊都包含一個ID和下一個塊的偏移量:塊的高位是ID,是一個用前2個字節(jié)保存的整型數(shù),作用是確定該塊的含義;塊的低位是塊的偏移量,是一個用后4個字節(jié)保存的長整型數(shù)。所有的 3DS文件讀取都是從有且只有的這一個主塊開始,還包含有其他子塊,存儲了所有的 3DS模型數(shù)據(jù)。根據(jù)其特點,我們采用遞歸的方式來讀取3DS文件。3DS文件的內(nèi)部數(shù)據(jù)結(jié)構(gòu)見參考文獻(xiàn)[4]。
3DS文件是按嵌套的塊結(jié)構(gòu)進(jìn)行存儲的,因此可將其按塊進(jìn)行劃分,把劃分的塊 ID定義成宏,包括基本塊、主塊、對象塊、材質(zhì)塊、面塊等[2],部分宏定義如下所示:
讀取的方式是從模型文件中讀取每一個塊頭,根據(jù)塊 ID來判斷塊保存的信息,然后進(jìn)行相應(yīng)的處理。在塊處理過程中,如果包含有子塊,也是通過相同的方式,讀取一個子塊的塊頭,判斷塊信息,再進(jìn)行相應(yīng)的數(shù)據(jù)提取和存放處理。程序讀入了每個對象塊的頂點塊、面塊、紋理塊等數(shù)據(jù),然后將它們的信息保存到預(yù)先定義的數(shù)據(jù)結(jié)構(gòu)中,把一個復(fù)雜的三維模型轉(zhuǎn)化成了簡單的點、面信息。OpenGL提供的處理函數(shù)可以很有效進(jìn)行處理這些簡單的點、面信息,在OpenGL創(chuàng)建的三維空間里,我們可以通過這些數(shù)據(jù)信息,將3D Studio Max中三維模型再現(xiàn)在自己的三維場景里[5]。
OpenGL搭建的機床模型,與實際機床之間在形狀、尺寸等方面是完全統(tǒng)一的。而兩者的坐標(biāo)系在標(biāo)示上有一定的差異。實際機床的Y軸與仿真坐標(biāo)系的X軸是重合的;實際機床的Z1軸、Z2軸、θ軸均在仿真坐標(biāo)系的XOY平面內(nèi),且Z1軸、Z2軸的方向與仿真坐標(biāo)系中的Y軸方向是一致的;實際機床的γ軸是繞其Y軸旋轉(zhuǎn),而仿真坐標(biāo)系的γ軸是繞其X軸旋轉(zhuǎn)的。
3D Studio Max中建立的機床各個運動部件的靜態(tài)三維模型,都是以各自的設(shè)計基準(zhǔn)點分別設(shè)計的,在OpenGL中需要將他們按照實際的機床結(jié)構(gòu)裝配在一起,并且各個運動部件必須能根據(jù)運動參數(shù)的變換而進(jìn)行相應(yīng)的運動。此時需要對三維模型轉(zhuǎn)化成的點、面信息進(jìn)行數(shù)學(xué)運算處理才能實現(xiàn)整個機床的裝配和運動,現(xiàn)在以典型的割炬為例,如圖2所示。數(shù)控管切割機床割炬的運動控制,是整個數(shù)控系統(tǒng)的核心,通過控制割炬的沿X軸和Y軸平移,并且在XOY平面繞θ軸進(jìn)行擺動,配合切割管自身的旋轉(zhuǎn)運動,才可以切割出管件的相貫線和坡口。
圖2 割炬切割示意圖(OpenGL仿真坐標(biāo)系)
割炬靜態(tài)模型的設(shè)計基準(zhǔn)點 A坐標(biāo)為(0,0,0),組成割炬所有點的坐標(biāo),都是相對于這一點的,導(dǎo)入OpenGL時,需要注意OpenGL和3DS MAX坐標(biāo)系統(tǒng)的不一致,需將導(dǎo)入的坐標(biāo)數(shù)據(jù)繞X軸旋轉(zhuǎn)90度,才能在OpenGL中正確顯示。
設(shè)導(dǎo)入的3D靜態(tài)割炬模型上任意一點的坐標(biāo)值為(X,Y,Z),在加工位置時,設(shè)計基準(zhǔn)點A坐標(biāo)變?yōu)椋é,ΔY,ΔZ),割炬的實際切割角為α。這時,將導(dǎo)入的割炬的所有點的坐標(biāo)先繞Z軸旋轉(zhuǎn)α,即
再將(x',y',z')沿X軸方向偏移ΔX,沿Y軸方向偏移ΔY,沿 Z軸方向偏移ΔZ,將割炬全部的點坐標(biāo)做同樣的處理,即可使靜態(tài)割炬模型移動和旋轉(zhuǎn)到加工位置。
通過機床的仿真加工,我們可以清楚的了解整個切割過程,切割完成后顯示出切割出的管件形狀,可以直觀地驗證切割參數(shù)是否設(shè)定合理,計算數(shù)據(jù)是否正確等問題。在仿真加工中,相貫線的形成需要我們計算割炬與管件的碰撞點坐標(biāo),碰撞檢測技術(shù)是在這方面較常用的技術(shù)。
目前常見的碰撞檢測算法可分為3類:空間分解法、包圍盒法和射線與三角面相交測試法,其中包圍盒法較為常用[6]。傳統(tǒng)的相貫線求法是采用“包圍盒法”結(jié)合“射線與三角面相交測試法”,而主要的方法就是割炬的射線與管的圓柱面的相交測試,與通過檢測出割炬與管的碰撞點,再將這些點平滑地連接起來,就得到切割出的相貫線,該算法描述如下:
2)該方法在相交測試計算前應(yīng)首先判斷割炬射線與管圓柱是否有碰撞相交,利用AABB包圍盒法建立一個包圍切割管的平行于坐標(biāo)軸的最小六面體,在通過割炬的射線與6面的相交判斷來測試割炬軸線與切割管是否有交點[8]。
3)判斷有碰撞后,求出管件的內(nèi)外壁方程,聯(lián)立管件的內(nèi)外壁方程與直線方程求解,可以導(dǎo)出計算結(jié)果。外壁方程為X0+L),內(nèi)壁方程均為 Y2+ Z2= ( R - b )2(X0< X <X0+L),其中X0為圓柱管在X軸方向的起始位置,L為管件的長度,R為管外半徑,b為管壁厚。但構(gòu)成最后的相貫線需要大量的點坐標(biāo),我們采用割炬軸線方程繞X軸逐漸旋轉(zhuǎn),求出在不同位置的割炬軸線與管件內(nèi)外壁的交點,得出構(gòu)建相貫線所需要的點,由于空間中直線于圓柱管的交點可能有兩個,需要對數(shù)據(jù)進(jìn)行再分析,去掉與實際情況不相符的數(shù)據(jù)。最后就得到相貫線上的點坐標(biāo)。
利用射線與圓柱面相交的方法涉及到射線方向向量和面方程等的求解,同時需要大量碰撞檢測的驗證,從計算的復(fù)雜程度和難度都需要我們研究出一種簡單易行的方法。所以我們根據(jù)實際情況,對傳統(tǒng)的基于碰撞檢測的技術(shù)做了改進(jìn),主要思路是把射線與圓柱面的相交向射線與母線的相交方向轉(zhuǎn)移。該改進(jìn)算法過程如下:
1)在計算前,需要調(diào)整涉及到后續(xù)運算的各個運動部件。在裝配整個機床時,根據(jù)計算機圖像學(xué)知識,使被切割管的軸線與OpenGL環(huán)境的X軸軸線重合,并且使切割管可以繞X軸做旋轉(zhuǎn)運動(實現(xiàn)數(shù)控機床的 γ軸運動),割炬的切割點在 XOY平面內(nèi)上下平移和左右平移(分別實現(xiàn)數(shù)控機床的Z1軸、Z2軸運動和Y軸運動),割炬圍繞通過切割點并平行于 Z軸的直線擺動(實現(xiàn)數(shù)控機床的θ軸運動)。
2)我們同樣需要求出在當(dāng)前加工位置割炬的直線方程,如圖3。假設(shè)機床在當(dāng)前加工位置時,γ軸的值為γ0,Y軸的值為Y0,Z1軸的值Z10,Z2軸的值為Z20,實際切割角α的值為α0,割炬的值為G。因為割炬的軸線是在XOY平面內(nèi),所以設(shè)其方程為y = kx + b。其中直線的斜率k= tan( α +90),當(dāng) α 為 0時,直線的斜率k =∞;由當(dāng)前機床加工位置,可以計算出割炬當(dāng)前加工點 A的坐標(biāo)的 x0= Y0,y0=R+G×cosα0,則 b = y0- kx0。
3)被切割管與割炬軸線的交點,必然在圓柱管內(nèi)外壁在 XOY平面內(nèi)的母線上,然后聯(lián)立割炬軸線的直線方程與管件內(nèi)外壁母線,就能求出了當(dāng)前加工位置時割炬切割出的內(nèi)外壁相貫線的點坐標(biāo)。當(dāng)機床的各軸運動到下一個加工位置時,同理也可求出割炬切割出的內(nèi)外壁相貫線的點坐標(biāo),以此類推,即可求出所有切割點坐標(biāo)(所有的切割點數(shù)等于細(xì)分點數(shù))。
圖3 改進(jìn)的相貫線求解方法
4)由于在所有 γ角度求出的點均在 XOY平面,為了實現(xiàn)它的三維顯示效果,需要把對應(yīng)的γ角度的點通過三維旋轉(zhuǎn)矩陣的運算來繞X軸旋轉(zhuǎn)相應(yīng)的γ角度,再將所有的點平滑地連接在一起,從而就得到了完整的兩條內(nèi)外壁相貫線。
為了驗證新方法在實時性和效率方面的情況,我們做了一個對比實驗來驗證新相貫線的求解方法。表1是兩種處理方法對幾種典型模型的實際處理時間對比,可以看出,細(xì)分點數(shù)越大,新方法的改進(jìn)效果就越明顯。對于一般的細(xì)分點數(shù)(360),新方法的平均計算速度是原有方法的2倍至3倍,而對于較大的細(xì)分點數(shù),計算速度提高的效果更加明顯。
表1 兩種方法的比較
我們通過計算出的內(nèi)外相貫線數(shù)據(jù)建模(采用貼三角片的方法),可以對新模型的準(zhǔn)確性進(jìn)行很好的驗證[9]。三維模型如圖4所示。
圖4 加工區(qū)域結(jié)果顯示
為了滿足數(shù)控管切割機床在實際生產(chǎn)加工中對三維仿真加工的需求,本文采用導(dǎo)入機床3Ds靜態(tài)模型,并在OpenGL中對靜態(tài)模型進(jìn)行參數(shù)驅(qū)動的方法,實現(xiàn)了機床的三維仿真加工運動。同時相對于根據(jù)碰撞檢測技術(shù)求解切割后管材的相貫線形狀的方法,提出了改進(jìn)算法,該算法通過了快速性、準(zhǔn)確性等的實驗驗證,研究成果已用于五軸四聯(lián)動數(shù)控管切割機的研制當(dāng)中。
[1] 王國棟,閻祥安,肖聚亮,等. 管端相貫線坡口切割割炬位姿控制[J]. 天津大學(xué)學(xué)報,2005,38(8):684-688.
[2] 趙文廣,李仲學(xué),李翠平. 面向工程可視化仿真的VC++,OpenGL與3DS集成技術(shù)[J]. 北京科技大學(xué)學(xué)報,2001,23(6): 563-565.
[3] 尹士偉,張光年,郭新宇. 一種控制3DS模型的新方法的研究與實現(xiàn)[J]. 圖像處理,2007,23(9):307-308.
[4] 胡平平,劉建明,王晶杰. OpenGL顯示3DS模型若干問題的研究[J]. 工程圖學(xué)學(xué)報,2010,31(4):189-193.
[5] 殷素峰,高雪強,楊勝強. 在 OpenGL環(huán)境下開發(fā)3DS文件瀏覽器[J]. 工程圖學(xué)學(xué)報,2005,26(6):22-25.
[6] 袁麗娜,趙貴斌. 碰撞檢測技術(shù)及在橋梁視景仿真中的應(yīng)用[J]. 工程圖學(xué)學(xué)報,2010,31(3): 21-26.
[7] [美]Samuel R B. 3D計算機圖形學(xué)(OpenGL版)[M].唐龍等譯. 北京: 清華大學(xué)出版社,2006: 239-248.
[8] 王曉榮,王 萌,李春貴. 基于 AABB 包圍盒的碰撞檢測算法的研究[J]. 計算機工程與科學(xué),2010,32(4): 59-61.
[9] [美]Dave S,Mason W,Jackie N,et al. OpenGL 編程指南(第 5版)[M]. 徐 波等譯. 北京: 機械工業(yè)出版社,2006: 13-16,266-296.