李 凡 王德成 張 林 程 鵬② 付 濤
(①機械科學研究總院,北京100044;②北京科技大學,北京100083)
彈簧是一種重要的工業基礎零部件,已有螺旋彈簧、板類彈簧、桿類彈簧、彈性元件等四大類近1 800個品種[1]。我國彈簧行業受限于數字化水平,在進行彈簧加工時,長期采用面向機床的加工方式,必須由人工將彈簧形狀參數轉化為機床各軸運動進給參數[2],這種方式對調機者依賴程度高,且數字化、自動化水平與生產效率低下,因此企業對于基于數控系統的彈簧參數化在線建模軟件的需求日益增加[3-4]。目前已有文獻對彈簧建模進行了研究,但主要集中于針對螺旋彈簧單一結構建模研究或基于各類商業三維造型軟件平臺[5-7](如 AutoCAD、Pro/E、SolidWorks 等),存在價格昂貴、體系龐大且封閉、專業性強和操作復雜等缺點,而且也很難與彈簧加工數控系統進行集成,無法很好地滿足企業目前需求,限制了彈簧行業數字化智能化發展。
任何復雜壓簧、拉簧、扭簧和異形彈簧,其幾何結構均可分解成圓柱、折角和螺旋3種基本結構特征單元,本文通過建立參數化數學模型對單元特征描述和表達,基于QT和OpenGL圖形庫[8],以C++實現對結構特征單元的參數化實體建模程序編寫,各結構特征單元之間通過空間變換自由拼接組合,最終實現參數化彈簧零件整體的三維建模。
OpenGL利用點、線、三角形或四邊形面片等基本幾何圖元來構造復雜的幾何形體。在構建圓柱、折角和螺旋3種彈簧結構特征單元實體時,需要對其進行離散化處理,將實體表面離散為無數的三角形或四邊形面片,通過一系列首尾相接的空間面片,最終形成實體三維造型。OpenGL在模型局部坐標系下構建彈簧結構特征單元三維實體,起點坐標為局部坐標系坐標原點,起點方向沿y軸正方向。
彈簧結構特征單元模型構造時,采用面向特征的參數化建模思想,建模時輸入相應的特征參數,系統自動實現特征造型。對于圓柱特征單元,其主要特征參數為圓柱底面直徑d和圓柱長度length;折角特征單元的主要特征參數為曲率半徑R、折彎角度angle和截面圓直徑d;螺旋特征單元的主要特征參數為螺旋中徑R、節距t、圈數n和截面圓直徑d。
基于OpenGL進行圓柱、折角與螺旋特征建模時,沿特征中心線軸向將其離散為β個小圓柱段,各小圓柱段兩截面圓沿其周向進一步離散為α個均勻點陣。以截面圓圓心和圓周均勻點陣上相鄰兩點為頂點,分別依次連接形成α個連續小三角形面片,擬合成小圓柱段兩底面實體;取兩截面圓上相對應的四點均勻點陣,依次連接形成α個小四邊形面片,離散的四邊形面片沿圓周方向拼接,擬合成小圓柱段側面實體。只要α和β取得合適,將離散的小圓柱段沿特征中心線軸向拼接,便能夠形成真實感較強的結構特征單元實體模型,如圖1所示。各結構單元起點坐標均為局部坐標oxyz坐標原點[0 0 0],起點方向向量為y軸正方向[0 1 0],下底面位于xoz平面,成形方向默認沿y軸向x軸負方向偏移。

如圖1a所示,對圓柱特征單元離散模型,P為第i個圓柱段上第j個等分點,其坐標可表示為:

式中:length為圓柱長度;d為截面圓周直徑;θ為圓柱截面圓離散為α個均勻點陣后每份對應的圓心角,θ=2π×i/α;l為第 i個圓柱段距底面高度。
如圖1b所示,對折角特征單元離散模型,P為折角第i個圓柱段上的第j個等分點,其坐標可表示為

式中:R為折角曲率半徑,d為截面圓周直徑;θ為折角截面圓周離散為α份后每份對應的角度,θ=2π×j/α,σ為折角離散為β份小圓柱段后,每段上截面圓圓心與坐標原點連線與 x軸正方向夾角,σ=angle×i/β;angle為折角折彎角度。
如圖1c所示,對螺旋特征單元離散模型,P為螺旋第i個圓柱段上的第j個等分點,其坐標可表示為

式中:R為螺旋體螺旋半徑;d為截面圓周直徑;θ為螺旋體截面圓周離散為α份后每份對應的角度,θ=2π×j/α;σ為螺旋離散為β份圓柱段后每段上截面圓圓心與坐標原點連線在xoy平面投影與x軸正方向夾角,σ=2π×i/β;t為每段圓柱段所對應的螺旋升量,t=j×T/β;T為螺旋體旋轉一圈的節距。
構建彈簧結構特征單元三維實體時,以螺旋特征為例,按軟件系統提示,依次輸入螺旋中徑、節距、圈數和鋼絲直徑,默認螺旋體螺旋徑向離散份數為100,截面圓周離散份數為360,并利用 OpenGL接口函數glColor()對螺旋體三維實體模型進行著色處理,操作過程、離散模型與三維實體效果如圖2所示。

根據要求構建完成彈簧零件各結構特征單元后,需要完成各特征單元之間的拼接,以形成完整的彈簧零件三維模型。彈簧結構特征單元三維模型均構建在其本地局部坐標系下,而完整的彈簧零件需要在世界坐標系下進行三維實體建模,因此需要實現各結構特征單元由本地局部坐標系向世界坐標系下的圖形坐標變換,并按序對世界坐標系下的各結構特征單元按照一定的規則進行拼接,最終實現彈簧零件的三維實體造型。基本流程如下:
(1)在OpenGL世界坐標系OXYZ下,構建本地局部坐標系oxyz,對于第一段彈簧基本結構特征單元,其局部坐標系與世界坐標坐標重合;其他段結構特征單元將上一段結構特征單元世界坐標系下的終點坐標和方向作為新起點坐標與方向,構建本地局部坐標系,坐標原點為起點,y軸正方向與起點方向一致。
(2)基于局部坐標系oxyz,從坐標原點出發,沿y軸正方向構建彈簧零件基本結構特征單元幾何信息模型,對彈簧結構特征單元各參數進行賦值。
(3)基于局部坐標系下的彈簧結構特征單元幾何信息模型參數,計算局部坐標系下該結構特征單元終點坐標和方向,經過坐標變換后,得出該單元在世界坐標系下的終點坐標和方向向量。
(4)在局部坐標系oxyz下,按彈簧基本結構特征單元類型和參數,構建彈簧基本結構特征單元三維實體模型。
(5)將在局部坐標系下構建的彈簧結構特征單元模型,經過圖形坐標變換,移動至世界坐標系下的起點位置,對單元進行拼接,并根據方向向量調整拼接時的擺放姿態。
(6)添加新結構特征單元,將計算得到的該單元世界坐標系下的終點坐標和方向賦值為新結構特征單元的起點坐標和方向,基于新的起點坐標和方向,進行下一階段彈簧基本結構特征單元的幾何信息模型與三維實體造型的構建。
(7)經過連續遍歷拼接,生成彈簧零件完整的幾何模型。
在局部坐標系下構建彈簧結構特征單元簡化模型,如圖3所示。S'為第n-1段彈簧結構特征單元起點,E'為第n-1段彈簧結構特征單元終點,圖3三分圖分別對應圓柱、折角和螺旋3種結構特征單元。局部坐標系下,起點 S'坐標為原點[0 0 0],方向向量Vs'為 y軸 正方向[0 1 0];終點 E'坐標為

根據圓柱、折角和螺旋的參數方程與起點坐標、方向,可以求出在局部坐標系下,第n-1段彈簧基本結構特征單元起點和終點的坐標與方向向量如表1所示。

表1 彈簧基本結構特征單元起點和終點的局部坐標與方向向量
如圖4所示,局部坐標系 oxyz向世界坐標系OXYZ的坐標變換為組合變換,將世界坐標系下的局部坐標系oxyz視為一空間物體,首先將其經過旋轉變換繞世界坐標系X軸和Z軸分別旋轉ψ和ω角度,得到坐標系o'x'y'z';然后再將局部坐標系經過平移變換移動至世界坐標系坐標原點位置,得到與世界坐標系重合的局部坐標系 o″x″y″z″。其中,角度 ω 為將起點方向向量旋轉至世界坐標系XOY平面后與Y軸夾角,角度ψ為起點方向向量在世界坐標系YOZ平面投影與Y軸夾角,夾角角度ω和ψ均可由方向向量經過計算得出:


對于終點 E的全局坐標,將局部坐標 E'[xe' ye' ze']首先繞世界坐標系X軸旋轉ψ角度,然后繞世界坐標系Z軸旋轉ω角度,最后平移至世界坐標系原點位置,其空間變換矩陣Me為:

將局部坐標E'[xe' ye' ze']經過平移旋轉組合變換Me得到世界坐標系下的全局坐標E為:

對于終點E的全局方向向量,只需將局部方向向量Ve'[nxe' nye' nze']依次繞世界坐標系X軸旋轉ψ角度、繞Z軸旋轉ω角度即可旋轉到與世界坐標系Y軸重合位置,其空間變換矩陣Mve為:

局部方向向量Ve'[nxe' nye' nze']經過平移旋轉組合變換得到世界坐標系下的全局方向向量Ve為:

根據坐標平移與旋轉變換原理,基于C++編寫三維坐標空間坐標變換Matrix類,Matrix類包含接口函數 translate(float x,float y,float z)、rotateX(float angle)、rotateY(float angle)、rotateZ(float angle)等,分別用于三維空間坐標的平移變換和繞XYZ軸的旋轉變換。OpenGL通過MODELVIEW模型視圖變換矩陣實現從模型本地坐標向世界坐標系的空間坐標變換,并提供接口函數 glTranslate{fd}、glRotate{fd}、glScale{fd}接口函數分別用于對模型的平移、旋轉與縮放[9]。
基于QT和OpenGL三維圖形庫,采用C++語言編寫彈簧零件三維實體造型實現程序。設置系統運行環境,在 QT工程文件中添加 OpenGL模塊和opengl32.lib、glu32.lib和glut.lib靜態庫函數文件,包含gl.h和glu.h頭文件,可實現QT工程對OpenGL三維圖形庫函數的調用。
在用戶窗口中進行三維圖形繪制時,通過子類化QGLWidget來實現對OpenGL的調用,重寫QGLWidget類三個虛函數initializeGL()、resizeGL()和paintGL()實現基于OpenGL的繪制。編寫自定義函數drawLine()、drawCircle()和drawHelix()分別用于實現直線、折角和螺旋結構特征單元繪制;函數draw()用于實現彈簧整體三維實體造型;函數coorTrans()用于實現各彈簧基本結構特征單元由局部坐標向世界坐標的變換;函數 translate{XYZ}{PM}()、rotate{XYZ}{PM}()和scale{PM}()分別用于實現觀察時對三維模型視圖的平移旋轉和縮放。按照以上步驟編寫代碼并運行,即可完成彈簧三維實體造型,如圖5所示為系統實現的包含段直線、折角與螺旋結構特征的彈簧三維實體模型參數化建模過程。

通過對彈簧幾何特征的分析,將彈簧結構均可分解為圓柱、折角和螺旋三種基本結構特征單元,本文通過離散化方法,基于OpenGL構建了彈簧結構特征單元的三維實體模型,并通過空間坐標變換實現了各結構特征單元間的組合拼接,完成了彈簧三維實體模型整體構建。在QT開發環境下,基于OpenGL三維圖形庫,對彈簧參數化三維實體造型進行了實現。該建模方法操作方便、效果逼真,具備良好移植性,為彈簧成形機數控系統在線可視化編程奠定了技術基礎。