本發(fā)明涉及計算機輔助設計領域,涉及模型裝配以及三維模型包裝方法,尤其涉及一種基于機械自由度的機械模型包裝方法。
背景技術:
一、機械模型裝配設計
機械模型裝配設計是將不同類型的構件進行連接并保持運動配合來達到設計者想要的結果。在裝配設計中,主要是對兩種信息進行設計:1)裝配體中構件的空間位置與朝向信息。2)構件之間的機械連接關系與運動鏈信息。在以往的研究中,往往通過語義化來表示機械的連接關系,并采用語義網(wǎng)規(guī)則語言(SWRL)和語義互聯(lián)網(wǎng)中本體描述語言(OWL)來表示機械裝配連接的語義信息。在這類研究中,并沒有定義運動出傳遞關系,而是通過構件之間的語義約束來表示構件之間的相對運動信息。Niloy J.Mitra和Lifeng Zhu[Zhu,L.,et al.,Motion-guided mechanical toy modeling.ACM Trans.Graph.,2012.]等人則是通過對機械構件自身屬性分析來獲取構件之間的連接類型。
二、模型包裝
已有的包裝算法大都以工業(yè)進程或實際工作中遇到的問題為背景進行開發(fā)算法。例如,在Egeblad等人的研究中提出了從一組家具中挑選出若干個能夠使目標容器填充率最大的家具。該算法的包裝效率高達91.3%,但是當需要將所有構件全部包裝,且不能假設機械模型中存在多個相同的構件時,該算法無法適用。也有研究者提出給出一組需要被包裝的物體,將這些物體包裝到最小體積的容器中。在該算法中假設被包裝的物體為長方體。但由于機械構件的幾何特征不一樣,如果采用構件的坐標軸平行包圍盒(Axially-aligned bounding box)的話,會存在大部分空間浪費的情況。還有研究者提出將一個整體的模型,通過分割算法將模型進行分割,然后將分割后的模型包裝到一個最小的容器中。在包裝時,由于模型為不規(guī)則幾何結構,所以將模型進行均勻離散化后,用體素方式來表示分割后的模型。
技術實現(xiàn)要素:
本發(fā)明的目的在于提供一種基于機械自由度的機械模型包裝方法,該方法可以對機械模型進行少量的拆分并獲取一個滿足目標空間利用率的包裝方式。該方法主要分為如三個步驟:1)根據(jù)機械關節(jié)進行構建搜索樹,搜索樹中的每個節(jié)點表示一種拆分方案;2)對每種拆分方案,將拆分得到的構件組進行優(yōu)化體積;3)將優(yōu)化后的構件組進行包裝。
本發(fā)明方法的具體步驟如下:
(1)輸入機械裝配信息和目標包裝空間利用率。裝配信息包含機械構件幾何信息和構件之間的關節(jié)連接信息??臻g利用率為機械構件體積之和與包裝體積的比值。
(2)定義機械構件用pi表示,機械構件的集合用P表示,P={pi|i∈[1,n]},其中n表示機械模型中構件個數(shù)。定義機械關節(jié)用ci表示,關節(jié)集合用C表示,C={ci|i∈[1,m]},其中m表示機械模型中關節(jié)個數(shù)。
(3)根據(jù)步驟(1)中的關節(jié)集合C建立搜索樹。搜索樹中每個節(jié)點代表一種拆分方式。
(4)采用深度優(yōu)化遍歷搜索樹中的每個節(jié)點。
(5)定義group為單個構件的集合或多個具有關節(jié)連接的構件的集合,用g表示。
(6)根據(jù)步驟(4)遍歷到節(jié)點處,根據(jù)節(jié)點表示的拆分方式將機械模型拆分成多個group。定義拆分成的group集合用G表示,G={gi|∈[1,k]},其中k表示group個數(shù)。
(7)對步驟(5)集合G中的每個元素gi進行體積優(yōu)化。
(8)對步驟(6)中體積優(yōu)化后的集合G用包裝算法進行包裝,并計算包裝后的空間利用率。
(9)如果空間利用率大于目標空間利用率,則繼續(xù)深度遍歷子節(jié)點。否則,返回父節(jié)點訪問其他分支。
(10)遍歷結束后,返回滿足目標空間利用率的最少拆分方式Gmin。
在根據(jù)關節(jié)信息構建搜索樹時,具體實施步驟為:
(3.1)定義關節(jié)連接狀態(tài)標志位?!?”表示失效狀態(tài),斷開該關節(jié)處的連接關系。“1”表示生效狀態(tài),保持該關節(jié)處的連接關系。定義F為生效狀態(tài)的關節(jié)集合。
(3.2)采用自底向上的方式將機械模型從斷開所有關節(jié)的狀態(tài),通過合并的方式找出最優(yōu)解。因此,搜索樹根節(jié)點關節(jié)全為失效狀態(tài),即
(3.3)在構建搜索樹時,每個子節(jié)點確定一個關節(jié)的狀態(tài)。第1層節(jié)點確定第一個連接關系是生效狀態(tài)或者失效狀態(tài)。接著以第一層節(jié)點為根節(jié)點。確定下一個連接關系的狀態(tài)。通過不斷迭代確定所有連接關系的狀態(tài),就可以生成一個具備完全解空間的搜索樹。
(3.4)對于每個節(jié)點,對應的生效狀態(tài)關節(jié)集合F={ci|ci為生效狀態(tài)}。根據(jù)集合F中的關節(jié)生成相應的group。
在進行深度遍歷是,通過如下規(guī)則對算法進行加速:
(4.1)為了減少深度遍歷時的計算量,定義Nmin為當前最少group數(shù)。
(4.2)如果當前集合G中的group數(shù)大于Nmin,就繼續(xù)查找其子節(jié)點,直到集合G中group小于或等于Nmin時再進行計算。
(4.3)如果在某一節(jié)點,集合G中group數(shù)減去未知狀態(tài)連接關系個數(shù)大于Nmin,說明該節(jié)點及其子樹中所有節(jié)點都不是最優(yōu)解,我們直接對子樹進行剪枝。
進行優(yōu)化group的具體實施步驟為:
(7.1)根據(jù)group中存在的關節(jié)信息找出運動傳遞源,并指定運動傳遞關系。
(7.1.1)在存在連接的構件組中,指定最首部或最尾部的構件為運動傳遞源。與傳遞源直接連接的構件為傳遞源的子構件,子構件接受傳遞源的運動,并將運動傳遞給下一個構件。
(7.2)根據(jù)關節(jié)信息將關節(jié)分為轉動關節(jié)、移動關節(jié)和固定關節(jié)。轉動關節(jié)和移動關節(jié)可以通過調節(jié)構件相對位置來改變group體積。
(7.3)將group體積作為目標函數(shù),采用L-BFGS算法優(yōu)化group體積。
(7.4)group體積函數(shù)表示為:
其中,Rot(θi)表示對第i個轉動副關節(jié)相對原始位置旋轉θ角度。Trans(τj)表示對第j個移動副關節(jié)相對原始位置平移τ距離。Vol()表示group的包圍盒體積大小。λ為常數(shù)項,V0lcollision(G)表示group中碰撞體積的大小。
包裝模型時具體步驟為:
(8.1)對比group集合中所有group包圍盒的尺寸,根據(jù)每個group的最大長度和最大寬度來設定包裝容器的底面尺寸。
(8.2)根據(jù)group的體積對group進行排序,并將group進行體素化。
(8.3)為包裝容器創(chuàng)建體素化的3D鏡像I。
(8.4)將排序后的group,依次放入鏡像I中。
(8.4.1)定義旋轉四元組集合用R表示,并通過預定義方式生成集合中的元素。
(8.4.2)根據(jù)集合R中的四元素q∈R對待包裝的groupgi進行旋轉。
(8.4.3)將旋轉后的groupRq(gi)在包裝容器中找出能放置的位置,并計算每個位置的花費。找出最小花費的位置并放置group。
(8.4.4)花費計算公式為:
其中,Δh表示高度增加量,B表示容器體積,表示groupgi下方空白空間大小。Γ為gi在容器底面的2D投影區(qū)域,表示gi與垂線x=<x,y>交叉點的最小高度值。表示已經(jīng)放置在容器中的group與垂線x=<x,y>交叉點的最大高度值。
本發(fā)明的有益效果是:本發(fā)明首次提出了基于機械自由度優(yōu)化機械模型包裝方法,通過優(yōu)化運動關節(jié)參數(shù)使拆分后的構件組體積最小,在包裝時空間利用率最高,該方法在拆分方案和計算效率上都優(yōu)于現(xiàn)有方法。
附圖說明
圖1為平面機構運動關節(jié)種類示意圖;
圖2為搜索樹構建示意圖。
具體實施方式
在基于機械自由度的機械模型包裝方法中,對機械模型進行少量的拆分并獲取一個滿足目標空間利用率的包裝方式。該方法主要分為如三個步驟:1)根據(jù)機械關節(jié)進行構建搜索樹,搜索樹中的每個節(jié)點表示一種拆分方案;2)對每種拆分方案,將拆分得到的構件組進行優(yōu)化體積;3)將優(yōu)化后的構件組進行包裝。其具體步驟如下:
(1)輸入機械裝配信息和目標包裝空間利用率。裝配信息包含機械構件幾何信息和構件之間的關節(jié)連接信息。機械模型的幾何信息為零件的三維網(wǎng)格信息。在本方法中,只討論平面機構模型,機械模型的關節(jié)連接分為固定關節(jié)、轉動關節(jié)和移動關節(jié),關節(jié)種類如圖1所示。在轉動關節(jié)中需要指定旋轉軸和旋轉中心;在移動關節(jié)中需要指定移動向量??臻g利用率為機械構件體積之和與包裝體積的比值。
(2)定義機械構件用pi表示,機械構件的集合用P表示,P={pi|i∈[1,n]},其中n表示機械模型中構件個數(shù)。定義機械關節(jié)用ci表示,關節(jié)集合用C表示,C={ci|i∈[1,m]},其中m表示機械模型中關節(jié)個數(shù)。
(3)根據(jù)步驟(1)中的關節(jié)集合C建立搜索樹。搜索樹中每個節(jié)點代表一種拆分方式。
(4)采用深度優(yōu)化遍歷搜索樹中的每個節(jié)點。
(5)定義group為單個構件的集合或多個具有關節(jié)連接的構件的集合,用g表示。
(6)根據(jù)步驟(4)遍歷到節(jié)點處,根據(jù)節(jié)點表示的拆分方式將機械模型拆分成多個group。定義拆分成的group集合用G表示,G={gi|∈[1,k]},其中k表示group個數(shù)。
(7)對步驟(5)集合G中的每個元素gi進行體積優(yōu)化。
(8)對步驟(6)中體積優(yōu)化后的集合G用包裝算法進行包裝,并計算包裝后的空間利用率。
(9)如果空間利用率大于目標空間利用率,則繼續(xù)深度遍歷子節(jié)點。否則,返回父節(jié)點訪問其他分支。
(10)遍歷結束后,返回滿足目標空間利用率的最少拆分方式Gmin。
在根據(jù)關節(jié)信息構建搜索樹時,如圖2所示,具體實施步驟為:
(3.1)定義關節(jié)連接狀態(tài)標志位:“0”表示失效狀態(tài),斷開該關節(jié)處的連接關系;“1”表示生效狀態(tài),保持該關節(jié)處的連接關系;定義F為生效狀態(tài)的關節(jié)集合。
(3.2)采用自底向上的方式將機械模型從斷開所有關節(jié)的狀態(tài),通過合并的方式找出最優(yōu)解。因此,搜索樹根節(jié)點關節(jié)全為失效狀態(tài),即
(3.3)在構建搜索樹時,每個子節(jié)點確定一個關節(jié)的狀態(tài):第1層節(jié)點確定第一個連接關系是生效狀態(tài)或者失效狀態(tài)。接著以第一層節(jié)點為根節(jié)點。確定下一個連接關系的狀態(tài)。通過不斷迭代確定所有連接關系的狀態(tài),就可以生成一個具備完全解空間的搜索樹。
(3.4)對于每個節(jié)點,對應的生效狀態(tài)關節(jié)集合F={ci|ci為生效狀態(tài)}。根據(jù)集合F中的關節(jié)生成相應的group。
在進行深度遍歷是,通過如下規(guī)則對算法進行加速:
(4.1)為了減少深度遍歷時的計算量,定義Nmin為當前最少group數(shù)。
(4.2)如果當前集合G中的group數(shù)大于Nmin,就繼續(xù)查找其子節(jié)點,直到集合G中group小于或等于Nmin時再進行計算。
(4.3)如果在某一節(jié)點,集合G中group數(shù)減去未知狀態(tài)連接關系個數(shù)大于Nmin,說明該節(jié)點及其子樹中所有節(jié)點都不是最優(yōu)解,我們直接對子樹進行剪枝。
進行優(yōu)化group的具體實施步驟為:
(7.1)根據(jù)group中存在的關節(jié)信息找出運動傳遞源,并指定運動傳遞關系。
(7.1.1)在存在連接的構件組中,指定最首部或最尾部的構件為運動傳遞源。與傳遞源直接連接的構件為傳遞源的子構件,子構件接受傳遞源的運動,并將運動傳遞給下一個構件。
(7.2)由于常用的機械模型大部分都是平面機構。因此,本方法的實施對象也是平面機構。在平面機構中,運動關節(jié)稱為運動副,運動副分為低副和高副。低副是由兩個構件面與面的接觸,高副是由兩個構件的點或線接觸。由于高副接觸面積小,并且無法形成穩(wěn)定的連接關節(jié),所以在連接關系中并不考慮高副。因此,在本方法中,兩個構件之間的關節(jié)可以分為固定關節(jié)、移動副關節(jié)和轉動副關節(jié)。根據(jù)關節(jié)信息將關節(jié)分為轉動關節(jié)、移動關節(jié)和固定關節(jié)。轉動關節(jié)和移動關節(jié)可以通過調節(jié)構件相對位置來改變group體積。
(7.3)將group體積作為目標函數(shù),采用L-BFGS算法優(yōu)化group體積。
(7.4)group體積函數(shù)表示為:
其中,其中,Rot(θi)表示對第i個轉動副關節(jié)相對原始位置旋轉θ角度。Trans(τj)表示對第j個移動副關節(jié)相對原始位置平移τ距離。Vol()表示group的包圍盒體積大小。λ為常數(shù)項,V0lcollision(G)表示group中碰撞體積的大小。
由于目標函數(shù)中存在轉動參數(shù),因此目標函數(shù)不是一個單調函數(shù)。采用L-BFGS優(yōu)化算法只能將group的體積優(yōu)化到一個局部最小值,而且算法的結果與初值的設定有很大關系。因此,我們通過多次采樣的方式修改group中運動關節(jié)的初始值,然后再用L-BFGS算法進行迭代,使group的體積達到最小。
在對模型包裝時,具體步驟為:
(8.1)對比group集合中所有group包圍盒的尺寸,根據(jù)每個group的最大長度和最大寬度來設定包裝容器的底面尺寸。
(8.2)在往容器中放置零件時,放入順序不一樣,也會影響到最后包裝空間利用率。研究發(fā)現(xiàn),如果采用隨機的順序放置零件,不同的放置方案空間利用率差異會高達70%。如果采用零件體積自大到小的順序放置零件,不同的放置方案空間利用率差異僅有20%。因此,在對group集合包裝之前,需要先按照group體積大小進行排序。根據(jù)group的體積對group進行排序,并將group進行體素化。
(8.3)為包裝容器創(chuàng)建體素化的3D鏡像I。在創(chuàng)建鏡像時,以設定的包裝容器底面尺寸為底,以最大高度為高。并根據(jù)體素的光柵化步長創(chuàng)建空的體素化空間。
(8.4)將排序后的group,依次放入鏡像I中。
(8.4.1)定義旋轉四元組集合用R表示,并通過歐拉角均勻采樣生成集合中的所有元素。
(8.4.2)根據(jù)集合R中的四元素q∈R對待包裝的groupgi進行旋轉,旋轉過后的gi幾何形狀記為Rq(gi)。
(8.4.3)將旋轉后的groupRq(gi)在包裝容器中找出能放置的位置,并計算每個位置的花費。找出最小花費的位置并放置group。
(8.4.4)花費計算公式為:
其中,Δh表示高度增加量,B表示容器體積,表示groupgi下方空白空間大小。Γ為gi在容器底面的2D投影區(qū)域,表示gi與垂線x=<x,y>交叉點的最小高度值。表示已經(jīng)放置在容器中的group與垂線x=<x,y>交叉點的最大高度值。