徐 迅,劉玉生
(四川大學電氣信息學院,四川成都 610065)
虛擬現實(virtual reality,VR)是一種模擬人在自然環境中視、聽、動等行為的先進人機交互技術,能夠為使用者模擬出與現實中相同的三維圖像世界。目前,虛擬現實技術的研究主要集中在虛擬場景建模開發和交互控制方法上,常用虛擬場景建模工具主要包括Vega,VRML等;而常用交互控制方法包括傳統鼠標鍵盤或者數據手套與頭部跟蹤器,其中前者價格低廉但使用不便,后者價格過高,普通應用場合難以承受[1,2]。本文提出了一種基于MEMS傳感器、LM3S1138微控制器和Vega虛擬仿真平臺的虛擬現實參觀系統,用戶通過操縱手柄實現在虛擬場景中的自由參觀。該系統結構簡單、成本低廉、使用方便,只需更改虛擬場景內容即可將該系統移植到其他應用領域。
本文提出的虛擬現實參觀系統如圖1所示,由手持模塊和主機端兩部分組成。
手柄端微控制器根據地磁場和重力加速度在傳感器各測量軸方向上的分量計算出當前手柄相對于重力加速度軸和地磁場軸的俯仰角和方位角,將這2個角度作為手柄的狀態變量并根據手柄初始狀態計算出動作指令。然后動作指令通過串口發送到主機端,通信驅動程序根據接收的動作指令改變虛擬場景視角。

圖1 虛擬現實參觀系統結構圖Fig 1 Structure diagram of virtual reality touring system
操縱手柄是樓宇參觀系統的核心組成部分,用戶通過對手柄水平垂直旋轉和前后按鍵的操作,實現在主機端虛擬場景視角水平360°、垂直180°的全方位變化和虛擬場景中視角位置的前后平移,從而實現在虛擬場景中參觀的功能,手柄外觀示意如圖2所示。

圖2 手柄外觀示意圖Fig 2 The schematic diagram of joystick appearance
虛擬樓宇參觀手柄由MMC212磁場傳感器、MXC6202加速度傳感器和LM3S1138微控制器(MCU)組成。兩種傳感器均有X,Y兩測量軸,在每個軸分量上可分別測量±2 Gs的磁感應強度和 ±2gn的加速度,并分別以512counts/Gs和512counts/gn的精度通過I2C總線輸出。

圖3 傳感器與手柄位置關系Fig 3 Position relation between sensors and joystick
傳感器與手柄位置關系如圖3所示,磁場傳感器與手柄上平面平行,加速度傳感器與手柄側面平行,初始狀態下,手柄與地面平行,磁場傳感器X,Y測量軸組成平面垂直于重力加速度,加速度傳感器Y測量軸與重力加速度平行。
在靠近地表處,重力加速度垂直于地面,地磁場近似平行于地面,當以重力加速度相反方向為Z軸,地磁場方向為X軸,可得到如圖4所示的三維空間,其中XOY平面與地面平行。圖4中所示三維空間采用慣性坐標系,PD表示手柄在空間中正方向,方位角α為PD在XOY平面投影與X軸夾角(0°~360°),俯仰角β為PD與XOY平面夾角(-90°~90°)。PD在空間中的方向可由圖4中的方位角α和俯仰角β唯一決定,因此,選取α,β作為手柄的狀態變量。磁場傳感器的X,Y兩測量軸對應圖中向量MX,MY;加速度傳感器X,Y兩測量軸對應圖中向量AY,AZ。由傳感器特性可知,AX,MY和PD平行,AX,AY與Z軸在同一平面且β=β',β'可由AX,AY求出;同理MYxoy,MX在XOY平面內且α=α',α'可由MX,MYxoy求出,其中

因此,手柄在空間中狀態完全可以由磁場傳感器和加速度傳感器的測量值計算得到[3]。

圖4 手柄在三維空間中狀態Fig 4 State of joystick in 3D space
MEMS傳感器輸出數字量,將待測量物理量±2gn和±2 Gs分別線性映射至0x000~0x7FF的數字輸出,當待測物理量分別為0gn和0 Gs,輸出量為0x400,因此,測量輸出數字量OD與實際測量物理量G的關系可由式(1)表示,當G>0時,待測量物理量在測量軸方向分量為正,G<0時,待測量物理量在測量軸方向分量為負

通過分析待測向量在測量坐標系中所在象限,計算得到手柄狀態變量[4]。圖5所示為手柄正方向在YOZ坐標系中分別位于第一和第四象限,其中加速度傳感器AX,AY測量軸輸出實際測量加速度值Gx和Gy,根據式(2)計算得到俯仰角β


圖5 手柄俯仰角計算示意圖Fig 5 Schematic diagram of pitch angle calculation of joystick


當Bx>0且BYxoy<0時α∈[π/2,π],可由式(4)得到

當Bx<0且BYxoy<0時α∈[π,3π/2],可由式(5)得到

當Bx>0且BYxoy<0時α∈[3π/2,2π],可由式(6)得到

手柄狀態變量由x=[αβ]T表示樓宇參觀系統對手柄狀態的精度要求不高,α和β均精到個位,且α∈[0°,360°],β∈[-90°,90°],因此,選擇α以9 位編碼;β以8 位編碼。
為減小傳輸數據量,手柄模塊微處理器根據手柄狀態和按鍵判斷生成動作指令,傳輸到主機端。
虛擬場景中視角變換動作包括視角上仰、視角下俯、視角左轉、視角右轉、視角前進和視角后退,其中是否發生前4種動作由判斷手柄狀態決定,后2種動作由從手柄按鍵獲取。圖6所示為以一個字節編碼動作指令的方法。

圖6 動作指令編碼規則Fig 6 Encoding rule of action command
圖6中每一標志位為1表示執行該動作,否則,不執行該動作。
手柄模塊初始化后,系統自動記錄手柄初始狀態下的狀態變量x0=[α0β0]T,然后進入循環狀態,每次循環首先讀取按鍵狀態,然后獲取手柄狀態變量xi=[αiβi]T,得到狀態變化量Δxi=[ΔαiΔβi]T。
其中,Δαi=αi-α0,Δβi=βi-β0.
動作指令碼按照表1所示規則生成

表1 動作指令生成規則Tab 1 Generation rules of action command
多個動作可以同步觸發,例如:視角同時左轉、上仰和前進,此時動作指令碼為00010101b,但左轉與右轉、上仰與下俯、前進與后退不能分別同時發生。
主機端由通信驅動程序和虛擬場景應用程序兩部分組成。通信驅動程序由C++編寫,根據接收手柄模塊發送的動作指令碼,向虛擬場景發出視角動作。虛擬場景應用程序通常需要具備的功能與系統工作流程:
1)可編輯功能,即用戶可以根據需求設計自己需要的三維虛擬場景模型
2)接口功能,即虛擬場景中視角變換操作與可以由操作系統或其它應用程序調用
本文選擇Vega的Lynx圖形用戶界面作為虛擬場景應用程序,選擇Walk漫游方式,通過模擬按下鍵盤鼠標協同控制方式定義中對應鍵來實現視角變換功能;通信驅動程序根據接收動作指令,調用WinIO.dll動態鏈接庫函通過讀寫8042鍵盤鼠標控制器的0x60和0x64寄存器,模擬按下Vega程序中設定的對應鍵盤按鍵操作。例如:當動作指令為00010101b(視角同時左轉、上仰和前進),此時通信驅動程序模擬同時按下Vega程序中設定的視角左轉、上仰和前進按鍵[5]。
3)系統工作流程
手柄模塊程序與主機端程序異步執行,手柄模塊循環向主機端發送動作指令,每次發送后開計時器,等待主機回應;主機端以中斷方式接收,收到指令后模擬鍵盤操作同時向手柄模塊發送成功接收信息(ACK),若手柄模塊等待回應超時則重新發送動作指令,手柄模塊程序流程如圖7所示,圖8(a)所示為手柄模塊定時器超時中斷子程序流程圖,圖8(b)所示為手柄模塊串口接收中斷子程序流程圖,圖8(c)所示為主機端串口接收中斷子程序流程圖,圖8(d)所示為主機端通信驅動程序流程圖。

圖7 手柄模塊程序流程Fig 7 Program flow chart of joystick module
為測試系統能否準確感應狀態變化并發出正確動作指令,設計如下試驗,假設圖4中|PD|=1,首先單獨在水平和垂直方向轉動手柄,直到手柄發出視角變化指令,然后在空間中任意方向轉動手柄,記錄指令發出和變化邊緣狀態變量序列{xi|i=1,2,…N},其中,xi=[αiβi]T,由此得到球坐標序列{Pi|Pi=[|PD|]T},該坐標序列表示的空間曲線在Y-Z平面內投影如圖9所示。
圖9中理論指令邊界和實測指令邊界分別將Y-Z平面分割成9個子區域,當PD端點在Y-Z平面內投影分別在子區域I至IX時,對應發出指令如表2所示。

圖8 系統程序流程圖Fig 8 Flow chart of system program

圖9 動作指令Y-Z平面內投影邊界Fig 9 Action command edge projected on plane Y-Z
此外,從圖9可以看出:系統在實際使用中動作指令邊界與理論邊界在手柄狀態變化量Δα,Δβ在超出判斷閾值不大時基本吻合,但偏轉角度過大時兩組邊界存在一定偏差,該偏差主要是由于在使用中,人手轉動導致手柄繞PD軸旋轉一定角度,系統存在未測量的橫滾角。

表2 區域指令對照表Tab 2 Area and command comparison
該系統根據加速度和磁場傳感器測量結果,計算得出手柄狀態變量,動作指令通過串口傳送到主機端,在Vega虛擬場景中完成相應虛擬場景動作,實測結果表明:在使用當中手柄能夠根據用戶操作發出正確的動作指令,且在偏轉角度不大時實測動作指令邊緣與理論邊緣相差不大,能夠得到滿意的性能。
[1]吳 迪,黃 文.騫虛擬現實技術的發展過程及研究現狀[J].海洋測繪,2002,22(6):15 -17.
[2]花 蕾.具有較高真實感的網上虛擬校園構建技術研究[D].西安:西安理工大學,2010.
[3]戎海龍,戴先中,劉信羽.廚師手握鍋具運動信息獲取方法[J].儀器儀表學報,2009,30(11):2291 -2297.
[4]蔣海濤,郭戰營.基于 MEMS加速度傳感器的飛行器傾角測量系統設計[J].計算機測量與控制,2010,18(1):107 -109.
[5]Alexei S.Nanyang Technological University virtual campus[J].IEEE Computer Graphics and Applications,2004,24(6):6 -8.