姜宏,孫文磊,石永芳,黃艷華
(1.新疆大學軟件學院,新疆烏魯木齊830008;2.新疆大學機械工程學院,新疆烏魯木齊830049;3.新疆醫(yī)科大學醫(yī)學工程技術(shù)學院,新疆烏魯木齊830046)
反求工程(Reverse Engineering(RE))越來越多的應(yīng)用于復(fù)雜零件的設(shè)計,如特殊設(shè)計制作的流線型曲面、以試驗修正法設(shè)計的葉片、采用真實比例制作的泥塑模型等,這些零件大多數(shù)沒有特定的設(shè)計公式、造型準則,通常由許多設(shè)計師、工藝師、美化師等聯(lián)合手工試制的,對這些特殊設(shè)計的經(jīng)典零件進行復(fù)制再現(xiàn)原設(shè)計就用到反求工程技術(shù)[1].然而,在實際的零件三維模型重建過程中,單獨使用正向設(shè)計軟件或反求設(shè)計軟件往往滿足不了設(shè)計的需要,需要二者相結(jié)合才能快速、精準的建立三維數(shù)字模型[2].
針對這一工程實際,根據(jù)反求工程領(lǐng)域內(nèi)的基礎(chǔ)理論——點云數(shù)據(jù)獲取與預(yù)處理、多視測量與數(shù)據(jù)拼接、復(fù)雜曲面特征提取與重構(gòu)等理論,結(jié)合正在進行的大尺寸復(fù)雜零件反求設(shè)計應(yīng)用的研究,對三維設(shè)計軟件UG NX進行二次開發(fā),設(shè)計并實現(xiàn)了一個基于三維點云數(shù)據(jù)的反求重構(gòu)軟件系統(tǒng)-RETOOL系統(tǒng).該系統(tǒng)可以在正向設(shè)計軟件UGNX中直接對點云數(shù)據(jù)進行反求重構(gòu).
RETOOL系統(tǒng)是以VC++6.0為開發(fā)工具,借助UG/OPENAPI平臺對UG NX進行二次開發(fā)而成.
與UG NX系統(tǒng)內(nèi)其它各功能菜單一樣,RETOOL系統(tǒng)實現(xiàn)了與GU NX的無縫連接,特別是可以在一定精度要求下,完成對點云數(shù)據(jù)直接處理的任務(wù),從而解決在正向設(shè)計軟件中對有多個自由曲面的點云數(shù)據(jù)操作的問題.
作為集成于UG NX系統(tǒng)中具有反求能的功能模塊,RETOOL系統(tǒng)的開發(fā)基于UG NX的設(shè)計風格以及離散點云數(shù)據(jù)反求重構(gòu)的理論基礎(chǔ),其主要功能模塊有:獲取點云數(shù)據(jù)模塊、提取特征點模塊、擬合特征曲線模塊、擬合特征曲面模塊和曲面重建模塊等,如圖1所示.
圖1 系統(tǒng)功能模塊圖
RETOOL系統(tǒng)利用VC++6.0語言,在UG/OPENAPI平臺上開發(fā)用戶所需的UG文件系統(tǒng)管理和數(shù)據(jù)庫操作等功能的圖形終端.在開發(fā)過程中,對UGNX系統(tǒng)所提供的頭文件進行了重新配置,創(chuàng)建UG/OPEN API工程和MFC AppWizard(dll)工程并進行二次開發(fā).當前階段,所開發(fā)RETOOL系統(tǒng)的主要功能模塊有:獲取點云數(shù)據(jù)模塊、提取特征點模塊、擬合特征曲線模塊、擬合特征曲面模塊和曲面重建模塊.其中,前兩個模塊為面向點云數(shù)據(jù)的反求操作模塊,其余模塊的功能是在完成前兩個模塊功能的基礎(chǔ)上,借助UG NX系統(tǒng)強大的曲面創(chuàng)建功能得以實現(xiàn),從而在正向設(shè)計軟件中完成產(chǎn)品的反求設(shè)計.
用戶界面模塊通過UG/OPEN MenuScript提供的函數(shù)開發(fā)完成,可以實現(xiàn)瀏覽對象,管理資源以及人機交互等功能,考慮到用戶操作的便捷性,系統(tǒng)利用User Tools進行開發(fā),生成了彈出式對話框和工具條.RETOOL系統(tǒng)使用了回調(diào)函數(shù)來實現(xiàn)這些操作對話框控件的功能.回調(diào)函數(shù)的特點是只有在相應(yīng)的控件被觸發(fā)時才能被執(zhí)行;回調(diào)函數(shù)的調(diào)用可以在Active文本中輸入相應(yīng)函數(shù)名來完成.為了讓生成的對話框具有UG NX系統(tǒng)統(tǒng)一的風格,在設(shè)計對話框時,可以選擇“Create Dialog”復(fù)選框.
獲取點云數(shù)據(jù)模塊的主要功能是對包括IGES在內(nèi)的多種格式的點云數(shù)據(jù)文件進行編輯、不同格式點云數(shù)據(jù)文件的轉(zhuǎn)換和存儲.RETOOL系統(tǒng)將點云數(shù)據(jù)文件中的每個數(shù)據(jù)點作為一個對象,這樣可以直接對數(shù)據(jù)點中的噪聲點和異常點進行刪除操作,從而盡可能獲取有效的產(chǎn)品表面數(shù)據(jù)點空間坐標信息.這里選擇了IGES格式的點云數(shù)據(jù)文件作為操作對象進行了反求重構(gòu).
2.2.1 模塊開發(fā)
選擇幾何對象:RETOOL系統(tǒng)運用UF_UI接口開發(fā)幾何對象選擇功能模塊.UF-UI接口是UGNX/OPEN API專門為用戶提供的用于選擇幾何對象開發(fā)的接口.需要說明的是,過濾函數(shù)UF-UI-set-sel_mask()是開發(fā)和實現(xiàn)幾何對象選擇功能的關(guān)鍵,其過濾功能通過對象類型列表或三元掩碼組(mask triple)結(jié)構(gòu)得以實現(xiàn).有別于選擇單一的對象類型量,三元掩碼組具有三個變量的特點,通過UF-UI_select-with-class-dialog()函數(shù)可以實現(xiàn)按類選擇的對話框功能,這樣用戶就可以在點云數(shù)據(jù)中一次選擇相同類的多個對象點.
獲取點云數(shù)據(jù):每個數(shù)據(jù)點就是一個對象,如果要完成對某個對象的操作,首先就要獲取該對象的標識.對于點云中的數(shù)據(jù)點對象而言,他們的標識就是每個數(shù)據(jù)點的三維坐標,RETOOL系統(tǒng)通過調(diào)用UG/Open API函數(shù)實現(xiàn)獲取每個點三維坐標的功能.需要指出,點云數(shù)據(jù)中點的數(shù)量極為龐大,采用手工操作的方式逐一選取是不可行的,為此,RETOOL系統(tǒng)使用了類選擇的方法,運用類選擇函數(shù)UF-UI-select-by-class()具體實現(xiàn),該函數(shù)定義如下:
char*message,//信息顯示
UF-UI-selection-options-p-topts,//對話框標題
int*response,//用戶操作返回值
int*count,//被選對象數(shù)目
tag-p-t*object);//被選對象標示的數(shù)組
通過類選擇函數(shù),可以方便使用鼠標框選的方式一次選擇大量的對象點.由于每一次交互操作所選擇點對象的數(shù)目都不相同,RETOOL系統(tǒng)考慮到內(nèi)存空間的利用效率,把對象標識存放于一動態(tài)數(shù)組中,使用New/Delete運算實現(xiàn)內(nèi)存的動態(tài)分配和釋放.其中,New運算符用來完成內(nèi)存的初始化和動態(tài)分配,而Delete運算符則是完成釋放內(nèi)存,兩個運算符必須成對使用.此外,對于系統(tǒng)資源的管理UGNX/OPEN API提供了UF-free()函數(shù)用于系統(tǒng)資源的釋放.
2.2.2 模塊應(yīng)用
圖2 大型復(fù)雜零件點云數(shù)據(jù)
圖2(a)、(b)分別是運用獲取點云數(shù)據(jù)模塊所讀取的風機葉片點云數(shù)據(jù)、成型銑刀的點云數(shù)據(jù)和鼓風機渦殼點云數(shù)據(jù).
RETOOL系統(tǒng)的反求重建功能是基于特征的曲面反求重構(gòu)理論的,因此提取特征點模塊的主要功能就是提取出點云數(shù)據(jù)中的特征點,為后續(xù)重構(gòu)出高精度的實體或片體做好準備.這一功能模塊的實現(xiàn)過程是:首先在點云數(shù)據(jù)中建立多個平行截平面,這些截平面必須要垂直于點云輪廓的對稱軸;然后判斷每個對象點到鄰近截平面的距離;最后將那些距離在誤差要求范圍內(nèi)點對象的標識存入一數(shù)組,用以提取特征點.在這些實現(xiàn)步驟中,平行截平面的建立是關(guān)鍵工作,每一個截平面的法向量必須是根據(jù)實際的點云外輪廓來建立.把點云中的點投影到距離它們最近的截平面上,這樣就可以完成多組平行特征邊界點的提取.
2.3.1 模塊開發(fā)
extern int UF-MODL-create-plane(
double origin-point[3],/*創(chuàng)建平面原始三維坐標*/
double plane-normal[3],//平面法向量
tag-t*plane-tag);//返回創(chuàng)建平面的標識
創(chuàng)建截平面的數(shù)量與重構(gòu)產(chǎn)品的大小和各平行截平面間的距離所決定,所以每次創(chuàng)建的平行截平面數(shù)量不是固定值.在MFC中,CArray模板類及其派生類特別適合建立一個無限大的動態(tài)數(shù)組,所以RETOOL系統(tǒng)就將每次創(chuàng)建的平行截平面組存放于這個數(shù)組中.在對平行截平面的數(shù)量和平面間距離進行修改時,必須先將已建的平面刪除,然后才能重新建立新的一組平面.提取特征點的程序流程如圖3所示.
當點擊提取特征點模塊中創(chuàng)建截面命令,圖4所示的“截取點云”對話框?qū)棾?在對話框中,用戶可以根據(jù)點云的實際位置指定截平面的起始位置、方向和數(shù)量.由于不同產(chǎn)品點云的特征不同,需要用戶根據(jù)經(jīng)驗調(diào)整已建立平行截平面的位置以及各截平面之間的距離.通常的經(jīng)驗是:各平行截平面間的距離應(yīng)隨隨點云外輪廓曲率成反比例變化,曲率越大,各截平面間的距離就越小,對象點到截平面的最大距離,也就是提取到的特征點的誤差值要根據(jù)點云的稀疏程度用經(jīng)驗來設(shè)置.為了獲得高質(zhì)量的特征點,用戶在操作時要注意截平面的方向和數(shù)量,即截平面的法線要時刻同點云外輪廓的軸線垂直;截平面數(shù)量滿足點云中每一部分的特征點都被截平面所截取即可.
圖3 提取特征邊界點程序流程圖
圖4 截取點云對話框
對象點到截平面之間距離可以用UF-VEC3-distance-to-plane()函數(shù)完成計算,函數(shù)定義為:
extern int UF-VEC3-distance-to-plane(
const double pnt1[3],//對象點三維坐標
const double pnt-on-plane[3],/*在平面上的一點的三維坐標*/
const double plane-normal[3],//平面法向量
double tolerance,//誤差值
double*distance);//點到平面的距離
對象點到截平面的距離計算結(jié)束后,系統(tǒng)調(diào)用UF-CURVE-create-point()函數(shù)將符合距離條件的點投影到相應(yīng)的平面,函數(shù)定義為:
extern int UF-CURVE-create-point(
double point-coords[3],//輸入對象點的三維坐標
tag-t*point);//輸出對象點的標識
經(jīng)過上述處理,每一個符合距離要求的截平面上的點被分別存入了相應(yīng)的數(shù)組,每個數(shù)組隨后會被投射到其對應(yīng)的平面上.不可避免,有一些點對象可能不在同一個平面上,這樣造成的后果將擬合出三維的曲線,也就是說擬合不出完全光順的曲面.
2.3.2 模塊的應(yīng)用
在RETOOL系統(tǒng)中,提取特征點模塊創(chuàng)建的初始截面多為三維坐標系統(tǒng)標準平面的平行面,即XY、YZ、XZ三個平面其中一個的平行平面.本實例通過“視圖/方位”命令,選擇對應(yīng)的標準平面,創(chuàng)建出和視圖垂直的平面.在RETOOL系統(tǒng)自定義菜單中選擇“逆向工程/創(chuàng)建平面”命令,在彈出的“按類選擇對話框”中選擇好要提取特征點的點云數(shù)據(jù)后,出現(xiàn)“截取點云”對話框,并在屏幕上顯示5個初始創(chuàng)建的平行截平面.
系統(tǒng)會在截平面創(chuàng)建完成后自動計算出每個對象點到鄰近截面間的距離,所有滿足誤差要求的對象點會被顯示出來,其它不需要的對象點將被隱藏.圖5是在不同產(chǎn)品點云數(shù)據(jù)中提取特征點的結(jié)果.
圖5 大型復(fù)雜零件特征點提取
擬合特征曲線模塊是在提取特征點模塊功能完成的基礎(chǔ)上重構(gòu)特征曲線的模塊,將為后續(xù)的曲面重構(gòu)工作做好準備.特征曲線擬合的精度取決于前期特征點的精度和數(shù)量.在RETOOL系統(tǒng)中,通過調(diào)用樣條命令來完成特征曲線的擬合.
2.4.1 模塊開發(fā)
在RETOOL系統(tǒng)中,擬合特征曲線被看做是由一個或多個曲線段創(chuàng)建.對于所有特征曲線,要求樣條點的最小數(shù)目只需大于樣條的階次即可.一條單獨分段樣條為Bezier曲線,不同段的B樣條所具有的階次也不相同,同時樣條點數(shù)不低于樣條的階次.極點的大距離移動會使曲線的形狀發(fā)生明顯的變化,其實際表現(xiàn)為階次越高曲線越硬,階次較低曲線越光順,也能更精確地順應(yīng)它們的極點.
還需要注意,越高的曲線階次就意味著意外變化的可能性增大,但同時也會提高將數(shù)據(jù)傳輸?shù)狡渌到y(tǒng)時獲得支持的可能性.根據(jù)經(jīng)驗,較低階次的曲線更方便于后續(xù)的操作,因此應(yīng)用實例中在創(chuàng)建特征曲線時使用了三次方,即階次定為3.
2.4.2 模塊的應(yīng)用
RETOOL系統(tǒng)擬合特征曲線模塊中的“樣條”命令,采用通過點的方式擬合3階多段樣條曲線,這樣保證了擬合曲線的精度.圖6是擬合不同產(chǎn)品特征點得到的特征曲線.
圖6 大型復(fù)雜零件特征曲線
在曲面重建的的各種方法中,直紋面、通過曲線組、通過曲線網(wǎng)格是目前最常用的三種方法.這三種方法用于不同的曲線:直紋面用于兩條曲線輪廓線的情況,可以創(chuàng)建出過曲線的直紋體;通過曲線組用于同一方向的一組曲線輪廓線的情況,可以過這些曲線輪廓線重建曲面;通過曲線網(wǎng)格用于一組具有兩個不同方向曲線輪廓的情況,可以過這組曲線重建曲面.
2.5.1 模塊的開發(fā)
RETOOL系統(tǒng)中曲面重建的基礎(chǔ)是曲線中的輪廓線.這里的輪廓線可以是以單個對象或多個對象構(gòu)成的幾何類型,比如曲線、實體邊或?qū)嶓w面.通常將曲線上的點或端點作為第一個剖面的曲線輪廓.這些被選擇的點不能應(yīng)用其它對齊選項,所以無法重新參數(shù)化,這就要求剖面曲線的輪廓線必須在對齊設(shè)置為參數(shù)選項時才可選擇.
擬合好的特征曲線將被用于最后的曲面重構(gòu).重構(gòu)曲面的質(zhì)量與曲線方向的選擇有著直接的關(guān)系,要想使擬合后的曲面不出現(xiàn)扭曲或變形,在選擇曲線時要根據(jù)曲線箭頭的指示方向,選擇同一方向的曲線.此外,擬合曲線的質(zhì)量也會影響重構(gòu)曲面的質(zhì)量,因為擬合出的曲線如果不夠光順,那么根據(jù)這些曲線所重構(gòu)出的曲面將會出現(xiàn)皺褶現(xiàn)象,這就要求操作者一定要有豐富的經(jīng)驗完成這些操作.
2.5.2 模塊的應(yīng)用
RETOOL系統(tǒng)的“曲面重建”菜單中“通過曲線組”命令能夠確保選擇的每條曲線的方向均為同一方向,在運用“參數(shù)對齊”和“V向三階”等命令后將重構(gòu)出產(chǎn)品的曲面.圖7為不同零件擬合后的曲面.
圖7 大型復(fù)雜零件曲面擬合
目前,在主流的商用軟件中,無論是正向設(shè)計軟件還是反求設(shè)計軟件,其功能不斷完善并且日趨強大,完全可以勝任正向設(shè)計任務(wù)和反求設(shè)計任務(wù),但卻不能滿足兩類軟件集成使用需求[10].反求系統(tǒng)RETOOL正是將正向設(shè)計軟件和反求設(shè)計軟件的功能進行了集成.該系統(tǒng)以正向設(shè)計軟件UG NX為基礎(chǔ),運用其提供的開發(fā)平臺實現(xiàn)了對點云數(shù)據(jù)處理的功能和基于特征點的復(fù)雜曲面的重構(gòu)功能,嘗試和探索了在已有正向軟件基礎(chǔ)上反求功能的集成,并通過應(yīng)用實例說明對已用專業(yè)軟件進行二次開發(fā)能夠滿足正逆向軟件功能集成的需求,進一步提高產(chǎn)品的反求效率.