謝守廣,王雪飛,華順剛
(大連理工大學(xué) 機械工程學(xué)院,遼寧 大連 116024)
裝配關(guān)系是裝配體模型中的重要組成部分,在裝配序列規(guī)劃、結(jié)構(gòu)分析、模型重用及變型設(shè)計等領(lǐng)域都有著廣泛的應(yīng)用[1,2]?,F(xiàn)有的裝配關(guān)系自動提取方法主要有兩種:①利用裝配體模型具有的裝配特征來自動地提取裝配關(guān)系[3],該方法相對簡單,理論上可以提取所有的裝配關(guān)系,但只適用于CAD系統(tǒng)自帶格式的模型;②利用B-rep模型底層的幾何信息來提取裝配關(guān)系[4-9],該方法用于缺乏裝配特征的中性文件格式(例如STEP、IGES)的模型。其中,文獻(xiàn)[4,6,7]利用裝配副元素的類型(點、線或面)及其之間的幾何連接關(guān)系來表征裝配關(guān)系,然而其只考慮了幾種特定的面;文獻(xiàn)[5]可以獲取零件之間的裝配連接關(guān)系,但無法得到裝配副及其參數(shù);文獻(xiàn)[8,9]采用接觸的點、線、面及其參數(shù)表征裝配關(guān)系,但未考慮基于間隙的裝配關(guān)系。因此,這些方法容易造成裝配關(guān)系的遺漏。
受文獻(xiàn)[8,9]方法的啟發(fā),本文利用構(gòu)成裝配副的點、線、面及其參數(shù)來表征裝配關(guān)系,在此基礎(chǔ)上綜合考慮零件之間的間隙和接觸,提出了一種裝配關(guān)系自動提取算法。首先利用底層的幾何信息構(gòu)造多種包圍盒提取基于間隙的裝配關(guān)系,并采用過濾方法優(yōu)化掉不必要的關(guān)系;之后借助于SolidWorks的干涉評估功能詳盡地獲取基于接觸的裝配關(guān)系。實驗證明,該方法能取得較好的結(jié)果。
通常,由于公差或者其他原因,一些裝配關(guān)系可能會以間隙的形式存在。本文考慮兩種普遍情況:①兩個相對的平行平面,其外法線方向相反,間隙較小,本文中采用的最大間隙為1.5 mm;②兩個同軸的圓柱面,其中較小的圓柱面半徑為r1,較大的圓柱面半徑為r2,滿足r1/r2≥0.8,且兩個圓柱面的最近距離即為其半徑之差。進(jìn)行半徑的約束主要是為了減少不必要的計算,實際中可根據(jù)情況選擇適當(dāng)?shù)拈g隙和半徑比。
在求解之前,對CAD系統(tǒng)中裝配體的樹形層次結(jié)構(gòu)進(jìn)行遞歸遍歷,獲得所有的零件。以兩個零件之間的間隙情況為例說明求解過程。
(1)利用CAD系統(tǒng)的API函數(shù),分別獲取兩個零件的包圍盒(包圍盒的邊與三個標(biāo)準(zhǔn)坐標(biāo)軸對應(yīng)平行),并將兩個包圍盒按最大間隙進(jìn)行擴展。
(2)求兩個擴展包圍盒的交集,得到交包圍盒。如果交集為空,則進(jìn)行下一對零件之間裝配關(guān)系的計算;否則,執(zhí)行下一步。
(3)計算每個零件的所有面的面包圍盒,將面包圍盒與交包圍盒再次求交集,如果交集不為空,將面記錄下來,得到兩個零件中待匹配面的集合。
(4)循環(huán)遍歷兩個零件待匹配面的集合,并對上述兩種情況進(jìn)行驗證,得到滿足條件的結(jié)果。
通過實驗發(fā)現(xiàn),由于間隙的原因,某些零件中的一個面可能與另外一個零件中的多個面構(gòu)成裝配關(guān)系。圖1為滾珠絲杠軸向示意圖。
圖1 滾珠絲杠軸向示意圖
圖1中心有三個圓,設(shè)從里到外分別為C1、C2和C3。其中C1對應(yīng)絲杠的外圓柱面,C2和C3對應(yīng)螺母的兩個圓柱面。按照上面的分析,C1與C2同軸,C1與C3也同軸,但是這兩個的同軸與由C1與C2的同軸所得到效果是一樣的。因此,這里只保留C1與C2的同軸。即,當(dāng)某個面與多個面構(gòu)成裝配關(guān)系時,僅考慮多個面中與之間隙最小的面。如果最小間隙為0,表示最小間隙面與這個面發(fā)生接觸,則舍棄這一對面產(chǎn)生的關(guān)系(在下一節(jié)會詳細(xì)提取基于接觸的裝配關(guān)系);反之,保留這一關(guān)系。
接觸的元素可以分為點、線和面。本節(jié)利用SolidWorks提供的干涉管理器的API函數(shù)將這三種接觸都計算出來。接下來仍以兩個零件為例說明求解步驟:
(1)選用“將重合視為干涉”,在兩個零件之間運行干涉檢查,得到干涉體,即兩個零件在空間上發(fā)生重疊的部分。
(2)循環(huán)遍歷每一個干涉體,對其體積進(jìn)行判斷。如果體積大于0,代表存在物理干涉,轉(zhuǎn)而執(zhí)行步驟(3)。如果體積為0,代表不存在物理干涉,存在面或線接觸。此時獲取干涉體中的面,如果面存在,獲取面及其參數(shù),否則獲取干涉體中的線及其參數(shù)。待遍歷完成之后,轉(zhuǎn)而執(zhí)行步驟(4)。
(3)分別獲取兩個零件的副本,兩個副本利用布爾運算均切除干涉體。對兩個副本進(jìn)行如步驟(1)所述的干涉檢查,得到干涉體。此時應(yīng)該不會存在物理干涉,按照步驟(2)中類似的步驟讀取面或線及其參數(shù),此處注意排除干涉體的邊線。
(4)無論何種接觸元素,都可以看作是通過面與面的接觸實現(xiàn)的。因此,通過API分別獲取兩個零件發(fā)生干涉的面的集合。選取兩個面集合中面的數(shù)量較少的那個集合,對其中的每一個面分別進(jìn)行迭代,具體做如下處理:計算面與另一個零件之間的最近距離以及取得此距離的一對點,如果距離大于0,則繼續(xù)處理下一個面,如果距離等于0,表明上述的一對點重合,為一個交點;利用高等數(shù)學(xué)中“鄰域”的思想,如果這個點周圍很小的范圍內(nèi)沒有第二個交點,表明發(fā)生的是點接觸,而不是線或面接觸;為此獲取另一個零件的臨時的實體(Body),利用一個半徑較小的球(本文設(shè)半徑r=0.1 mm),將球的球心移動到交點處,用該實體切除球體;計算面與切除后的實體的最近距離,如果距離大于0,則表明為點接觸,將交點保存在C++STL的set中,如果距離等于0,表明鄰域內(nèi)存在第二個交點;接著處理下一個面,最后set中的點即為發(fā)生接觸的點。
通過以上的判斷識別過程,可以獲得兩個零件之間接觸的點、線、面,進(jìn)一步可以獲取其參數(shù)以表征裝配關(guān)系。零件之間的接觸元素如果是平面,則零件之間構(gòu)成平面(重合)裝配;如果是圓柱面則構(gòu)成圓柱面(同軸)裝配;如果是球面則構(gòu)成球面(同心)裝配;如果是復(fù)雜表面則構(gòu)成復(fù)雜表面裝配;如果是線或點則可能構(gòu)成相切等。
為驗證本文所提出方法的有效性,在SolidWorks2018和Visual Studio2015的環(huán)境下開發(fā)了一個裝配關(guān)系自動提取程序。所用的SolidWorks API函數(shù)主要有:IToolsCheckInterference3(獲取所選零件間的干涉面集)、IClosestDistance(計算兩個對象的最近距離以及取得此距離的一對點)、get_InterferenceDetectionManager(獲取干涉檢查管理器)、GetInterferences(計算所選組件之間存在的干涉)、GetInterferenceBody(獲取發(fā)生干涉的實體)以及Operations2(在臨時實體之間進(jìn)行交集、并集和差集操作)。
本文以STEP格式的機械臂模型為對象進(jìn)行識別提取實驗。圖2為機械臂模型及其裝配關(guān)系。由圖2可以看出,零件2與3之間存在兩個平面和一個圓柱面的裝配。這與圖2(c)中兩個零件間的實際裝配面(深色部分)相符。并且從圖2(c)中可以觀察到圓柱面的軸線與平面垂直。在圓柱面的限制下,兩個零件間只能發(fā)生相對轉(zhuǎn)動和沿圓柱面軸線方向的移動,平面則進(jìn)一步限制了沿軸線方向的移動。最終兩零件間只能進(jìn)行相對的轉(zhuǎn)動,構(gòu)成了一個轉(zhuǎn)動副。經(jīng)計算,其余存在裝配關(guān)系的零件之間也都構(gòu)成了轉(zhuǎn)動副??梢娞崛〉慕Y(jié)果與實際情況一致,表明所提出方法的有效性。
圖2 機械臂模型及其裝配關(guān)系
中性文件格式常用于不同CAD系統(tǒng)間模型的數(shù)據(jù)交換,原造型系統(tǒng)的特征信息、裝配信息會丟失,因此裝配關(guān)系的恢復(fù)、提取直接影響到CAD/CAM系統(tǒng)后續(xù)的設(shè)計與制造。本文提出了一種實用的裝配關(guān)系自動提取方法,該方法利用包圍盒和SolidWorks提供的干涉評估功能,綜合考慮了裝配元素間的間隙以及接觸情況,能夠有效地實現(xiàn)裝配關(guān)系的自動識別與提取。但零件之間的間隙情況復(fù)雜多樣,本文僅考慮了兩種最為普遍的間隙情況,更多的情況有待進(jìn)一步研究。