王 蕾,郭向坤,李 姝
1(中國科學(xué)院大學(xué),北京 100049)
2(中國科學(xué)院 沈陽計(jì)算技術(shù)研究所,沈陽 110168)
3(沈陽理工大學(xué),沈陽 110159)
混合現(xiàn)實(shí)[1]是在虛擬現(xiàn)實(shí)基礎(chǔ)上發(fā)展而來的新技術(shù),它在同一時(shí)刻將計(jì)算機(jī)系統(tǒng)生成的虛擬場景、物體或系統(tǒng)提示等信息疊加到真實(shí)場景中展現(xiàn)給用戶,在同一個(gè)空間場景中虛實(shí)共存,從而產(chǎn)生一個(gè)全新的感官世界[2].基于混合現(xiàn)實(shí)的虛擬拆裝系統(tǒng)是混合現(xiàn)實(shí)技術(shù)在工業(yè)領(lǐng)域的全新應(yīng)用,為機(jī)械部件拆裝帶來了新思路和新方法.
近年來,虛擬拆裝系統(tǒng)得到了大量的研究.然而,這些研究大多集中在系統(tǒng)交互、系統(tǒng)開發(fā)等方面[3-5],很少有針對(duì)拆裝邏輯的研究.現(xiàn)有的關(guān)于拆裝邏輯的研究[6,7]也存在邏輯設(shè)計(jì)只是針對(duì)某一個(gè)或某一類特定的機(jī)械模型,并不能適應(yīng)于所有模型,導(dǎo)致系統(tǒng)存在通用性差、適用范圍小等問題.針對(duì)這些問題,本文提出一種基于圖遍歷算法的數(shù)據(jù)結(jié)構(gòu)來表達(dá)各個(gè)模型的邏輯關(guān)系,并基于此算法設(shè)計(jì)并實(shí)現(xiàn)了一套基于混合現(xiàn)實(shí)的虛擬拆裝原型系統(tǒng).實(shí)驗(yàn)結(jié)果表明:該系統(tǒng)實(shí)現(xiàn)了對(duì)模型部件按工藝流程進(jìn)行虛擬拆解和裝配,提高了虛擬拆裝系統(tǒng)的通用性,說明該系統(tǒng)具有很好的實(shí)用價(jià)值.
該系統(tǒng)基于混合現(xiàn)實(shí)技術(shù),以Unity3D 引擎為開發(fā)工具,借助HoloLens MR 頭顯進(jìn)行交互的通用虛擬拆裝系統(tǒng),系統(tǒng)的整體框架可以分為3個(gè)部分:數(shù)據(jù)工具、系統(tǒng)拆裝邏輯、自然交互系統(tǒng).虛擬拆裝系統(tǒng)整體架構(gòu)圖如圖1所示.
圖1 虛擬拆裝系統(tǒng)整體架構(gòu)圖
數(shù)據(jù)工具負(fù)責(zé)采集處理系統(tǒng)所需的各種數(shù)據(jù)并進(jìn)行存儲(chǔ),供系統(tǒng)其他部分使用.這些數(shù)據(jù)主要包括:(1)模型數(shù)據(jù):用于供交互系統(tǒng)展示的機(jī)械模型.在Solid Works 建模軟件中構(gòu)建設(shè)備部件的機(jī)械模型,然后導(dǎo)入到3D Max 中進(jìn)行減面、紋理重置、渲染等優(yōu)化,使得模型更加兼容Unity 引擎的開發(fā).(2)邏輯數(shù)據(jù):用于供拆裝核心動(dòng)作邏輯判定拆裝是否符合真實(shí)拆裝邏輯,其中主要包括模型的位置信息及模型之間的邏輯關(guān)系.(3)依賴表:用于供拆裝核心運(yùn)作邏輯判定各部分依賴是否得到滿足,實(shí)現(xiàn)對(duì)拆裝順序的限制.
系統(tǒng)拆裝邏輯的設(shè)計(jì)是實(shí)現(xiàn)系統(tǒng)通用性的核心,針對(duì)現(xiàn)有的虛擬拆裝系統(tǒng)所存在的問題,本文設(shè)計(jì)出一種基于圖遍歷算法[8]的數(shù)據(jù)結(jié)構(gòu)來表達(dá)各個(gè)模型的邏輯關(guān)系,解決了拆裝順序的可定義和通用性等問題,并能夠?qū)δP筒考垂に嚵鞒踢M(jìn)行虛擬拆解和裝配.虛擬拆裝系統(tǒng)拆裝核心運(yùn)作邏輯主要包括以下兩個(gè)方面:連接邏輯和順序邏輯.系統(tǒng)拆裝邏輯的設(shè)計(jì)與實(shí)現(xiàn)將在第3節(jié)詳細(xì)介紹.
結(jié)合語音交互技術(shù)、手勢交互技術(shù)以及交互方法的組織方法,獲取和識(shí)別語音、手勢等信息建立多模式人機(jī)交互接口,構(gòu)建出一套滿足直接與虛擬信息進(jìn)行實(shí)時(shí)互動(dòng)交互的人機(jī)自然交互接口.結(jié)合拆裝流程對(duì)裝配人員意圖智能化理解,保證裝配操作人員在拆裝過程中,不僅能夠?qū)δP筒考垂に嚵鞒踢M(jìn)行虛擬拆解和裝配,還能準(zhǔn)確無誤地獲取裝配交互信息,實(shí)現(xiàn)信息實(shí)時(shí)共享.最終設(shè)計(jì)出一種全息融合顯示模式,并完成支持語音和手勢自然交互系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),提高用戶的交互效率和交互體驗(yàn).
機(jī)械模型的合理正確拆裝是虛擬拆裝系統(tǒng)的關(guān)鍵,系統(tǒng)開發(fā)過程中必須借助一系列嚴(yán)密的邏輯思想,才能夠控制整個(gè)拆裝流程按照部件實(shí)際的拆裝時(shí)序進(jìn)行虛擬拆解和裝配[9].虛擬拆裝系統(tǒng)要實(shí)現(xiàn)對(duì)機(jī)械模型通用的拆裝仿真,其拆裝核心運(yùn)作邏輯就要詳細(xì)設(shè)計(jì)以下兩個(gè)部分:連接邏輯和順序邏輯.
在虛擬拆裝過程中,系統(tǒng)需要“感知”哪些機(jī)械部件是連著的,即系統(tǒng)要像人一樣知道部件的連接邏輯.以及當(dāng)操作某一部分時(shí)會(huì)對(duì)部件的其他部分造成哪些影響,即需要讓系統(tǒng)“感知”現(xiàn)實(shí)中部件連接的特點(diǎn).因此,虛擬拆裝系統(tǒng)連接邏輯的設(shè)計(jì)需要考慮以下兩個(gè)方面:(1)任意兩個(gè)可連接的部件,可以連接,也可以拆解.(2)連接在一起的幾個(gè)部件,當(dāng)拖動(dòng)其中一個(gè)部件時(shí),與之相連的部件均會(huì)發(fā)生聯(lián)動(dòng),它們的相對(duì)位置始終保持不變.
3.1.1 連接邏輯設(shè)計(jì)
機(jī)械部件的拆裝過程與分形或遞歸的思想相似,對(duì)一個(gè)部件或幾個(gè)部件組成的整體而言,二者的操作和管理幾乎相同.因此為簡化系統(tǒng)設(shè)計(jì),需要對(duì)其做一個(gè)封裝,若干個(gè)(包括一個(gè))連接好的部件作為一個(gè)節(jié)點(diǎn)進(jìn)行處理.但同時(shí),多部件組成的復(fù)合節(jié)點(diǎn)在拆裝過程中是動(dòng)態(tài)的、多變的,需要進(jìn)行動(dòng)態(tài)維護(hù),并且保存若干個(gè)最大的復(fù)合節(jié)點(diǎn)在程序?qū)崿F(xiàn)和使用上沒有明顯的必要.另外,作為整個(gè)系統(tǒng)的基礎(chǔ),單部件節(jié)點(diǎn)保存著整個(gè)機(jī)械模型的關(guān)系數(shù)據(jù),是始終存在的;作為單部件節(jié)點(diǎn)的引用和封裝,復(fù)合節(jié)點(diǎn)不包含實(shí)質(zhì)信息的邏輯存在,設(shè)計(jì)為在需要時(shí)生成的臨時(shí)對(duì)象.
通過對(duì)部件的連接方式總結(jié)和分析,本文設(shè)計(jì)一種類似化學(xué)鍵[10]概念的連接邏輯.每個(gè)節(jié)點(diǎn)上有若干個(gè)半鍵(HalfBond)可以與其他節(jié)點(diǎn)上的半鍵配對(duì)形成一個(gè)連接,這樣兩個(gè)節(jié)點(diǎn)之間就有了邏輯關(guān)系.根據(jù)機(jī)械部件的連接特點(diǎn),為實(shí)現(xiàn)連接邏輯的通用性,半鍵的設(shè)計(jì)需要考慮以下幾點(diǎn):(1)與化學(xué)鍵不同的是半鍵有類型,只有同類型的半鍵才能配對(duì)連接.同時(shí),同類型半鍵有不對(duì)稱性,即區(qū)分公母口.(2)部件上的每個(gè)半鍵均有自己的位置信息,能夠判斷與其他半鍵之間的位置關(guān)系.(3)復(fù)合節(jié)點(diǎn)的半鍵,來自其所包含的部件,部件之間已配對(duì)的半鍵不再暴露出來作為復(fù)合節(jié)點(diǎn)的半鍵.
3.1.2 連接邏輯算法實(shí)現(xiàn)
連接邏輯算法設(shè)計(jì)的關(guān)鍵是要“感知”部件之間的連接關(guān)系.本文定義一種特殊的圖結(jié)構(gòu)G=
圖2 部件連接狀態(tài)
連接邏輯算法的關(guān)鍵是在圖G=
從算法流程圖中可以看出,本文提出的算法使用圖的深度優(yōu)先搜索(DFS)遍歷對(duì)由部件之間連接關(guān)系構(gòu)成的圖G=
(1)創(chuàng)建兩個(gè)集合,用來在遍歷的同時(shí)分別存儲(chǔ)節(jié)點(diǎn)和半鍵;同時(shí)定義一個(gè)變量,用來記錄新節(jié)點(diǎn)的個(gè)數(shù),執(zhí)行(2).
(2)判斷當(dāng)前節(jié)點(diǎn)是否為復(fù)雜節(jié)點(diǎn),若是則將復(fù)雜節(jié)點(diǎn)中的所有節(jié)點(diǎn)加入到節(jié)點(diǎn)集合中執(zhí)行(3),否則執(zhí)行(6).
(3)將所有單一節(jié)點(diǎn)存儲(chǔ)到節(jié)點(diǎn)集合中,執(zhí)行(4).
(4)判斷是否存在未遍歷的節(jié)點(diǎn).若存在則執(zhí)行(5),否則執(zhí)行(8).
(5)從節(jié)點(diǎn)集合中取出下一個(gè)節(jié)點(diǎn),若該鍵連接節(jié)點(diǎn),則新節(jié)點(diǎn)數(shù)加一,并遞歸執(zhí)行(4);否則半鍵加入鍵集合執(zhí)行(4).
(6)判斷集合中是否包含了當(dāng)前節(jié)點(diǎn),若包含則說明已遍歷過該節(jié)點(diǎn),即圖中存在環(huán)路執(zhí)行(8),否則執(zhí)行(3).
(7)返回新節(jié)點(diǎn)數(shù),執(zhí)行(4).
(8)若新節(jié)點(diǎn)數(shù)大于零說明存在更大的包含節(jié)點(diǎn),即找到了極大連通子圖.否則返回當(dāng)前節(jié)點(diǎn),說明沒有比自身更大的連通圖.至此,算法實(shí)現(xiàn)找到了最大的包含節(jié)點(diǎn),即獲取到了部件之間的連接關(guān)系.
圖3 連接邏輯算法流程圖
機(jī)械設(shè)備裝配中各部件間的拆裝順序具有一定的順序邏輯,因此,在虛擬拆裝系統(tǒng)設(shè)計(jì)時(shí)需要考慮到拆裝順序可能造成的影響,即在拆裝過程中,系統(tǒng)需要“辨別”拆裝順序是否按照工藝流程進(jìn)行,若是則做出正確的拆裝響應(yīng),否則需要做出錯(cuò)誤提示.讓系統(tǒng)“辨別”拆裝順序正確與否的關(guān)鍵是系統(tǒng)順序邏輯設(shè)計(jì).
3.2.1 順序邏輯設(shè)計(jì)
為簡化設(shè)計(jì),本文定義一種特殊的數(shù)據(jù)結(jié)構(gòu)——依賴表來實(shí)現(xiàn)對(duì)拆裝順序的限制.其核心思想是:當(dāng)一個(gè)節(jié)點(diǎn)包含某幾個(gè)部件時(shí),它必須包含另外幾個(gè)部件,否則該節(jié)點(diǎn)存在依賴異常,即拆裝順序不正確.在實(shí)現(xiàn)中,前者使用一個(gè)復(fù)合節(jié)點(diǎn)做篩選,后者使用另一個(gè)復(fù)合節(jié)點(diǎn)做判定.在程序啟動(dòng)時(shí)按照依賴表把每條依賴寫入對(duì)應(yīng)部件節(jié)點(diǎn)中,每個(gè)部件節(jié)點(diǎn)可能存在多條依賴.當(dāng)判斷某節(jié)點(diǎn)內(nèi)是否存在依賴異常時(shí),通過篩選節(jié)點(diǎn)確定哪幾條依賴生效,然后對(duì)生效的依賴所對(duì)應(yīng)的判定節(jié)點(diǎn)進(jìn)行判定.若判定全部通過,則依賴全部滿足,否則存在依賴異常.本文中,依賴表定義為二維數(shù)組,每行兩個(gè)元素,分別為篩選節(jié)點(diǎn)和判定節(jié)點(diǎn)(這里的節(jié)點(diǎn)包含復(fù)雜節(jié)點(diǎn)).
在安裝過程中,當(dāng)兩個(gè)半鍵配對(duì)連接后,兩個(gè)部件及其連接的所有部件形成一個(gè)復(fù)合節(jié)點(diǎn).如果連接這兩個(gè)部件前需要先連其他部件,那么這個(gè)復(fù)合節(jié)點(diǎn)中必然存在依賴異常,否則不存在依賴異常.因此,判斷該鍵是否可以配對(duì)連接,即判斷連接后該節(jié)點(diǎn)是否存在依賴異常.類似的,在拆解過程中,當(dāng)拆開兩個(gè)半鍵時(shí),所屬的兩個(gè)部件會(huì)有各自的復(fù)合節(jié)點(diǎn).如果拆開這兩個(gè)部件前需要先拆其他部件,那么這兩個(gè)復(fù)合節(jié)點(diǎn)中必然存在依賴異常.因此,判斷該鍵是否可以斷開,即判斷拆開后的兩個(gè)復(fù)合節(jié)點(diǎn)是否存在依賴異常.
3.2.2 順序邏輯算法實(shí)現(xiàn)
依賴表中已經(jīng)存入了部件節(jié)點(diǎn)之間的依賴關(guān)系.系統(tǒng)要正確實(shí)現(xiàn)拆裝順序,需要設(shè)計(jì)算法來解讀依賴表,系統(tǒng)會(huì)根據(jù)依賴的滿足與否判定拆裝是否正確,并以此體現(xiàn)拆裝順序.
解讀依賴表首先考慮用包含關(guān)系進(jìn)行判斷,即判斷篩選節(jié)點(diǎn)中是否包含判定節(jié)點(diǎn).但是包含關(guān)系不能解決所有情況,例如存在相同部件,檢測出包含但不能證明是該節(jié)點(diǎn)所需的部件,因此不僅需要考慮類型包含還需要考慮實(shí)例包含和結(jié)構(gòu)包含.在所有的包含類型中,類型包含是基礎(chǔ),通過參考節(jié)點(diǎn)的數(shù)據(jù)來決定進(jìn)階判定,若參考節(jié)點(diǎn)無實(shí)例無鍵數(shù)據(jù),則為純類型包含;若其中若干節(jié)點(diǎn)有實(shí)例物體,則另加實(shí)例判定;若其中若干物體有鍵數(shù)據(jù),則另加結(jié)構(gòu)判定.算法流程設(shè)計(jì)如下:(1)檢測篩選節(jié)點(diǎn)的類型包含.(2)將檢測到的類型加入到實(shí)例集合中.(3)使用圖的廣度優(yōu)先搜索檢測判定節(jié)點(diǎn)的具體實(shí)例.(4)若存在實(shí)例包含則對(duì)實(shí)例的鍵的位置進(jìn)行結(jié)構(gòu)包含檢測.當(dāng)3種包含都滿足則說明拆裝過程不存在依賴異常,部件與部件之間的鍵連接或斷開操作順序正確.否則,依賴異常,拆裝操作中斷.
虛擬拆裝系統(tǒng)借助HoloLens MR 頭顯采用混合現(xiàn)實(shí)的方式進(jìn)行交互,基于混合現(xiàn)實(shí)的人機(jī)交互為用戶和應(yīng)用環(huán)境提供了無縫的界面[11].本文采用機(jī)械模型——6 關(guān)節(jié)機(jī)械臂以及特種閥門進(jìn)行系統(tǒng)通用性測試,并驗(yàn)證系統(tǒng)拆裝邏輯的準(zhǔn)確性.機(jī)械臂主要由6個(gè)節(jié)點(diǎn)組成,具體結(jié)構(gòu)如圖4.
圖4 機(jī)械臂
(1)移動(dòng):將節(jié)點(diǎn)3到節(jié)點(diǎn)6 共4個(gè)部件安裝在一起形成一個(gè)整體,移動(dòng)其中一個(gè)部件節(jié)點(diǎn)5 導(dǎo)致連帶移動(dòng),即部件整體形成的復(fù)雜節(jié)點(diǎn)也會(huì)向相同的方向移動(dòng).移動(dòng)操作效果圖如圖5.
圖5 移動(dòng)測試
(2)旋轉(zhuǎn):將節(jié)點(diǎn)4到節(jié)點(diǎn)6 共3個(gè)部件安裝在一起形成一個(gè)整體,將其中一個(gè)節(jié)點(diǎn)逆時(shí)針旋轉(zhuǎn)90°,部件整體形成的復(fù)雜節(jié)點(diǎn)也會(huì)跟隨旋轉(zhuǎn)相同的角度.旋轉(zhuǎn)操作效果圖如圖6.
圖6 旋轉(zhuǎn)測試
(3)固定:將節(jié)點(diǎn)3到節(jié)點(diǎn)6 共4個(gè)部件安裝在一起形成一個(gè)整體,固定其中一個(gè)節(jié)點(diǎn),部件整體形成的復(fù)雜節(jié)點(diǎn)也被固定,無法進(jìn)行移動(dòng)或者旋轉(zhuǎn)等操作.固定操作效果圖如圖7.
圖7 固定測試
測試結(jié)果表明,在拆裝過程中連接邏輯能夠精確判斷部件之間的連接關(guān)系,系統(tǒng)能夠根據(jù)具體的操作做出正確的響應(yīng).滿足了連接邏輯的設(shè)計(jì)要求,驗(yàn)證了連接邏輯的準(zhǔn)確性.
節(jié)點(diǎn)3到節(jié)點(diǎn)6 共4個(gè)部件安裝在一起形成一個(gè)整體,將形成的復(fù)雜節(jié)點(diǎn)設(shè)置為T.按照工藝流程及測試系統(tǒng)需要,我們?cè)谝蕾嚤碇性O(shè)置依賴關(guān)系為:復(fù)雜節(jié)點(diǎn)T與節(jié)點(diǎn)2裝配之前需要先將節(jié)點(diǎn)2與節(jié)點(diǎn)1裝配,拆解順序與此相反.因此,若嚴(yán)格按照安裝順序進(jìn)行裝配,順序邏輯不存在依賴異常,系統(tǒng)將準(zhǔn)確的進(jìn)行裝配操作;若違反安裝順序,例如在節(jié)點(diǎn)2 未與節(jié)點(diǎn)1裝配之前將復(fù)雜節(jié)點(diǎn)T與節(jié)點(diǎn)2進(jìn)行裝配,系統(tǒng)將提示裝配異常.拆解操作與裝配順序相反,這里不加贅述.順序邏輯測試如圖8.
圖8 順序邏輯測試
測試結(jié)果表明,在拆裝過程中順序邏輯能夠正確處理部件之間的拆裝順序,系統(tǒng)能夠按照工藝流程準(zhǔn)確的進(jìn)行拆解和裝配,若違反順序,系統(tǒng)將不會(huì)做出拆裝響應(yīng).滿足了順序邏輯的設(shè)計(jì)要求,驗(yàn)證了順序邏輯的準(zhǔn)確性.
為了使測試結(jié)果更具普適性,本文對(duì)特種閥門進(jìn)行了同樣的測試.圖9展示了特種閥門在該虛擬拆裝系統(tǒng)中的拆裝測試,測試結(jié)果表明:系統(tǒng)的拆裝邏輯能夠按照工藝流程正確的處理部件之間的拆解和裝配,即驗(yàn)證了系統(tǒng)拆裝邏輯的準(zhǔn)確性以及系統(tǒng)的通用性.
圖9 閥門拆裝測試
為了解決現(xiàn)有的虛擬拆裝系統(tǒng)存在通用性差等問題,本文提出了一種基于圖遍歷算法的拆裝邏輯,并在此基礎(chǔ)上設(shè)計(jì)實(shí)現(xiàn)了一套基于混合現(xiàn)實(shí)的虛擬拆裝系統(tǒng).最后,通過自然交互的方式,使用了不同模型對(duì)該系統(tǒng)進(jìn)行了測試.測試結(jié)果表明:該系統(tǒng)不僅能夠生動(dòng)形象的展示模型拆裝的過程,也能正確處理部件之間的拆裝順序,并且能夠按照工藝流程對(duì)拆裝過程進(jìn)行限制,對(duì)于不同的模型具有通用性.因此,本系統(tǒng)初步解決了現(xiàn)有虛擬拆裝系統(tǒng)通用性差、適用范圍小等問題,具有很高的實(shí)用價(jià)值.
本文實(shí)現(xiàn)的系統(tǒng)在用戶體驗(yàn)方面還需進(jìn)一步完善,同時(shí)本文提出的算法也有改進(jìn)的余地.下一步將提高界面友好度并改進(jìn)算法復(fù)雜度,以實(shí)現(xiàn)系統(tǒng)更加真實(shí)高效的運(yùn)行.