郭媛媛,李濟順,,隋新,薛玉君,,馬偉
(1.河南科技大學 機電工程學院,河南 洛陽 471003;2.河南省機械設計及傳動系統重點實驗室,河南 洛陽 471003)
高檔數控機床對軸承均有高速、高精度的要求,軸承的精度檢測是技術難點之一。對于軸承內、外圈等零件,尤其在超精密的場合,圓柱形貌誤差是重要的指標。特別是基于誤差分離的圓度、圓柱度形狀誤差,其研究及應用備受國內外重視。圓柱度形狀誤差測量和分離的最終目的是對被測零件的圓柱度做出正確評判,同時得出被測零件的真實輪廓形貌,便于在線補償加工的實施[1]。基于此,有必要對圓柱度形狀誤差的諸要素進行適當的重構,從而得出零件的具體形貌,然后利用相關計算機圖形軟件實現圓柱形貌的三維顯示。
在圓柱形貌重構和三維顯示的技術領域,文獻[2]建立了重構基準模型,并簡單介紹了基于OpenGL的圓柱度形狀誤差三維顯示的相關參數以及繪制過程[3],完成了圓柱度形狀誤差的網格狀構建,但其只取得了一定的顯示效果,并不是非常直觀。與此同時,在科技研究中,數據場的可視化問題也越來越受到重視,選擇好的漸變顏色表達和區分不同的、可見或不可見的數據場,對人視覺系統的分辨和識別極其有利[4]。因此,重點研究了精密圓柱形貌重構模型和三維顯示模型,利用圖形顯示軟件OpenGL圖形庫的強大功能,用顏色渲染的相應算法清楚地再現了帶有顏色漸變的圓柱體的表面形貌,取得了良好的顯示效果,使描述和評價圓柱度誤差更加準確、直觀。
圓柱度誤差測量一般要求2個測量運動才能完成對圓柱體表面的計量,屬于二維誤差分離技術。圓柱度誤差測量和分離的方法目前有3種:三點法、四點法和五點法。三點法模型得到了廣泛認可,四點法、五點法模型仍需進一步探討才能付諸使用,因此選擇三點法圓柱度誤差測量和分離模型進行研究。
由于圓柱度誤差測量和分離的困難性、復雜性,在模型中將圓柱度形狀誤差分解成3個要素:(1)截面圓度形狀誤差,反映截面輪廓的圓度誤差;(2)截面的尺寸偏差或者最小二乘圓半徑差,反映零件被測截面基本尺寸變動量;(3)截面最小二乘圓圓心的位置,反映零件被測面在坐標系內的位置,也反映被測零件各個截面之間的相互位置關系。
測量時,同時使用3個傳感器。參照三點法圓度誤差分離技術,對圓柱上第j個截面的圓度誤差進行時域計算,得到圓柱上該點的圓度誤差值為

式中:M為被測截面個數。
若以測量的初始截面為考察標準,則各個被測截面的最小二乘圓半徑差Δr(j)可表示為

式中:c0,c1,c2為誤差分離權函數[1]。
由三點法圓柱度誤差分離技術可知,截面最小二乘圓圓心與測量坐標系的原點重合,則可得到圓柱度形狀誤差測量的3個要素。
由上述測量和分離原理得到的圓柱度形狀誤差的3個要素是各自獨立的,若要正確評價和描述圓柱度誤差,就要對圓柱度形狀誤差的諸要素進行符合實際的、恰如其分的重構,從而獲得能夠表征被測零件逼真的表面形狀的誤差輪廓,即圓柱體的具體形貌[1]。
由于被測截面的圓度誤差是以截面最小二乘圓圓心為基準進行描述,因此將截面的最小二乘圓圓心在絕對坐標系內的初始位置(aj,bj,wj)作為被測圓柱體形貌重構的基準。
各截面的圓度誤差只是反應圓輪廓的變化量,故在重構時,各個截面的圓度誤差需要加上常量C,使重構的圓柱體形貌更加逼真,而該常量只是改變圓柱體的半徑,不影響對圓柱度的評定。由坐標平移定理可知,被測截面上點的坐標在絕對坐標系內的坐標為

式中:u(i,j),v(i,j),w(i,j)分別為重構點在絕對坐標系Oxyz下的坐標;(ai,bj)為第j號截面的最小二乘圓圓心坐標;H為圓柱的高。
綜上,圓柱表面形狀誤差的重構已經完成,(5)式中重構的被測圓柱體形貌的所有點的坐標值,幾乎可認為是圓柱體上各測點的真值,根據這些點的坐標值,就能容易地描述被測精密圓柱體的形貌。
OpenGL是一個性能卓越的三維圖形標準,提供了大量的預封裝函數,其豐富的圖形功能為三維圖形的生成與顯示提供了便利。在C++Builder環境下實現圓柱表面形貌的三維顯示,程序流程如圖1所示。該程序的關鍵是彩色面的渲染以及用彩色區分圓柱表面的特征。

圖1 圓柱表面形貌誤差重構流程圖
在繪制圓柱形貌之前,需要構造仿真數據。三點法圓柱度誤差測量試驗能夠得出的測量數據是3個傳感器對每個面的采樣輸出值,然后分離計算出每個截面的圓度誤差值,最小二乘圓圓心坐標和半徑差,并根據(5)式重構圓柱表面點的坐標。由于直接給出3個傳感器輸出的信號值相對復雜,直接給出重構所需的截面圓度誤差值、截面之間半徑差值、測量截面數及每個截面的采樣點數,最小二乘圓圓心可根據(2)式求得,具體給定值及公式見表1。

表1 相關測量參數的給定值
為了清楚地描述圓柱面的渲染并與渲染后的圓柱面作對比,首先生成近似圓柱形貌的空間網格。具體方法如下:
根據重構點的坐標公式,實現點在空間直角坐標系下的坐標,然后以這些點的坐標為基礎進行空間網格的繪制。繪制過程為:
(1)連接M個由N個點組成的空間圓線。選擇OpenGL中的GL_LINE_LOOP繪制語句,該語句表明繪制閉合的直線段[6]。
(2)繪制N條由M個采樣圓面對應點構成的線段。由于線段不需要閉合,所以連接直線段的函數使用OpenGL中的GL_LINE_STRIP繪制函數[6]。
在分別連接了M個圓面和上下相互對應的N條圓柱素線之后,就完成了圓柱面的空間網格的繪制。其顯示結果如圖2所示。

圖2 圓柱形貌的空間網格
為了清楚地描述對圓柱形貌的網格狀表面的渲染過程,截取圓柱形貌上的3個面,如圖3所示。

圖3 圓柱形貌的空間網格片段
在將空間網格轉化成面的渲染過程中,其具體實現步驟為:
(1)分別連接4個點使之成為由點1,2,3和點1,3,4組成的2個三角形面。在OpenGL函數庫中的GL_TRIANGLE_STRIP語句下,用glVertex3f()函數分別給出點1~4在直角坐標系下的坐標即可實現。
(2)嵌套C語言中的2個for循環語句就可以實現整個圓柱面上M×N個點的連接。
在連接了圓柱上所有點后,圓柱空間網格就轉化成了空間圓柱面。但是,上述繪制過程實現的圓柱面是沒有漸變顏色的。為了實現圓柱面的顏色漸變,需要了解OpenGL的顏色系統。在OpenGL中顏色系統采用RGB模式,該模式中每種顏色分量都是0~255,為了檢索和存儲方便,把這些整數換算成0.0~1.0之間的浮點數。使用的顏色函數為glColor3f()。
要實現的圓柱表面顏色依據到圓柱中心線的距離遠近依次漸變為:紅色-黃色-綠色-青色-藍色-紫色,距離最遠呈紅色,距離最近呈紫色。具體實現過程為:
(1)計算M×N個采樣點到圓柱中心軸線的距離Distance[M][N],并且記下這些點到圓柱中心軸線的距離中最近和最遠距離,用max和min表示。
(2)將max-min的值均分成5個區間段,即:[0,(max-min)/5],[(max-min)/5,2(maxmin)/5],[2(max-min)/5,3(max-min)/5],[3(max-min)/5,4(max-min)/5]及[4(maxmin)/5,max-min]。
(3)判斷Distance-min的值分別屬于哪一段區間,從小到大每段對應的顏色漸變分別是紫到藍漸變、藍到青漸變、青到綠漸變、綠到黃漸變和黃到紅漸變。然后根據顏色漸變的線性插值法,給每個點賦予相應顏色。
其中,判斷點具體應該進行何種漸變的流程如圖4所示。距離差指的是Distance-min,區間1~4分別是[0,(max-min)/5],[(max-min)/5,2(max-min)/5],[2(max-min)/5,3(maxmin)/5]和[3(max-min)/5,4(max-min)/5]。

圖4 圓柱表面上的點實現彩色漸變的流程
以紫到藍漸變為例,判定若Distance的值在區間[0,(max-min)/5]中,則進行紫到藍漸變。對應顏色漸變的線性插值法,Distance-min的最大高程值是(max-min)/5,對應的顏色是藍色gl-Color3f(0.0,0.0,1.0),Distance-min的最小高程值是0,對應的顏色是紫色glColor3f(1.0,0.0,1.0),則區間內其他點的顏色就是glColor3f(1-(Distance-min)/((max-min)/5),0.0,1.0)。同理,可以根據線性插值法對屬于每個區間段的點進行相應的顏色漸變。由此,圓柱上每一個點的顏色由于到中心軸線的距離不同,所顯示的顏色也不一樣的。
在繪制圓柱表面時,將給每個點賦予顏色的程序段放在OpenGL函數庫中繪制三角面片的語句GL_TRIANGLE_STRIP后面的每個glVertex3f()語句前,即可實現帶有顏色漸變的圓柱面渲染。
為了更加清晰直觀地表征圓柱表面形貌,在渲染的圓柱表面繪制圖中,同時繪制出彩虹色帶。彩虹色帶是用OpenGL函數直接繪制的帶有漸變色的帶狀圖形,圓柱表面上各個測量點的顏色與彩虹色帶中的顏色源于同一個色彩空間,并且一一對應。帶有彩虹帶和顏色渲染的圓柱表面的顯示效果如圖5所示。

圖5 帶有漸變色和彩虹色帶的圓柱形貌渲染圖
完成面渲染后的圓柱表面形貌三維動態顯示效果不僅更加逼真,而且使觀測和評價圓柱度誤差更加容易。
利用三點法圓柱度誤差測量和分離方法,得到重構圓柱度誤差的3個基本要素,完成了圓柱表面形狀誤差的重構,得到了要重構的被測圓柱體形貌上所有點的坐標值。
實現了基于OpenGL的圓柱度形狀誤差的三維動態顯示,顯示的圓柱表面形貌隨圓柱度誤差大小而顏色漸變,不僅顯示效果更加準確、逼真,而且使評價圓柱度形狀誤差更加客觀、全面,同時對不同形貌產品的重構及其三維動態顯示也具有借鑒意義。