謝守廣,王雪飛,華順剛
(大連理工大學 機械工程學院,遼寧 大連 116024)
裝配關系是裝配體模型中的重要組成部分,在裝配序列規劃、結構分析、模型重用及變型設計等領域都有著廣泛的應用[1,2]。現有的裝配關系自動提取方法主要有兩種:①利用裝配體模型具有的裝配特征來自動地提取裝配關系[3],該方法相對簡單,理論上可以提取所有的裝配關系,但只適用于CAD系統自帶格式的模型;②利用B-rep模型底層的幾何信息來提取裝配關系[4-9],該方法用于缺乏裝配特征的中性文件格式(例如STEP、IGES)的模型。其中,文獻[4,6,7]利用裝配副元素的類型(點、線或面)及其之間的幾何連接關系來表征裝配關系,然而其只考慮了幾種特定的面;文獻[5]可以獲取零件之間的裝配連接關系,但無法得到裝配副及其參數;文獻[8,9]采用接觸的點、線、面及其參數表征裝配關系,但未考慮基于間隙的裝配關系。因此,這些方法容易造成裝配關系的遺漏。
受文獻[8,9]方法的啟發,本文利用構成裝配副的點、線、面及其參數來表征裝配關系,在此基礎上綜合考慮零件之間的間隙和接觸,提出了一種裝配關系自動提取算法。首先利用底層的幾何信息構造多種包圍盒提取基于間隙的裝配關系,并采用過濾方法優化掉不必要的關系;之后借助于SolidWorks的干涉評估功能詳盡地獲取基于接觸的裝配關系。實驗證明,該方法能取得較好的結果。
通常,由于公差或者其他原因,一些裝配關系可能會以間隙的形式存在。本文考慮兩種普遍情況:①兩個相對的平行平面,其外法線方向相反,間隙較小,本文中采用的最大間隙為1.5 mm;②兩個同軸的圓柱面,其中較小的圓柱面半徑為r1,較大的圓柱面半徑為r2,滿足r1/r2≥0.8,且兩個圓柱面的最近距離即為其半徑之差。進行半徑的約束主要是為了減少不必要的計算,實際中可根據情況選擇適當的間隙和半徑比。
在求解之前,對CAD系統中裝配體的樹形層次結構進行遞歸遍歷,獲得所有的零件。以兩個零件之間的間隙情況為例說明求解過程。
(1)利用CAD系統的API函數,分別獲取兩個零件的包圍盒(包圍盒的邊與三個標準坐標軸對應平行),并將兩個包圍盒按最大間隙進行擴展。
(2)求兩個擴展包圍盒的交集,得到交包圍盒。如果交集為空,則進行下一對零件之間裝配關系的計算;否則,執行下一步。
(3)計算每個零件的所有面的面包圍盒,將面包圍盒與交包圍盒再次求交集,如果交集不為空,將面記錄下來,得到兩個零件中待匹配面的集合。
(4)循環遍歷兩個零件待匹配面的集合,并對上述兩種情況進行驗證,得到滿足條件的結果。
通過實驗發現,由于間隙的原因,某些零件中的一個面可能與另外一個零件中的多個面構成裝配關系。圖1為滾珠絲杠軸向示意圖。

圖1 滾珠絲杠軸向示意圖
圖1中心有三個圓,設從里到外分別為C1、C2和C3。其中C1對應絲杠的外圓柱面,C2和C3對應螺母的兩個圓柱面。按照上面的分析,C1與C2同軸,C1與C3也同軸,但是這兩個的同軸與由C1與C2的同軸所得到效果是一樣的。因此,這里只保留C1與C2的同軸。即,當某個面與多個面構成裝配關系時,僅考慮多個面中與之間隙最小的面。如果最小間隙為0,表示最小間隙面與這個面發生接觸,則舍棄這一對面產生的關系(在下一節會詳細提取基于接觸的裝配關系);反之,保留這一關系。
接觸的元素可以分為點、線和面。本節利用SolidWorks提供的干涉管理器的API函數將這三種接觸都計算出來。接下來仍以兩個零件為例說明求解步驟:
(1)選用“將重合視為干涉”,在兩個零件之間運行干涉檢查,得到干涉體,即兩個零件在空間上發生重疊的部分。
(2)循環遍歷每一個干涉體,對其體積進行判斷。如果體積大于0,代表存在物理干涉,轉而執行步驟(3)。如果體積為0,代表不存在物理干涉,存在面或線接觸。此時獲取干涉體中的面,如果面存在,獲取面及其參數,否則獲取干涉體中的線及其參數。待遍歷完成之后,轉而執行步驟(4)。
(3)分別獲取兩個零件的副本,兩個副本利用布爾運算均切除干涉體。對兩個副本進行如步驟(1)所述的干涉檢查,得到干涉體。此時應該不會存在物理干涉,按照步驟(2)中類似的步驟讀取面或線及其參數,此處注意排除干涉體的邊線。
(4)無論何種接觸元素,都可以看作是通過面與面的接觸實現的。因此,通過API分別獲取兩個零件發生干涉的面的集合。選取兩個面集合中面的數量較少的那個集合,對其中的每一個面分別進行迭代,具體做如下處理:計算面與另一個零件之間的最近距離以及取得此距離的一對點,如果距離大于0,則繼續處理下一個面,如果距離等于0,表明上述的一對點重合,為一個交點;利用高等數學中“鄰域”的思想,如果這個點周圍很小的范圍內沒有第二個交點,表明發生的是點接觸,而不是線或面接觸;為此獲取另一個零件的臨時的實體(Body),利用一個半徑較小的球(本文設半徑r=0.1 mm),將球的球心移動到交點處,用該實體切除球體;計算面與切除后的實體的最近距離,如果距離大于0,則表明為點接觸,將交點保存在C++STL的set中,如果距離等于0,表明鄰域內存在第二個交點;接著處理下一個面,最后set中的點即為發生接觸的點。
通過以上的判斷識別過程,可以獲得兩個零件之間接觸的點、線、面,進一步可以獲取其參數以表征裝配關系。零件之間的接觸元素如果是平面,則零件之間構成平面(重合)裝配;如果是圓柱面則構成圓柱面(同軸)裝配;如果是球面則構成球面(同心)裝配;如果是復雜表面則構成復雜表面裝配;如果是線或點則可能構成相切等。
為驗證本文所提出方法的有效性,在SolidWorks2018和Visual Studio2015的環境下開發了一個裝配關系自動提取程序。所用的SolidWorks API函數主要有:IToolsCheckInterference3(獲取所選零件間的干涉面集)、IClosestDistance(計算兩個對象的最近距離以及取得此距離的一對點)、get_InterferenceDetectionManager(獲取干涉檢查管理器)、GetInterferences(計算所選組件之間存在的干涉)、GetInterferenceBody(獲取發生干涉的實體)以及Operations2(在臨時實體之間進行交集、并集和差集操作)。
本文以STEP格式的機械臂模型為對象進行識別提取實驗。圖2為機械臂模型及其裝配關系。由圖2可以看出,零件2與3之間存在兩個平面和一個圓柱面的裝配。這與圖2(c)中兩個零件間的實際裝配面(深色部分)相符。并且從圖2(c)中可以觀察到圓柱面的軸線與平面垂直。在圓柱面的限制下,兩個零件間只能發生相對轉動和沿圓柱面軸線方向的移動,平面則進一步限制了沿軸線方向的移動。最終兩零件間只能進行相對的轉動,構成了一個轉動副。經計算,其余存在裝配關系的零件之間也都構成了轉動副。可見提取的結果與實際情況一致,表明所提出方法的有效性。

圖2 機械臂模型及其裝配關系
中性文件格式常用于不同CAD系統間模型的數據交換,原造型系統的特征信息、裝配信息會丟失,因此裝配關系的恢復、提取直接影響到CAD/CAM系統后續的設計與制造。本文提出了一種實用的裝配關系自動提取方法,該方法利用包圍盒和SolidWorks提供的干涉評估功能,綜合考慮了裝配元素間的間隙以及接觸情況,能夠有效地實現裝配關系的自動識別與提取。但零件之間的間隙情況復雜多樣,本文僅考慮了兩種最為普遍的間隙情況,更多的情況有待進一步研究。