張 星,董 磊,王建立,殷民艇,石瑞敏
(1.中北大學(xué)機(jī)械工程學(xué)院,山西 太原 030051)(2.長治市潞安合力機(jī)械有限責(zé)任公司,山西 長治 046012)
隨著“工業(yè)4.0”和“中國制造2025”戰(zhàn)略的提出,數(shù)控機(jī)床產(chǎn)業(yè)作為中國先進(jìn)制造業(yè)的重要支柱產(chǎn)業(yè),呈現(xiàn)出多功能、定制化和智能化的發(fā)展趨勢。裝配作為檢驗設(shè)計和制造合理性的重要環(huán)節(jié),在傳統(tǒng)制造中消耗了大量的時間和經(jīng)濟(jì)成本,故而通過虛擬裝配進(jìn)行仿真測試成為縮短產(chǎn)品研發(fā)周期的重要途徑。
碰撞檢測是虛擬裝配中的一項關(guān)鍵技術(shù),如何提高碰撞檢測的實時性和精確度成為國內(nèi)外學(xué)者的重要研究課題。Jiménez等[1]首次對機(jī)床模型采用包圍球方法快速實現(xiàn)碰撞檢測,但檢測精度過低;Seiler 等[2]采用有向包圍盒(oriented bounding box,OBB)進(jìn)行結(jié)構(gòu)嵌套的方法加快離散CD(collision detection)算法檢測速度,但檢測精度較低;許榮等[3]采用基于二叉樹的OBB算法模擬機(jī)床加工過程,提高了碰撞檢測的精度;成居寶等[4]提出基于模型的傾斜度選擇AABB(axis-aligned bounding box)或OBB,提高了機(jī)床碰撞檢測的效率;謝新慧等[5]提出了AABB-OBB雙層次混合碰撞檢測算法,在保證效率的同時,提高了檢測精度。
針對數(shù)控機(jī)床仿真系統(tǒng)的研究,學(xué)者們通過各種算法提高了碰撞檢測的效率,保證了虛擬裝配環(huán)境的實時性和沉浸感,然而碰撞檢測效率和精度仍有一定的上升空間。本文在前人算法的基礎(chǔ)上進(jìn)行改進(jìn),提出一種Sphere-EBB雙層次混合碰撞檢測算法,并將其應(yīng)用到數(shù)控機(jī)床虛擬仿真系統(tǒng)中。
1.1.1包圍球
包圍球簡稱為 Sphere,其結(jié)構(gòu)簡單,擬合性低,碰撞檢測速度快。Sphere可以表示為:
R={(x,y,z)|(x-Ox)2+(y-Oy)2+(z-Oz)2 (1) 包圍球球心O的坐標(biāo)為: (2) 包圍球的半徑r為: (3) 式中:R為包圍球的區(qū)間;x,y,z為變量坐標(biāo);xmax,xmin,ymax,ymin,zmax,zmin分別為模型投影到x,y,z軸的最大值和最小值。 Sphere-Sphere 相交原理:若兩包圍球球心間距離小于其半徑之和,則兩包圍球相交。 1.1.2EBB EBB與 AABB和 OBB 等包圍盒相比,具有更高的擬合性,適合碰撞檢測精度高的運動環(huán)境,可以用式(4)表示: (4) EBB中心坐標(biāo): (5) 橢球形EBB半軸長: (6) 式中:a,b,c是正實數(shù),分別為橢球三條軸長度的一半,它們決定了橢球的形狀。 1.1.3混合層次包圍盒算法 在虛擬仿真環(huán)境中,各種單一層次的包圍盒算法都存在一定的局限性,無法兼具高碰撞精度和高碰撞效率?;旌蠈哟伟鼑兴惴ㄍㄟ^對樹型結(jié)構(gòu)進(jìn)行優(yōu)化,將多種不同包圍盒的優(yōu)勢結(jié)合起來,使其整體性能優(yōu)于單一層次包圍盒[6-7]。本文將EBB樹下的根節(jié)點替換成Sphere,在保證碰撞檢測精度高的前提下,提高了碰撞檢測的效率。 Sphere-EBB算法分為3個階段:預(yù)處理階段、初步檢測階段、精確檢測階段[8],其算法流程如圖1所示。 圖1 算法流程 在預(yù)處理階段,首先將模型輸入到虛擬場景中,構(gòu)建Sphere作為樹的根節(jié)點進(jìn)行預(yù)檢測,若模型的Sphere間沒有相交,則判定一定不會碰撞,進(jìn)行下一幀預(yù)檢測;若Sphere相交,則進(jìn)入初步檢測階段。構(gòu)建EBB作為樹型結(jié)構(gòu)的葉節(jié)點進(jìn)行相交測試,若EBB間沒有相交,則沒有發(fā)生碰撞,進(jìn)入下一幀檢測;若EBB相交,進(jìn)入精確檢測階段,進(jìn)行三角形基元的相交測試。EBB相交,則模型發(fā)生碰撞,在虛擬場景中顯示碰撞信息。 本文以CK6140S數(shù)控機(jī)床為原型,利用UG軟件對數(shù)控機(jī)床進(jìn)行三維建模,采用3DMax軟件對數(shù)控機(jī)床的場景和材質(zhì)進(jìn)行渲染,使用Unity 3D作為虛擬拆裝系統(tǒng)的開發(fā)引擎進(jìn)行功能模塊開發(fā),最后通過Visual Studio平臺編寫C#腳本實現(xiàn)場景的跳轉(zhuǎn),搭建一套功能完備、沉浸感強(qiáng)的虛擬拆裝系統(tǒng),具體流程如圖2所示。 圖2 總體設(shè)計 2.2.1UG建模 數(shù)控機(jī)床結(jié)構(gòu)復(fù)雜,主要由外殼防護(hù)罩、主軸系統(tǒng)、進(jìn)給系統(tǒng)、機(jī)床床身、刀架、尾座6部分組成。本文按照先構(gòu)建基礎(chǔ)零件,再逐級裝配成上一級部件的方法,在外殼防護(hù)罩、主軸系統(tǒng)、進(jìn)給系統(tǒng)、機(jī)床床身、刀架、尾座6大部件建模完成后,最后進(jìn)行整機(jī)裝配,如圖3所示。這樣既可以防止繪制零件時出現(xiàn)缺失,提高裝配效率,又可以簡化后續(xù)裝配路徑規(guī)劃。 圖3 裝配結(jié)構(gòu)樹 零件建模時通常先對平面幾何形狀進(jìn)行繪制,然后通過拉伸或旋轉(zhuǎn)等命令構(gòu)建成零件的一個個子物體,最后形成所需零件。但用戶在實際拆裝過程中并不是對零件的子物體進(jìn)行拆裝,子物體的數(shù)量過多會嚴(yán)重影響系統(tǒng)的運行速度。本文針對實際拆裝零件需求,調(diào)用UG軟件中的布爾合并算法對子物體進(jìn)行合并,對模型進(jìn)行簡化,以減少系統(tǒng)內(nèi)存消耗。 2.2.2模型渲染與優(yōu)化 將零件模型導(dǎo)入到3DMax時會生成大量的三角面片,導(dǎo)致模型在Unity 3D中運行時消耗大量計算機(jī)內(nèi)存,影響場景畫面的流暢度,降低用戶的沉浸感,同時模型導(dǎo)入后部分零件的材質(zhì)會丟失,因此需要對模型進(jìn)行優(yōu)化,去除多余的三角面片,對部分零件進(jìn)行貼圖和材質(zhì)的添加,增強(qiáng)模型的真實性。渲染后的模型如圖4所示。 圖4 模型的渲染與優(yōu)化 2.3.1拆卸動畫演示 Unity 3D雖然可以利用系統(tǒng)自身的動畫系統(tǒng)Animation[9]制作動畫,但其功能單一,使用起來很不方便。Xdreamer插件是一款中文交互編輯器,功能強(qiáng)大,且無需編程。首先根據(jù)機(jī)械工藝準(zhǔn)則和裝配信息,生成模型的拆卸序列;其次通過Xdreamer工具庫中的transform組件對零件設(shè)置初始位置和終止位置,自動生成路徑動畫;然后通過UGUI功能為演示界面添加拆卸步驟文本框和Button組件;最后通過Xdreamer狀態(tài)機(jī)進(jìn)行關(guān)聯(lián)。圖5所示為具體的演示界面。 圖5 Android端演示界面 2.3.2場景漫游 場景漫游功能主要通過Steam VR Plugin資源包來實現(xiàn)[10]。從Steam VR Plugin的資源包中調(diào)用預(yù)制體CameraRig組件到廠房場景中,該組件由Controller(left)、Controller(right)、Camera(head)3個子物體組成,Camera(head)將場景數(shù)據(jù)傳輸?shù)筋^戴式設(shè)備中,兩個HTC Vive手柄分別與Controller(left)、Controller(right)進(jìn)行關(guān)聯(lián),生成第一人稱操作視角;將廠房環(huán)境分為可傳送層和不可傳送層,并在相應(yīng)地點放置Teleportpoint預(yù)制體;將相應(yīng)的腳本掛載到Controller(left)上,用戶就能通過手柄在廠房場景中實現(xiàn)自主漫游,如圖6所示。 圖6 VR頭盔進(jìn)行場景漫游 2.3.3零件裝配與拆卸的碰撞檢測 零件的碰撞檢測是手動裝配與拆卸中的一項關(guān)鍵技術(shù),當(dāng)用戶通過鼠標(biāo)或手柄對零件進(jìn)行移動或旋轉(zhuǎn)時,需要對不同零件之間進(jìn)行碰撞檢測并及時反饋碰撞信息,若信息反饋不及時,就容易出現(xiàn)模型穿透現(xiàn)象[11]。以尾架手輪為例,圖7(b)所示為EBB算法碰撞檢測場景,當(dāng)手輪運動到指定的裝配位置時,系統(tǒng)無碰撞反饋;手輪繼續(xù)向前運動,當(dāng)手輪與尾架蓋出現(xiàn)部分重疊時,系統(tǒng)才提示已發(fā)生碰撞,這是因為手輪在移動或旋轉(zhuǎn)過程中,EBB樹遍歷過程復(fù)雜,造成EBB更新不及時、信息反饋滯后導(dǎo)致的。圖7(c)所示為Sphere-EBB混合碰撞檢測算法的檢測場景,當(dāng)手輪獲得運動命令時,對場景中的零件模型構(gòu)建Sphere,由于Sphere不需要更新,因此在手輪運動過程中可快速排除一定不相交的零件,只針對發(fā)生相交的零件快速構(gòu)建EBB,同時遍歷EBB樹獲取相交部分的基元信息,對基元信息進(jìn)行精確檢測,確保碰撞信息的準(zhǔn)確性。 圖7 兩種算法的碰撞檢測比較 由圖7可知,相比EBB碰撞檢測算法,采用Sphere-EBB算法對樹型結(jié)構(gòu)進(jìn)行優(yōu)化,提高了碰撞信息的準(zhǔn)確性和碰撞檢測的效率。 2.3.4考核評估 考核評估模塊是對用戶拆裝知識掌握程度和實操水平進(jìn)行系統(tǒng)評估的模塊。該模塊界面主要由答題表格、工具包、答題與跳過按鈕、信息提示4部分構(gòu)成。以數(shù)控機(jī)床的主軸系統(tǒng)為例,首先選擇拆卸零件和工具,選中的零件和工具高亮顯示,然后選擇答題按鈕,當(dāng)拆卸操作正確時,系統(tǒng)將自動播放拆卸動畫,提示“零件拆卸正確,請進(jìn)行下一步操作”;當(dāng)操作不正確時,系統(tǒng)提示“零件拆卸錯誤,還剩2次答題機(jī)會”,可重新選擇零件和工具;當(dāng)錯誤次數(shù)達(dá)到3次時,系統(tǒng)直接判定拆卸失敗,自動播放相應(yīng)的拆卸動畫;最后系統(tǒng)對考核時間、零件的選取、工具的應(yīng)用等因素進(jìn)行綜合評估,給出相應(yīng)成績和錯誤步驟,如圖8(b)所示,并將數(shù)據(jù)傳輸?shù)接脩魝€人信息庫。 圖8 PC端考核評估模塊 在數(shù)控機(jī)床虛擬仿真系統(tǒng)發(fā)布之前,需要對系統(tǒng)的整體性能進(jìn)行測試。Profiler是Unity 3D中內(nèi)置的檢測工具[12-13],可以直觀反映系統(tǒng)中各個組件與資源所占用內(nèi)存的情況,如圖9所示。 圖9 系統(tǒng)內(nèi)存占用情況 測試結(jié)果表明:系統(tǒng)在運行時,場景中不同功能實現(xiàn)邏輯正確合理,交互響應(yīng)迅速,無卡頓和黑屏現(xiàn)象;UI界面布局科學(xué)合理,符合人性化操作習(xí)慣;功能實現(xiàn)過程運行流暢,幀數(shù)穩(wěn)定,無眩暈感,滿足數(shù)控機(jī)床的開發(fā)需求。 系統(tǒng)測試完畢后打包發(fā)布。以PC端為例,點擊File進(jìn)入Building Settings界面對系統(tǒng)的各個子場景進(jìn)行排序,并設(shè)置主場景;然后進(jìn)入Player Settings進(jìn)行相關(guān)參數(shù)設(shè)置;最后以EXE格式發(fā)布到PC端。 本文通過對三維建模技術(shù)、碰撞檢測技術(shù)、人機(jī)交互技術(shù)等關(guān)鍵技術(shù)的研究,開發(fā)出一款以Unity 3D為開發(fā)引擎、支持多平臺硬件設(shè)備的數(shù)控機(jī)床虛擬拆裝系統(tǒng)。其主要成果如下: 1)針對虛擬場景中易出現(xiàn)模型穿透的問題,提出Sphere-EBB混合包圍盒算法,通過對EBB樹型結(jié)構(gòu)進(jìn)行優(yōu)化,利用Sphere無需更新的特性,快速排除不相交的模型,提高了碰撞檢測的效率; 2)本文開發(fā)的數(shù)控機(jī)床虛擬拆裝系統(tǒng)集場景漫游、動畫演示、手動裝配與拆卸、考核評估等功能于一體,滿足實際開發(fā)的需求,有利于縮短數(shù)控機(jī)床產(chǎn)品的研發(fā)周期。1.2 算法實現(xiàn)流程
2 仿真系統(tǒng)設(shè)計
2.1 總體設(shè)計
2.2 數(shù)控機(jī)床模型
2.3 功能模塊的實現(xiàn)
3 系統(tǒng)測試與發(fā)布
3.1 性能測試
3.2 系統(tǒng)發(fā)布
4 結(jié)論