王子珩,姜忠鼎
(1.復(fù)旦大學(xué) 軟件學(xué)院,上海 200438;2.復(fù)旦大學(xué) 上海市數(shù)據(jù)科學(xué)重點實驗室,上海 200438)
近年來,頭戴式顯示(Head Mounted Display,HMD)設(shè)備在重量、分辨率、續(xù)航能力和視場等方面不斷改進(jìn),以便于供個人用戶使用。由于HMD 設(shè)備可以將三維可視內(nèi)容懸浮呈現(xiàn)在用戶眼前,因此與傳統(tǒng)桌面顯示器相比,HMD 設(shè)備在不占用額外物理空間的條件下,能夠顯示數(shù)量更多、形式類型更豐富的內(nèi)容[1],有望被廣泛應(yīng)用于日常辦公、學(xué)習(xí)場景中。
學(xué)術(shù)界已有較多關(guān)于使用HMD 設(shè)備進(jìn)行信息呈現(xiàn)的研究。文獻(xiàn)[2]提出Personal Cockpit 概念,探索了在AR 空間下多窗口布局的參數(shù)對用戶交互效率的影響,通過多項用戶對比實驗獲得AR 空間下多窗口布局需要遵循的規(guī)律,但是Personal Cockpit 未研究相對于隔空手勢更加高效和準(zhǔn)確的交互方式。文獻(xiàn)[3]提出Spatial Analytic Interfaces,使日常的可視化分析任務(wù)在任何合適的時間和地點都能夠就地執(zhí)行,但是該研究同樣沒有進(jìn)一步研究增強(qiáng)顯示HMD 的交互問題。文獻(xiàn)[4-5]提出以VR 設(shè)備作為遠(yuǎn)程辦公平臺,文獻(xiàn)[6-7]提出基于VR 設(shè)備的虛擬辦公應(yīng)用,可以在外出甚至交通工具上進(jìn)行辦公,并且將遠(yuǎn)程用戶以虛擬化的形式呈現(xiàn)在本地用戶的VR 空間中,但是該應(yīng)用僅實現(xiàn)基本的畫面呈現(xiàn)和簡單交互。Facebook 提出Infinite Office 概念[8],在VR空間中將多個可視化窗口環(huán)繞在用戶眼前,支持隔空手勢和鍵盤輸入,滿足使用者日?;k公的需求。但是Facebook Infinite Office 只實現(xiàn)了基于隔空手勢的跨窗口交互,并且VR 設(shè)備呈現(xiàn)的均為虛擬畫面,因此無法利用空間定位技術(shù)實現(xiàn)與真實空間的空間對齊,并且在該概念中,僅支持使用手勢在多窗口間進(jìn)行切換和交互,以及利用鍵盤進(jìn)行輸入,未考慮到鼠標(biāo)交互這種更為高效且準(zhǔn)確的交互方式。
關(guān)于使用HMD 設(shè)備與真實空間虛實融合進(jìn)行交互和顯示的研究已取得一定的進(jìn)展。早在1999年,文獻(xiàn)[9]提出基于虛實融合建立連續(xù)工作空間的概念。Mirage[10]是一個將AR 頭顯內(nèi)畫面作為電腦擴(kuò)展顯示屏,實現(xiàn)AR 空間與真實電腦畫面的虛實融合,但是該應(yīng)用沒有實現(xiàn)交互空間的統(tǒng)一,用戶只能使用電腦自帶的鍵盤鼠標(biāo)與AR 空間內(nèi)的擴(kuò)展屏交互,而在AR 空間內(nèi)用戶無法與電腦屏幕進(jìn)行交互。文獻(xiàn)[11]實現(xiàn)AR 頭顯與大屏的虛實融合,并通過空間定位技術(shù)建立虛擬畫面和真實大屏之間的聯(lián)系,但是該系統(tǒng)并不涉及多窗口顯示,因此無需考慮窗口間切換的交互問題,并且使用的也是手勢交互,不支持鍵盤和鼠標(biāo)。文獻(xiàn)[12]將物理桌面屏與AR 眼鏡中的多維數(shù)據(jù)圖表相結(jié)合,增強(qiáng)了復(fù)雜數(shù)據(jù)的呈現(xiàn)形式,但是僅支持?jǐn)?shù)據(jù)圖表增強(qiáng)現(xiàn)實,具有一般的泛用性。文獻(xiàn)[13]提出使用AR 頭顯增強(qiáng)現(xiàn)實中的紙質(zhì)文件系統(tǒng)HoloDoc,但是該系統(tǒng)的應(yīng)用場景較局限,無法應(yīng)用在使用電腦的數(shù)字化辦公場景中。文獻(xiàn)[14]設(shè)計使用智能手機(jī)在AR 頭顯中進(jìn)行多窗口管理的系統(tǒng)。文獻(xiàn)[15-16]分別提出BISHARE 和VESAD,實現(xiàn)了AR 頭顯與手機(jī)屏幕的虛實融合,但是在該系統(tǒng)中僅支持基于多種手勢的交互,交互效率、準(zhǔn)確性都有所欠缺。文獻(xiàn)[17]通過空間定位將真實世界中的觸摸屏映射到VR 空間內(nèi),從而打破了真實世界與VR 空間的交互界限。在VR 空間內(nèi),用戶通過在觸摸屏上移動手指來操作虛擬畫面上的光標(biāo)。該系統(tǒng)的不足之處在于,與基于鍵鼠的交互相比,基于觸摸屏的交互準(zhǔn)確度較低、交互動作也更少。由于該系統(tǒng)基于VR 頭顯實現(xiàn),因此無法對真實空間中的畫面進(jìn)行增強(qiáng)顯示。文獻(xiàn)[18]提出Gluey,利用AR 眼鏡內(nèi)的畫面作為“剪切板”,在注冊系統(tǒng)中的多設(shè)備之間傳遞圖像并重定向交互設(shè)備的輸入,盡管該系統(tǒng)同時涉及了真實和虛擬畫面,且交互設(shè)備輸入的重定向大幅提高了交互效率,但AR 眼鏡中的虛擬畫面僅起到臨時畫布的作用,并沒有與真實設(shè)備達(dá)到虛實融合的效果。最新的研究進(jìn)展來自文獻(xiàn)[19],他們利用Windows Duplication API 采集本機(jī)電腦畫面,在Unity Editor 中運行并通過Holographic Remoting Player 將采集的畫面實時傳輸并顯示在AR 眼鏡中,同時使用電腦相連的鍵盤和鼠標(biāo)進(jìn)行正常交互。該成果僅將AR 眼鏡用作虛擬外接顯示器,所有的交互只能通過與電腦本身相連的設(shè)備才能完成,在AR 眼鏡中只能觀看。該系統(tǒng)必須運行Unity Editor 以及AR 眼鏡中的Remoting Player,并非運行于AR 眼鏡的本機(jī)應(yīng)用,并且只能顯示一臺電腦的桌面內(nèi)容,其可擴(kuò)展性和實用性都較低。
本文基于HoloLens 2 AR 智能眼鏡,利用混合現(xiàn)實工具包[20](Mixed Reality Toolkit,MRTK)設(shè)計遠(yuǎn)程桌面增強(qiáng)顯示系統(tǒng),以支持多模態(tài)交互。采用基于二維碼識別的空間定位技術(shù)將真實電腦畫面投射至AR 虛擬空間內(nèi),通過坐標(biāo)空間轉(zhuǎn)換和交互接口底層映射的技術(shù),實現(xiàn)隔空手勢、鍵盤鼠標(biāo)與真實電腦桌面以及AR 虛擬空間內(nèi)畫面的交互。
實現(xiàn)AR 虛擬空間與真實電腦畫面虛實融合的主要步驟是首先將真實電腦屏幕準(zhǔn)確映射到AR 虛擬空間中,并在AR 空間中與其物理位置空間對齊;其次AR頭顯通過網(wǎng)絡(luò)向電腦發(fā)送有序、正確的交互指令。
真實電腦屏幕在AR 空間內(nèi)空間對齊的實現(xiàn)是利用HoloLens 2 眼鏡上4 個黑白攝像頭對黑白圖案(二維碼)進(jìn)行識別[21],當(dāng)識別完成后以該二維碼平面為基準(zhǔn)面,建立一個局部坐標(biāo)系。本文考慮到HoloLens 2關(guān)于二維碼識別的官方文檔[21]中要求二維碼邊長在5~10 cm 之間且對距離、環(huán)境有所限制,在正常光照的房間內(nèi),測試了不同尺寸、同樣內(nèi)容的二維碼能夠識別的最遠(yuǎn)距離,結(jié)果如表1 所示。
表1 不同尺寸二維碼的最遠(yuǎn)識別距離Table 1 The farthest recognition distance of QR code with different sizes cm
從表1 可以看出,邊長6 cm 的二維碼能夠在60 cm 以內(nèi)的范圍內(nèi)穩(wěn)定識別。由于考慮到定標(biāo)二維碼對屏幕畫面的遮擋,同時在坐姿狀態(tài)下人眼距離屏幕的距離約為50~60 cm,因此本文選擇邊長為6 cm 的二維碼,做成卡片放置在電腦屏幕右下角進(jìn)行定標(biāo),如圖1 所示。
圖1 二維碼定標(biāo)Fig.1 QR code calibration
HoloLens 2 識別該二維碼后建立的局部坐標(biāo)系如圖2 所示(彩色效果見《計算機(jī)工程》官網(wǎng)HTML 版)。
圖2 坐標(biāo)系建立示意圖Fig.2 Schematic diagram of coordinate system establishment
在此基礎(chǔ)上,本文通過測量屏幕的長、寬等物理信息,將真實電腦屏幕在AR 空間中實現(xiàn)空間對齊,如圖3 所示。從圖3 可以看出,空心圓點為手部射線與真實屏幕在AR 空間內(nèi)映射結(jié)果的交點,實心圓點為該交點映射到真實電腦屏幕上的顯示點,兩者幾乎重合,表明實現(xiàn)了空間對齊。由于二維碼緊貼在屏幕表面,因此無論是屏幕發(fā)生移動、旋轉(zhuǎn)還是翻轉(zhuǎn),二維碼都能在AR 空間中準(zhǔn)確確定物理屏幕的位置。
圖3 基于二維碼實現(xiàn)的空間對齊Fig.3 Space alignment based on QR code
當(dāng)真實電腦畫面在AR 空間中實現(xiàn)空間對齊后,本文將物理畫面映射到虛擬空間中,使得后續(xù)在虛擬空間中能夠?qū)ξ锢懋嬅妫雌溆成浣Y(jié)果)和虛擬畫面統(tǒng)一對待。
本文系統(tǒng)利用AR 頭顯和連接在AR 頭顯上的交互設(shè)備向遠(yuǎn)程電腦發(fā)送模擬鼠標(biāo)和鍵盤輸入數(shù)據(jù)的方式,實現(xiàn)交互空間的統(tǒng)一。本文系統(tǒng)使用Windows10 操作系統(tǒng),其系統(tǒng)自帶的動態(tài)鏈接庫user32.dll 可以提供mouse_even(t)和SendInpu(t)接口,將鼠標(biāo)、鍵盤的輸入信息映射成操作系統(tǒng)底層的鼠標(biāo)和鍵盤。因此,遠(yuǎn)程電腦只需要獲取AR 空間內(nèi)交互光標(biāo)的點擊狀態(tài)、交互光標(biāo)在電腦屏幕上的歸一化坐標(biāo)和鍵盤的按鍵數(shù)據(jù),將AR 頭顯及其連接交互設(shè)備的輸入映射到遠(yuǎn)程電腦上,從而實現(xiàn)交互空間的統(tǒng)一。
HoloLens 2 眼鏡支持與藍(lán)牙鼠標(biāo)和藍(lán)牙鍵盤的無線連接,通過Stream Socket 與藍(lán)牙設(shè)備通信,準(zhǔn)確獲取鼠標(biāo)的點擊狀態(tài)、絕對位置和鍵盤的按鍵數(shù)據(jù)。對于光標(biāo)在電腦屏幕上歸一化坐標(biāo)的獲取。HoloLens 2 眼鏡將光標(biāo)的歸一化坐標(biāo)、點擊狀態(tài)和鍵盤的按鍵數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送至遠(yuǎn)程電腦,遠(yuǎn)程電腦通過Windows 操作系統(tǒng)底層接口映射成鍵鼠事件,從而實現(xiàn)AR 眼鏡對遠(yuǎn)程電腦的控制。
由于本文系統(tǒng)涉及真實電腦畫面在虛擬空間中的映射結(jié)果以及多個虛擬畫面窗口,因此需要考慮并設(shè)計包括多個真實和虛擬窗口的布局,方便用戶使用。文獻(xiàn)[22]提出Ethereal planes 設(shè)計框架?;谠撛O(shè)計框架的理念,ENS B 等人提出Personal Cockpit[1]并通過多項用戶對比實驗,根據(jù)不同參數(shù)下用戶操作的準(zhǔn)確性和疲勞感,確定局部最優(yōu)的參數(shù)組合。然而,對于Personal Cockpit,所有的窗口均為虛擬窗口,因此無需考慮任何現(xiàn)實的物理因素。在本文系統(tǒng)中,將真實電腦畫面通過空間對齊映射到虛擬空間的“真實窗口”,這是本文系統(tǒng)多窗口布局設(shè)計必須額外考慮的因素。此外,Personal Cockpit 的測試環(huán)境并非真正的AR 眼鏡,因此對于參數(shù)的選擇考慮較少,同時在對比實驗中所有的參數(shù)組合都是預(yù)先設(shè)置,無法根據(jù)不同用戶的個性化體驗進(jìn)行修改,因此缺乏實際使用價值。
本文系統(tǒng)則支持根據(jù)用戶配置文件中預(yù)先設(shè)置的參數(shù),引入到窗口布局位置計算模型中,自動計算位置并對多窗口在AR 空間中進(jìn)行布局,同時在運行時,還支持用戶通過面板修改配置,更新計算模型參數(shù),重新計算并進(jìn)行窗口布局。該窗口布局計算模型包括屏幕坐標(biāo)系、用戶坐標(biāo)系(又稱相機(jī)坐標(biāo)系)和世界坐標(biāo)系之間的坐標(biāo)變換,如圖4所示。
圖4 窗口布局計算模型Fig.4 Window layout calculation model
本文構(gòu)建的窗口布局計算模型考慮在相機(jī)可視范圍內(nèi)只有一個虛擬窗口的情況。在三維的AR空間中,三維的物體經(jīng)過多次變換,其世界坐標(biāo)最終被映射成屏幕空間下的三維坐標(biāo)(Z坐標(biāo)僅用于保留深度信息),三維物體以二維圖像的形式顯示在用戶眼前。用戶只需配置虛擬窗口在屏幕空間下的尺寸比例和偏移量。屏幕空間坐標(biāo)系如圖5所示。
圖5 屏幕空間坐標(biāo)系Fig.5 Screen space coordinate system
窗口中心在屏幕空間下的三維坐標(biāo)(xscreenPos,yscreenPos,zscreenPos)如式(1)所示:
其中:d為相機(jī)的焦平面距離;Rx為相機(jī)橫向分辨率;raspect為寬高比;α為用戶配置的窗口比例;(xoffset,yoffset)為配置窗口的左下角偏移量。
窗口布局計算模型將坐標(biāo)系從屏幕空間轉(zhuǎn)換到相機(jī)坐標(biāo)系中。相機(jī)空間坐標(biāo)系如圖6 所示。
圖6 相機(jī)空間坐標(biāo)系Fig.6 Camera space coordinate system
透視相機(jī)根據(jù)其前后裁剪平面的距離n、f,近裁剪平面的上下左右距離t、b、l、r,以及其前裁剪平面的左上和右下的頂點坐標(biāo)(l,t,-n)和(r,b,-n),確定一個四棱臺。在該四棱臺的六個面組成的包圍盒中,通過透視投影矩陣將三維坐標(biāo)(由于三維坐標(biāo)不能通過矩陣變換實現(xiàn)平移,在計算機(jī)圖形學(xué)中一般增加一個w分量構(gòu)建四維齊次坐標(biāo),利用4×4 矩陣實現(xiàn)縮放、旋轉(zhuǎn)、平移變換)轉(zhuǎn)換成屏幕空間下的三維坐標(biāo)。該相機(jī)空間坐標(biāo)系透視投影的變換矩陣如式(2)所示:
根據(jù)圖6 的四棱臺在相機(jī)空間中的對稱性,可得:
對于XOZ平面的視場角hfov,以及裁剪平面的寬高比raspect,根據(jù)三角函數(shù),可得:
將式(3)~式(6)代入到式(2)中,可得:
本文將坐標(biāo)從屏幕空間轉(zhuǎn)換到相機(jī)空間的矩陣,即為上述投影矩陣的逆矩陣,該矩陣如式(8)所示:
至此,本文得到虛擬窗口在相機(jī)空間中的三維坐標(biāo)。窗口布局計算模型將坐標(biāo)從相機(jī)坐標(biāo)系轉(zhuǎn)換到世界坐標(biāo)系。相機(jī)在世界坐標(biāo)系下的坐標(biāo)為(xcam,ycam,zcam),相機(jī)坐標(biāo)系的基向量(分別對應(yīng)世界坐標(biāo)系下的基向量在世界坐標(biāo)系下的表示為如式(9)所示:
其中:M1為將基向量從世界坐標(biāo)轉(zhuǎn)換到相機(jī)坐標(biāo)的變換矩陣。將基向量從相機(jī)坐標(biāo)轉(zhuǎn)換到世界坐標(biāo)的變換矩陣M2,如式(10)所示:
考慮到平移,窗口布局計算模型需要將三維坐標(biāo)轉(zhuǎn)換為四維的齊次坐標(biāo)。因此,從相機(jī)坐標(biāo)系轉(zhuǎn)換到世界坐標(biāo)系需要先將基向量從相機(jī)坐標(biāo)轉(zhuǎn)換到世界坐標(biāo),再將相機(jī)坐標(biāo)原點(xcam,ycam,zcam)通過平移與世界坐標(biāo)的原點對齊。相機(jī)坐標(biāo)到世界坐標(biāo)的變換矩陣如式(11)所示:
因此,窗口布局計算模型將窗口坐標(biāo)從屏幕坐標(biāo)系轉(zhuǎn)換到世界坐標(biāo)系,如式(12)所示:
通過將式(1)、式(8)和式(11)代入到式(12)中,根據(jù)任何一塊虛擬窗口的屏幕空間坐標(biāo),計算其在AR 眼鏡中世界空間的坐標(biāo)。
針對多窗口布局問題,本文只需要在相機(jī)空間下計算窗口各自的空間坐標(biāo),最后統(tǒng)一根據(jù)式(11)將坐標(biāo)轉(zhuǎn)換到世界空間中。根據(jù)用戶配置窗口間水平方向和垂直方向的夾角θh、θv,在相機(jī)空間下窗口間旋轉(zhuǎn)夾角的俯視圖和側(cè)視圖分別如圖7 所示。
圖7 在相機(jī)空間下窗口間旋轉(zhuǎn)夾角示意圖Fig.7 Schematic diagram of rotation angle between windows in camera space
從圖7 可以看出,對于窗口i,在相機(jī)空間下先將窗口i-1 圍繞相機(jī)原點處的軸旋轉(zhuǎn)θh,旋轉(zhuǎn)矩陣如式(13)所示:
窗口i再圍繞相機(jī)原點的方向為軸旋轉(zhuǎn)θv,即可得到窗口i的相機(jī)空間坐標(biāo)。將每個窗口的相機(jī)空間坐標(biāo)代入到式(11)中,即可計算出每個窗口的世界坐標(biāo)。繞方向的旋轉(zhuǎn)矩陣如式(15)所示:
多窗口布局計算模型根據(jù)用戶自定義的窗口比例、窗口在屏幕中的偏移量、多窗口之間的水平和垂直夾角等數(shù)據(jù),自動計算并設(shè)置每個虛擬窗口的布局。此外,除參數(shù)化的窗口位置計算模型之外,考慮到用戶的個性化需求,本文系統(tǒng)還支持用戶任意移動、縮放虛擬窗口。用戶自定義調(diào)整虛擬窗口示意圖如圖8 所示,其中虛擬窗口用黑色虛線框標(biāo)示。
圖8 用戶自定義調(diào)整的虛擬窗口示意圖Fig.8 Schematic diagram of the virtual window with user-defined adjustment
與Facebook Infinite Office[8]相似,本文系統(tǒng)使用的HoloLens 2 眼鏡也支持基于隔空手勢的交互方式,但該交互方式相較于傳統(tǒng)電腦的鍵盤和鼠標(biāo)交互方式,交互效率和準(zhǔn)確性都較差。考慮到電腦本身的交互方式是基于鍵鼠,本文在隔空手勢交互的基礎(chǔ)上實現(xiàn)基于鍵盤鼠標(biāo)的交互方式。同時為了使交互更加自然,兩種交互方式需要通過自然切換方式達(dá)到多模態(tài)交互的效果。此外,考慮到在使用場景中存在用戶雙手都被當(dāng)前任務(wù)占用但仍需進(jìn)行簡單操作的情況,本文系統(tǒng)還支持基于視線檢測的語音輸入方式。
隔空手勢交互需要將手部射線映射成遠(yuǎn)程電腦的鼠標(biāo),其中射線位置信息映射成鼠標(biāo)位置,不同手勢則對應(yīng)不同的鼠標(biāo)點擊狀態(tài)。
在AR 空間中手部射線和畫面窗口都是三維的,因此隔空手勢交互方式下交互光標(biāo)在畫面上歸一化坐標(biāo)的計算,只需要在三維空間中通過射線碰撞檢測得到手部射線和畫面窗口的碰撞交點,然后在畫面所在平面內(nèi)根據(jù)交點坐標(biāo)、畫面長寬計算得到位置信息。
隔空手勢交互計算示意圖如圖9 所示。在三維空間中手部射線與畫面窗口交于點P,畫面窗口確定平面XOY。在該平面內(nèi),交點P的橫縱坐標(biāo)為(a,b),而畫面窗口的長寬為W和H,因此該交點的歸一化坐標(biāo)為該坐標(biāo)映射到遠(yuǎn)程電腦上即為鼠標(biāo)在電腦窗口內(nèi)的歸一化坐標(biāo),根據(jù)本文1.1 節(jié),將該坐標(biāo)發(fā)送給遠(yuǎn)程桌面,通過操作系統(tǒng)底層接口映射成鼠標(biāo)位置。
圖9 隔空手勢交互計算示意圖Fig.9 Schematic diagram of calculation of air gesture-based interaction
手勢與鼠標(biāo)點擊狀態(tài)的映射是根據(jù)常見手勢在AR 空間下的語義,合理映射為鼠標(biāo)的點擊狀態(tài),映射結(jié)果如表2 所示。
表2 手勢與鼠標(biāo)點擊狀態(tài)的映射關(guān)系Table 2 Mapping relationship between gestures and mouse click states
上述原理實現(xiàn)了手部射線與遠(yuǎn)程桌面鼠標(biāo)之間(包括位置、點擊狀態(tài))的映射,從而在AR 眼鏡空間內(nèi)使用隔空手勢交互遠(yuǎn)程操作電腦桌面。
本文解決鼠標(biāo)坐標(biāo)從二維空間到三維空間的轉(zhuǎn)換,以及鼠標(biāo)跨窗口交互的問題。
2.2.1 鼠標(biāo)坐標(biāo)轉(zhuǎn)換
Facebook Infinite Office 和本文系統(tǒng)實現(xiàn)了基于隔空手勢的交互。由于手部射線和窗口畫面均處于三維空間中,因此只需要利用射線的碰撞檢測進(jìn)行求交計算。但是鼠標(biāo)本身的坐標(biāo)是二維的,因此通過算法將二維坐標(biāo)映射到三維空間中進(jìn)行后續(xù)的求交計算,得到鼠標(biāo)在畫面上的歸一化坐標(biāo)。
無論是真實電腦畫面在AR 空間內(nèi)的映射結(jié)果,還是完全虛擬畫面,如果不考慮畫面呈現(xiàn)在AR 三維空間中的厚度,每個單獨的畫面都可以基于其面向使用者顯示畫面的表面,確定唯一的平面。三維畫面確定的平面示意圖如圖10 所示。
圖10 三維畫面確定的平面示意圖Fig.10 Plane schematic diagram of the three-dimensional image determination
三維畫面確定的平面是一個三維空間中的平面,因此將得到平面上光標(biāo)P在該平面內(nèi)的歸一化坐標(biāo)(a,b),計算P的三維坐標(biāo),如式(16)所示:
已知當(dāng)前畫面的分辨率Rx×Ry,當(dāng)AR 程序啟動時,本文獲取當(dāng)前鼠標(biāo)的二維坐標(biāo)(x0,y0),對應(yīng)當(dāng)前畫面確定平面的原點(即圖10 中的O點)的歸一化坐標(biāo)(0,0),記為(a0,b0)。之后的每一幀i(其中i=1,2,…,n),對于獲取到的鼠標(biāo)二維坐標(biāo)(xi,yi),其對應(yīng)的平面上坐標(biāo)(ai,bi)如式(17)所示:
在每幀計算后通過式(18)將ai和bi都?xì)w一化到[0,1]區(qū)間內(nèi):
(ai,bi)是鼠標(biāo)在窗口上的歸一化坐標(biāo),如果該窗口是真實電腦屏幕在AR 空間中的映射窗口,則將該歸一化坐標(biāo)發(fā)送給遠(yuǎn)程電腦,通過操作系統(tǒng)底層接口映射成鼠標(biāo)位置。將(ai,bi)代入到式(16)中,即可獲取每一幀鼠標(biāo)的二維坐標(biāo)(xi,yi)正確映射到三維空間中的三維坐標(biāo)Pposi,從而在AR 空間中顯示三維光標(biāo)作為提示。
2.2.2 鼠標(biāo)跨窗口交互
鼠標(biāo)跨窗口交互分為跨窗口連續(xù)移動和跨窗口的瞬間跳轉(zhuǎn)。
1)跨窗口連續(xù)移動
在三維空間內(nèi)的隔空手勢可以自然地在多窗口之間連續(xù)移動,對于鼠標(biāo)交互,也應(yīng)達(dá)到在多塊桌面顯示器窗口之間連續(xù)移動的效果,交互更自然,降低使用者的學(xué)習(xí)成本。
跨窗口連續(xù)移動的實現(xiàn)原理和傳統(tǒng)鼠標(biāo)跨多顯示器移動類似。鼠標(biāo)向左移出當(dāng)前窗口示意圖如圖11 所示。在移出瞬間,鼠標(biāo)在當(dāng)前窗口畫面所在平面的歸一化坐標(biāo)為(0,bi)。為保證鼠標(biāo)在窗口間連續(xù)移動時,其位置相對于整個窗口的比例固定,在移入左側(cè)窗口的瞬間,鼠標(biāo)在左側(cè)窗口所在平面的歸一化坐標(biāo)為(1,bi)。在該平面內(nèi)代入式(16)得到當(dāng)前鼠標(biāo)的三維坐標(biāo)。之后的每一幀通過式(16)~式(18)計算出鼠標(biāo)的三維坐標(biāo)。
圖11 鼠標(biāo)向左移出當(dāng)前窗口的示意圖Fig.11 Schematic diagram of moving the mouse to the left out of current window
鼠標(biāo)向右移出當(dāng)前窗口的示意圖如圖12 所示。在移出瞬間,鼠標(biāo)在當(dāng)前窗口畫面所在平面的歸一化坐標(biāo)為(1,bi),在移入右側(cè)窗口的瞬間,其在右側(cè)窗口所在平面的歸一化坐標(biāo)為(0,bi),在該平面內(nèi)代入式(16)得到當(dāng)前鼠標(biāo)的三維坐標(biāo)。
圖12 鼠標(biāo)向右移出當(dāng)前窗口的示意圖Fig.12 Schematic diagram of moving the mouse to the right out of current window
如果僅根據(jù)歸一化坐標(biāo)的橫坐標(biāo)臨界值和鼠標(biāo)運動方向判斷鼠標(biāo)是否需要跨窗口連續(xù)移動。因此,本文系統(tǒng)增加了對鼠標(biāo)移動速度的判斷。如果鼠標(biāo)移動速度小于閾值,那么用戶很可能只是在窗口邊緣進(jìn)行交互。只有當(dāng)鼠標(biāo)歸一化橫坐標(biāo)達(dá)到臨界值且移動速度大于閾值時,才會認(rèn)為用戶有跨窗口連續(xù)移動鼠標(biāo)的意圖。
2)跨窗口的瞬間跳轉(zhuǎn)
如果僅實現(xiàn)鼠標(biāo)跨窗口的連續(xù)移動,那么在窗口數(shù)量較多或用戶需要一次性跨多個窗口交互時效率較低,因此還需實現(xiàn)鼠標(biāo)跨窗口的瞬間跳轉(zhuǎn)。文獻(xiàn)[23]設(shè)計并實現(xiàn)的Multi-monitor Mouse,利用鼠標(biāo)特殊按鍵在多個物理窗口之間瞬間跳轉(zhuǎn),在鼠標(biāo)跳轉(zhuǎn)后將其保持在與之前頁面等比例的位置上,能夠有效提高效率。他們還設(shè)計了當(dāng)鼠標(biāo)跳轉(zhuǎn)到新頁面時,將鼠標(biāo)自動移動到上一次離開該頁面的歷史位置,由于操作系統(tǒng)限制,因此無法提供額外的信息提示。
本文受Multi-monitor Mouse 切換策略的啟發(fā),用戶將視線移動到目標(biāo)頁面后,通過鍵盤的組合按鍵CTRL+TAB 觸發(fā)鼠標(biāo)的瞬間跳轉(zhuǎn),在鼠標(biāo)跳轉(zhuǎn)后,將其保持在與之前頁面等比例的位置。瞬間跳轉(zhuǎn)后鼠標(biāo)位置顯示的示意圖如圖13 所示,鼠標(biāo)在瞬間跳轉(zhuǎn)至新窗口后,在跳轉(zhuǎn)窗口內(nèi)保持與原窗口相同的歸一化坐標(biāo)(a,b)。
圖13 鼠標(biāo)瞬間跳轉(zhuǎn)后位置顯示示意圖Fig.13 Schematic diagram of position display after mouse jumps instantaneously
瞬間切換改變了用戶交互的當(dāng)前上下文,并且用戶需在新窗口內(nèi)回憶歷史交互記錄。Multimonitor Mouse 受底層操作系統(tǒng)的限制,無法為用戶提供鼠標(biāo)歷史位置的提示,但是AR 空間中可以在當(dāng)前窗口上疊加一個鼠標(biāo)最近一次離開頁面時的歷史位置,并將其作為提示,以便于用戶在瞬間跳轉(zhuǎn)后迅速切換至當(dāng)前窗口的歷史上下文,提高切換效率。
對于歷史位置的計算,如果是通過跨窗口連續(xù)移動的方式離開頁面,則歷史位置為鼠標(biāo)離開頁面時在頁面邊緣臨界處的坐標(biāo),其歸一化坐標(biāo)為(0,bi)或(1,bi)。如果用戶通過跨窗口的瞬間跳轉(zhuǎn)方式切換頁面,則歷史位置為用戶按CTRL+TAB 鍵時鼠標(biāo)在上一個頁面中的歸一化坐標(biāo)(a,b)。
本文系統(tǒng)將歷史位置記錄完成后,鼠標(biāo)在瞬間跳轉(zhuǎn)到新頁面時,將會在新頁面上疊加顯示上一次離開該頁面時的歷史坐標(biāo),其原理如圖14 所示。
圖14 鼠標(biāo)跨窗口瞬間跳轉(zhuǎn)后歷史位置顯示原理Fig.14 Display principle of historical position after mouse jumps across the window instantaneously
鼠標(biāo)最初在窗口A 內(nèi)的歸一化坐標(biāo)為(a,b),瞬間跳轉(zhuǎn)至窗口B 時保持鼠標(biāo)在A 中的歸一化坐標(biāo)(a,b),此時記錄鼠標(biāo)在窗口A 中的歷史位置(a,b)。鼠標(biāo)在窗口B 內(nèi)移動至(c,d)處后,又瞬間跳轉(zhuǎn)至窗口A,并保持坐標(biāo)為(c,d),同時系統(tǒng)獲取到鼠標(biāo)在窗口A 內(nèi)的歷史位置(a,b),疊加顯示在窗口A 上,提示用戶在上一次交互結(jié)束時的位置信息。
在窗口A 中,為了增強(qiáng)提示作用,歷史位置的提示標(biāo)志會持續(xù)閃爍,在以下兩種條件下該閃爍提示才會消失:(1)用戶將鼠標(biāo)移至歷史位置附近,表示用戶接受該提示;(2)用戶在頁面內(nèi)的任意位置觸發(fā)鼠標(biāo)點擊事件,表示不再需要該歷史位置的提示。
鼠標(biāo)在跨窗口瞬間跳轉(zhuǎn)后,保持與上一個頁面相同歸一化坐標(biāo)的位置,使得鼠標(biāo)的瞬間跳轉(zhuǎn)十分自然,并且符合用戶的歷史經(jīng)驗,這一點在Multimonitor Mouse[23]中已經(jīng)得到證實。用戶通過歷史位置的提示顯示可以快速回憶之前交互的上下文,即使用戶不需要歷史信息提示,該提示信息也不會干擾用戶的正常交互,相較于Multi-monitor Mouse[23],本文系統(tǒng)提高了交互的效率。對于鼠標(biāo)跨窗口瞬間跳轉(zhuǎn)的實現(xiàn)效果見本文3.3 節(jié)。
本文在2.1 節(jié)和2.2 節(jié)中實現(xiàn)了在AR 空間內(nèi)使用隔空手勢和鼠標(biāo)這兩種交互方式,在此基礎(chǔ)上,還需要支持用戶在不同交互方式之間的自然切換,降低用戶的學(xué)習(xí)成本,提高交互的準(zhǔn)確性和效率。
本文考慮到在日常辦公和學(xué)習(xí)中,用戶大量使用鍵盤和鼠標(biāo)與電腦進(jìn)行交互,因此用戶對這類交互方式更熟悉。在AR 空間內(nèi)大多數(shù)用戶會選擇使用鍵盤和鼠標(biāo)進(jìn)行交互。一旦用戶伸手將手部射線朝向畫面窗口,就將交互方式切換為隔空手勢交互,不再響應(yīng)鼠標(biāo)的任何輸入。為了避免用戶抬手誤觸,又考慮到大多數(shù)用戶是右利手,因此本文在檢測用戶手部射線時只檢測右手的手部射線,將左手射線均視作誤觸。當(dāng)右手的手部射線與任一畫面發(fā)生碰撞并產(chǎn)生交點時,本文系統(tǒng)才將交互方式切換為隔空手勢交互,并在碰撞結(jié)束后自動切換為鼠標(biāo)交互。
本文實現(xiàn)了隔空手勢與鼠標(biāo)交互的切換,還需要考慮在兩者切換時交互光標(biāo)的顯示問題。本文采取形狀不同的光標(biāo)對兩者進(jìn)行區(qū)分。當(dāng)鼠標(biāo)交互切換至隔空手勢交互時,本文記錄鼠標(biāo)在先前畫面內(nèi)的歷史位置,隨后隱藏鼠標(biāo)的交互光標(biāo),將手部射線光標(biāo)設(shè)置在右手射線與發(fā)生射線碰撞畫面的交點處。在隔空手勢交互結(jié)束后,切換至鼠標(biāo)交互時,隱藏手部射線光標(biāo),本文將鼠標(biāo)位置設(shè)置為手部射線與畫面窗口最后一次發(fā)生碰撞的交點處,并在該位置顯示鼠標(biāo)交互光標(biāo)。
本文實現(xiàn)了隔空手勢與鼠標(biāo)交互間的自然切換,并最大程度地避免了用戶手勢的誤操作。同時,在兩種交互方式之間進(jìn)行切換時,本文設(shè)置了切換前后不同光標(biāo)的顯示位置,避免用戶在切換交互方式時丟失光標(biāo)。
隔空手勢結(jié)合鍵盤鼠標(biāo)的交互方式基本能滿足一般工作場景的需求。但是考慮到學(xué)習(xí)、工作中雙手被任務(wù)占用時還需要進(jìn)行其他操作的情況,因此本文系統(tǒng)實現(xiàn)了結(jié)合視線檢測的語音輸入交互方式。在該場景下用戶的雙手被任務(wù)占用,對于操作目標(biāo)的選定無法再依賴于需要手的交互方式,因此本文選擇通過獲取用戶視線的聚焦對象,為用戶完成語音控制前的目標(biāo)選定。系統(tǒng)通過MRTK 中的Gaze Provider 獲取用戶視線的方向,在該方向上進(jìn)行實時的射線碰撞檢測,檢測到支持語音交互的物體時,用戶可隨之進(jìn)行語音輸入。
與鍵盤鼠標(biāo)輸入以及隔空手勢相比,由于語音輸入的效率和準(zhǔn)確度較低,因此語音輸入主要支持復(fù)雜程度較低的操作。語音輸入支持的指令如表3所示。
表3 語音輸入支持的指令描述Table 3 Description of instructions supported by voice input
表3 中的指令在對應(yīng)場景下可以讓用戶無需中斷手頭當(dāng)前任務(wù),就可以進(jìn)行調(diào)整窗口位置、大小、距離等操作,在多窗口場景下能夠有效提高用戶的工作效率,減少交互上下文切換產(chǎn)生的不必要開銷。
系統(tǒng)基于Unity 游戲引擎開發(fā),版本為2019.411f1(64 bi)t,在Microsoft HoloLens 2 增強(qiáng)現(xiàn)實眼鏡上運行。真實電腦采用Intel i7-7700 HQ 處理器,2.80 GHz,16 GB內(nèi)存,顯卡為NVIDIA GTX1060 3 GB,Windows 10 64 bit 操作系統(tǒng),運行一個使用C#開發(fā)的Socket 服務(wù)器。眼鏡和電腦連接在同一個局域網(wǎng)中。另有6 臺相同配置的電腦負(fù)責(zé)推流給AR眼鏡,從而呈現(xiàn)虛擬畫面。
在使用鼠標(biāo)交互的狀態(tài)下,本文首先在窗口A將鼠標(biāo)移動至歸一化坐標(biāo)為(1.0,0.5)的臨界處,鼠標(biāo)向右快速水平移動至窗口B,觀察此時鼠標(biāo)光標(biāo)的位置??绱翱谶B續(xù)移動時的鼠標(biāo)位置如圖15所示。
圖15 跨窗口連續(xù)移動時的鼠標(biāo)位置Fig.15 Mouse position when moving across windows continuously
從圖15(a)可以看出,鼠標(biāo)離開上一個窗口時臨界位置的歸一化坐標(biāo)(1.0,0.5)。從圖15(b)可以看出,鼠標(biāo)連續(xù)移動后,其進(jìn)入新窗口時的臨界值歸一化坐標(biāo)為(0.0,0.5)。當(dāng)鼠標(biāo)進(jìn)入新窗口和離開上一個窗口臨界位置的橫坐標(biāo)均為臨界值時,縱坐標(biāo)相同。該實驗說明當(dāng)鼠標(biāo)跨窗口連續(xù)移動時,在不同窗口間的歸一化坐標(biāo)計算和顯示是連續(xù)的,驗證了跨窗口連續(xù)移動時鼠標(biāo)位置計算和顯示的正確性。
在使用鼠標(biāo)交互的狀態(tài)下,本文首先在窗口A將鼠標(biāo)移動至歸一化坐標(biāo)為(0.15,0.84)處,通過組合鍵將鼠標(biāo)瞬間跳轉(zhuǎn)至窗口B,觀察此時鼠標(biāo)光標(biāo)的位置,然后在窗口B 內(nèi)將鼠標(biāo)光標(biāo)移動至歸一化坐標(biāo)為(0.17,0.18)處,通過組合鍵將鼠標(biāo)瞬間跳轉(zhuǎn)回窗口A,觀察此時鼠標(biāo)的光標(biāo)位置,以及顯示的歷史位置??绱翱谒查g跳轉(zhuǎn)時的鼠標(biāo)位置及歷史位置如圖16 所示。
圖16 跨窗口瞬間跳轉(zhuǎn)時鼠標(biāo)位置及歷史位置Fig.16 Mouse position and historical position when jumping across windows instantaneously
從圖16(a)和圖16(b)可以看出,鼠標(biāo)瞬間跳轉(zhuǎn)后,其在新窗口內(nèi)保持與之前窗口相同比例的位置。從圖16(c)和圖16(d)可以看出,鼠標(biāo)再次瞬間跳轉(zhuǎn)回先前頁面時,頁面上顯示正確的歷史位置提示。該實驗表明鼠標(biāo)瞬間跳轉(zhuǎn)時,其跳轉(zhuǎn)位置和歷史位置的計算和顯示均正確。
本文在多窗口場景下,測試隔空手勢、鼠標(biāo)連續(xù)移動和鼠標(biāo)瞬間跳轉(zhuǎn)的交互效率。實驗流程是在AR 眼鏡中使用2×3 的窗口布局,每個窗口占相機(jī)畫面的比例為0.3,寬高比為16/9。窗口間橫向和縱向圓心角的夾角均為27°,實驗窗口布局示意圖如圖17所示。每個窗口內(nèi)的畫面顯示如圖18 所示,有編號為1~4 的四個按鈕,排列順序隨機(jī)。實驗參與者需要根據(jù)指令依次點擊窗口中的按鈕。“指令”為一個包含3 個元素的元組,3 個元素分別表示按下的按鈕所在窗口的行號、列號和按鈕的編號。例如,1、3、4表示參與者需要點擊第1 行、第3 列窗口中的4 號按鈕。每位參與者需要進(jìn)行2 次實驗,每次實驗需要完成的指令個數(shù)分別為10 和15 個,每次實驗中,參與者用3 種交互方式各完成一遍指令并計算耗時。實驗共有3 名參與者。
圖17 實驗窗口布局示意圖Fig.17 Schematic diagram of experimental window layout
圖18 窗口內(nèi)按鈕分布示意圖Fig.18 Schematic diagram of button layout inside the window
不同交互方式的平均耗時對比如圖19 所示,隔空手勢交互和鼠標(biāo)連續(xù)移動交互的效率均低于鼠標(biāo)瞬間跳轉(zhuǎn)方式。其原因為瞬間跳轉(zhuǎn)在窗口數(shù)量較多時節(jié)省了光標(biāo)在不同位置之間移動的時間。在交互指令數(shù)量較少時,隔空手勢交互效率高于鼠標(biāo)連續(xù)移動,但兩者之間的差距在指令數(shù)量增多時有所減小,這是因為隔空手勢需要用戶始終舉著一只手,在指令較多、交互時間較長時容易讓人產(chǎn)生疲勞感,而鼠標(biāo)交互方式則沒有此問題。
圖19 不同交互方式的平均耗時對比Fig.19 Average time consumption comparison among different interaction methods
實驗結(jié)果表明,與隔空手勢交互方式相比,本文系統(tǒng)實現(xiàn)的鼠標(biāo)交互方式在沒有降低交互效率的同時減輕了用戶使用時的疲勞感,在長時間交互中優(yōu)勢將逐漸凸顯。而本文提出的鼠標(biāo)跨窗口瞬間跳轉(zhuǎn)的交互方式在避免疲勞的基礎(chǔ)上還顯著提高了交互效率,驗證了本文系統(tǒng)實現(xiàn)多模態(tài)交互方式的正確性、有效性和必要性。
本文設(shè)計3 組任務(wù)對本文系統(tǒng)和對照系統(tǒng)(文獻(xiàn)[19]提出的系統(tǒng))進(jìn)行工作效率對比。對照系統(tǒng)與本文系統(tǒng)的實驗環(huán)境相同,運行Unity 版本、AR 眼鏡、計算機(jī)CPU、內(nèi)存、顯卡、操作系統(tǒng)均與本文系統(tǒng)相同。對照系統(tǒng)使用與計算機(jī)相連的有線鍵鼠,本文系統(tǒng)使用與AR 眼鏡通過藍(lán)牙相連的無線鍵鼠。
本文系統(tǒng)和對照系統(tǒng)在初始狀態(tài)下均使用2 個虛擬的桌面畫面窗口和1 個真實電腦窗口,其中真實窗口在中間,虛擬窗口在兩側(cè)并正對使用者。本文實驗的窗口布局如圖20 所示。為保證實驗結(jié)果的準(zhǔn)確性,本文實驗分別在對照系統(tǒng)和本文系統(tǒng)中搭建相似窗口布局的實驗環(huán)境。
圖20 本文實驗的窗口布局示意圖Fig.20 Schematic diagram of window layout of the experiment in this paper
本文系統(tǒng)的窗口布局可由使用者自行修改,而對照系統(tǒng)窗口布局是固定的。其中對照系統(tǒng)的3 個窗口均為同一臺計算機(jī)的3 個分屏窗口,本文系統(tǒng)的1 個真實電腦窗口運行在一臺計算機(jī)上,2 個虛擬桌面窗口呈現(xiàn)的是2 臺不同計算機(jī)上的遠(yuǎn)程桌面畫面。實驗共分為3 個任務(wù),3 名參與者每人均需在2 個系統(tǒng)中分別完成3 個任務(wù)。
任務(wù)1 是數(shù)字對比,3 個窗口各顯示一個Excel文件,其中左右兩個虛擬窗口各有50 個數(shù),按照順序一一對應(yīng),其中有30%的數(shù)字不同,其余相同。實驗者需要將50 個數(shù)錄入到中間窗口的空表中,相同數(shù)字直接錄入,不同數(shù)字錄入較小的那一個。
任務(wù)2 是根據(jù)指令點擊指定按鈕。在3 個窗口內(nèi)分別顯示圖18 中的4 個按鈕,編號為1~4,順序為亂序的。實驗者需要根據(jù)指令點擊窗口的對應(yīng)按鈕,指令長度為20。
任務(wù)3 是文件歸檔。左側(cè)窗口的桌面有4 個名為A、B、C、D 的文件夾,以及20 個文件,文件名分別為1~20 的數(shù)字,文件格式為pdf、txt 或doc。右側(cè)窗口有一個需求文檔,包含20 個文件的歸檔要求,歸檔要求形如“將所有編號能被3 整除的pdf 文件放入文件夾B”。實驗者需要根據(jù)歸檔要求,將所有文件拖入指定文件夾進(jìn)行歸檔。
對照系統(tǒng)和本文系統(tǒng)對各任務(wù)的平均耗時對比如圖21 所示。對于任務(wù)1 和任務(wù)2,相比對照系統(tǒng),本文系統(tǒng)的平均耗時分別降低了10%和33%。對于任務(wù)3,本文系統(tǒng)與對照系統(tǒng)的平均耗時相近。實驗結(jié)果表明,對于任務(wù)2,實驗者使用鼠標(biāo)和手勢同時進(jìn)行交互的方式,大幅提升跨窗口交互的效率。而對于任務(wù)1 和任務(wù)3,實驗者均根據(jù)需要調(diào)整了虛擬窗口的位置,方便對比和查看。
圖21 本文系統(tǒng)和對照系統(tǒng)的平均耗時對比Fig.21 Average time consumption comparison between the proposed system and contrast system
實驗結(jié)果表明,與對照系統(tǒng)相比,本文系統(tǒng)通過多模態(tài)的交互方式以及多窗口布局策略,在常見的辦公任務(wù)中顯著提升了交互效率,驗證了本文系統(tǒng)設(shè)計、功能和算法的先進(jìn)性。此外,相比對照系統(tǒng),本文系統(tǒng)支持同時顯示并操作多臺計算機(jī),而對照系統(tǒng)僅支持同時顯示一臺計算機(jī)的多個桌面窗口。
本文基于AR 眼鏡設(shè)計遠(yuǎn)程桌面增強(qiáng)顯示系統(tǒng),以支持多模態(tài)交互。通過構(gòu)建窗口布局計算模型,根據(jù)用戶自定義參數(shù)自動調(diào)整多窗口的布局,并增加基于鍵盤鼠標(biāo)的跨窗口交互方式以及結(jié)合視線檢測的語音輸入方式,在豐富交互方式的同時提高交互效率和準(zhǔn)確性,實現(xiàn)交互空間的統(tǒng)一。實驗結(jié)果表明,與傳統(tǒng)隔空手勢交互、鼠標(biāo)交互等方式相比,本文系統(tǒng)具有較高的交互效率。下一步將優(yōu)化遠(yuǎn)程畫面?zhèn)鬏數(shù)木W(wǎng)絡(luò)模塊和編解碼模塊,并設(shè)計合理的調(diào)度策略,以解決當(dāng)顯示大量遠(yuǎn)程桌面虛擬窗口時存在AR 眼鏡CPU 性能瓶頸的問題。