李晉芳, 蔡嘉鴻, 譚 靜, 蔡小娜, 李二芳, 李志成
(1.廣東工業(yè)大學 機電工程學院,廣州 510006; 2.河南理工大學 醫(yī)院,河南 焦作 454150)
隨著康復醫(yī)療的不斷發(fā)展,虛擬現(xiàn)實(Virtual Reality,VR)技術應用于康復醫(yī)療行業(yè)已經(jīng)越來越常見?,F(xiàn)階段康復訓練的方式結合VR技術,可以設計各種的康復訓練系統(tǒng)[1-2]。在康復訓練系統(tǒng)中,患者的運動數(shù)據(jù)可以被傳感器所捕獲,并傳輸?shù)接嬎銠C中,患者可以與計算機中的虛擬場景進行交互操作,提高康復訓練水平[2]。隨著康復醫(yī)療的不斷發(fā)展,患者對康復質量的要求也不斷提高。同時,患者對康復訓練的需求也不斷增大[3]。但如果康復訓練系統(tǒng)中的虛擬場景是固定的,并且是有限的,患者在不同階段的康復需求很難被滿足,其康復效率也會大打折扣;同時,患者在同一個虛擬場景中重復進行康復訓練,會降低積極性,影響治療效果[4]。因此,對康復系統(tǒng)中動態(tài)的建立虛擬場景很有必要[5]。
康復訓練是指以患者的意愿為出發(fā)點,讓患者有目的性地參與康復訓練。相比于傳統(tǒng)的被動康復治療,讓治療方式更加新穎和靈活[6-7]。通過各種不同的傳感器,人體的關節(jié)運動信息可以被捕獲并記錄下來。Yeh等[8]設計了一種交互式VR游戲康復方案以及一種基于傳感器的檢測系統(tǒng)對平衡訓練中的平衡指標進行分析;Borrego[9]等設計實驗,讓參與者在虛擬康復訓練系統(tǒng)中的不同高度區(qū)域內通過導航完成一項搜索任務,發(fā)現(xiàn)較高的區(qū)域中系統(tǒng)的性能更好;Yeh等[10]開發(fā)了一種觸覺增強的虛擬康復系統(tǒng),來模擬觸覺按壓任務,協(xié)助腦部受傷患者上肢精細運動等功能鍛煉;Stefano等[11]為中風患者的意識康復研發(fā)了一個更注重患者生理、心理狀況的虛擬康復系統(tǒng);柏敏等[12]通過調查傳統(tǒng)康復訓練系統(tǒng)以及虛擬康復訓練系統(tǒng)對腦卒中患者的康復效果,發(fā)現(xiàn)虛擬康復系統(tǒng)能更有效的提高訓練效果,縮短康復周期;郭曉輝等[13]研究了用于下肢康復的虛擬康復訓練系統(tǒng),能輔助患者完成主、被動情形下的康復訓練;肖陽等[14]利用VR技術設計了一套手功能的康復評估訓練系統(tǒng)。Belinda等[15]開發(fā)的適用于脊柱損傷患者的康復游戲,并實現(xiàn)實時跟蹤。但是,目前的康復系統(tǒng)在虛擬場景的設計上比較單一,缺乏個性化治療的方案,不能滿足不同情況患者的康復需求。鑒于此,本文通過使用Kinect傳感器采集人體骨骼數(shù)據(jù),加載可擴展標記語言(Extensible Markup Language, XML)中的場景元素,建立虛擬場景,對虛擬康復訓練場景進行動態(tài)配置,建立了個性化的康復訓練虛擬場景。
本文主要針對現(xiàn)有康復訓練系統(tǒng)中,一般是建立多個不同的虛擬場景,但場景有限且不能變化,設計了用戶可以根據(jù)需求選擇其中的場景元素進行場景個性化構建,如圖1所示。其整體設計應滿足如下需求:
(1) 基于康復訓練需要進行交互操作的需求,在虛擬康復訓練系統(tǒng)中應實時采集患者的肢體運動數(shù)據(jù),并將數(shù)據(jù)輸入到虛擬場景。
(2) 為增強場景的靈活性,減少固定場景的工作量以及提高場景元素的利用率,對場景中的元素進行個性化標記。
(3) 建立動態(tài)場景,可以加強虛擬場景的新穎性,提高患者積極性。
(4) 有較強的沉浸感;為使患者恢復患病位置的功能,并能應用于實際生活中,建立的虛擬場景應具有較好的現(xiàn)實性。
本文通過Kinect傳感器采集患者肢體數(shù)據(jù),并動態(tài)構建虛擬場景,對于同一種場景元素,可以重復加載,降低建立虛擬場景的工作量,提高了場景元素的利用率,也提高了靈活性,如圖1(b)所示。
(a) 靜態(tài)虛擬場景
(b) 動態(tài)虛擬場景
圖1 虛擬場景
在主動式康復訓練過程中,人體關節(jié)信號作為驅動的信號源,并輸入到計算機中,作為與虛擬場景交互的基礎。本文將使用 Kinect傳感器,該傳感器是基于深度圖像采集人體的骨骼數(shù)據(jù),可以滿足康復訓練過程中對患者肢體運動信號采集的要求。Kinect獲取到的人體關節(jié)數(shù)據(jù),需要傳輸?shù)綀鼍爸械奶摂M對象,虛擬對象會做出與患者同步的姿勢動作?;颊呖梢酝ㄟ^虛擬對象與虛擬場景進行交互,其中使用Kinect傳感器采集患者信息,然后再與虛擬場景中的人物建立聯(lián)系,從而場景進行交互。
當人體的關節(jié)數(shù)據(jù)獲取后,該數(shù)據(jù)用于驅動虛擬對象的運動。虛擬對象的運動中,由于各人體關節(jié)點的位置是相對不確定的,因此,需要把獲取到的人體關節(jié)角度數(shù)據(jù)轉換成虛擬對象的關節(jié)角度信息,實現(xiàn)虛擬對象關節(jié)點的旋轉運動,同步虛擬對象。
通過捕獲人體骨骼點,可以計算出由3個點決定的任意兩個向量之間的夾角。如圖2所示,假設圖中包含了人體的肩關節(jié)點、肘關節(jié)點和手關節(jié)點,分別記為S(Sx,Sy,Sz),E(Ex,Ey,Ez)和H(Hx,Hy,Hz),并把3個關節(jié)點在空間坐標系中表示。對于肘關節(jié)角度的計算,可以直接使用空間向量ES和EH的夾角θ。
圖2 關節(jié)角度示意圖
通過計算可以得出肘關節(jié)的角度值θ,并把該值傳入虛擬對象中,實現(xiàn)關節(jié)的旋轉運動。實現(xiàn)虛擬對象旋轉運動的方式一般有3種:矩陣旋轉、歐拉角旋轉或4元數(shù)旋轉。通過對比,由于矩陣旋轉的方法計算信息量大無法滿足虛擬康復訓練系統(tǒng)的要求;歐拉旋轉的方法容易產(chǎn)生萬向節(jié)鎖的問題;因此本文選擇4元數(shù)的旋轉方式實現(xiàn)虛擬對象的同步運動。描述一個4元數(shù)需要一個實數(shù)w和3個虛數(shù)i、j、k:
Q=ix+jy+kz+w=(i,j,k,w)
(1)
4元數(shù)具有以下的基本性質:
ij=k,jk=i,ki=j,ji=-k,kj=-i,ik=-j,
i2=-1,j2=-1,k2=-1
(2)
其中3個虛部i、j、k為在3個直角坐標系的3個矢量。在3維空間中處理物體的旋轉問題,需要使用4元數(shù)的代數(shù)乘法。例如,當物體繞l旋轉軸旋轉θ角度,可表示為旋轉矩陣rot(l,θ),用4元數(shù)表示:
rot(l,θ)=cos(θ/2)+l·sin(θ/2)
(3)
若先繞k軸,在繞j軸分別旋轉 90°,用四元數(shù)表示為
(cos45°+jsin45°)(cos45°+ksin45°)=
1/2+j/2+k/2+i/2=
(4)
式(4)的合成運動為繞著3個基本矢量旋轉120°,相比矩陣旋轉和歐拉角旋轉,四元數(shù)旋轉更簡單,也不會出現(xiàn)萬向節(jié)鎖的問題。
本文選取 Unity3D 自帶的虛擬對象作為人物模型,該模型的層次結構包含人體骨骼點,通過對虛擬對象進行骨骼綁定,將Kinect傳感器的數(shù)據(jù)(人體的關節(jié)旋轉信息)就可以實時傳輸?shù)教摂M對象中,人體也可以實時驅動虛擬對象的運動,下面進行對虛擬對象的上肢運動模擬實驗如圖3所示。
(a) 人體平舉動作
(c) 人體上肢前舉動作
圖3(a)、(c)為人體在現(xiàn)實環(huán)境中做出的上肢動作,圖3(b)、(d)為虛擬對象進行上肢運動的模擬。由模擬實驗得知,通過采集人體數(shù)據(jù)虛擬對象可以同步與人體的動作,滿足實時性需求。
患者的情況有多種,根據(jù)患者的特征可以進行區(qū)分,例如根據(jù)年齡、性別、職業(yè)、愛好等,將這些特征記為患者的區(qū)分特征,分別記作為F1,F(xiàn)2,…,F(xiàn)n;對指定的特征,例如對于年齡,可以將其分成3類,對于性別,可以分成2類。因此某一特定特征的分類可以用S1,S2,…,Sn來表示。
患者在配置好的個性化虛擬場景進行康復訓練,虛擬場景中主要包括兩種元素。一種是患者與場景交互的物體,另一種是環(huán)境。當患者訓練結束后,患者可以根據(jù)自己的訓練情況需要和配置好的場景的滿意程度,選擇是否需要存儲本次配置完成的場景。如果患者不選擇存儲場景,下次訓練時可以選擇繼續(xù)配置場景。當患者選擇保存配置好的場景,則該場景就在系統(tǒng)中自動生成XML文件,該文件記錄了配置好的場景的相關信息,是屬于患者的個性化場景。當下次訓練開始時,患者不需要再次配置場景,并直接選擇自己的個性化XML文本,在生成的場景中進行康復訓練。個性化場景配置的流程圖如圖4所示。
圖4 配置流程圖
由于康復訓練場景包含較多場景元素信息,為了方便編輯和修改,要求記錄康復訓練場景的文件滿足可讀性強的特點,一種可行的技術方案是使用XML文件對康復訓練場景的相關信息進行存儲。
XML[16]是“可擴展標記語言”,在常用的設計中,XML語言廣泛用于存儲大量的數(shù)據(jù),其數(shù)據(jù)內容可以用于傳輸。XML語言可用于不同的數(shù)據(jù)類型,最常用的功能是記錄數(shù)據(jù)。XML文本通過樹形結構,把所記錄的數(shù)據(jù)之間的層次關系清楚呈現(xiàn),方便用戶查看。本文使用XML文檔記錄虛擬場景信息,具有數(shù)據(jù)傳輸和文本管理的優(yōu)點。
在定義XML文本時,需要對XML文本的存儲格式作規(guī)定。程序運行時,當讀取到指定的標簽,就獲取指定的場景元素的相關屬性和信息,并把讀取到的信息放到內存中創(chuàng)建好的結構體中,實現(xiàn)XML文本中的信息的輸出。
在虛擬場景中,包含的場景元素較多,記錄了所有場景元素的信息。因此,必須標記相應的場景信息,規(guī)范文本的標簽,包括場景元素的名稱、放置路徑、在虛擬場景中的空間位置、材質等,其具體解析見表1。
表1 XML文本標記解析
在康復系統(tǒng)中,通過XML文檔存儲虛擬場景模板和配置好的個性化虛擬場景。用XML文檔記錄信息有兩種方法,一種是通過手動輸入記錄,另一種是通過系統(tǒng)自動生成。從系統(tǒng)的角度出發(fā),自動生成虛擬場景對應的XML文本信息,更能滿足需求,其生成XML文本的流程圖如圖5所示。
圖5 生成XML文本流程圖
由于康復患者以老年人居多,因此本文以老年人為對象,結合沉浸感、現(xiàn)實性等設計原則,建立以家居環(huán)境為主的虛擬場景,如圖6(a)所示。在虛擬場景中需要建立好相關場景元素,包括模型、材質等。把所有建立好的場景元素都放在一個父對象scene下,其場景元素關系示意圖如圖6(b)所示。
(a) 虛擬場景
(b) 場景元素
在本文中,以Unity3D為開發(fā)平臺,結合本文研究的課題和實際需要,編寫程序以實現(xiàn)對XML文本的解析。
本部分的研究內容是對康復訓練場景的動態(tài)配置,通過動態(tài)加載的方式實現(xiàn)虛擬場景的加載。因此在解析個性化虛擬場景的XML文本時,建立的解析算法要與上述定義XML文本的標記相對應。這樣,當程序運行時,可以存儲場景元素的相關信息。如名字、標簽等并在后續(xù)的加載過程中進行讀取,其流程圖如圖7所示。
圖7 解析XML文本流程圖
例如在圖6(b)中,根據(jù)上述XML文本的標記定義,通過標識“scene”,可以讀取到XML文本的根節(jié)點,從而定位XML文本。根節(jié)點下面都是以“object”為標識的子節(jié)點,每一個子節(jié)點代表的是一個場景元素。通過讀取子節(jié)點object中的屬性,就可以獲得場景元素的全部屬性,把每一個讀取的屬性保存在結構體中,最后完成對虛擬場景XML文本的解析。
通過對存儲個性化虛擬場景信息的XML文本解析,場景元素的屬性、材質等內容都已經(jīng)被讀取和存儲起來。下一步需要通過對讀取的信息進行虛擬場景的動態(tài)加載。在虛擬場景中,包含了多種場景元素,場景元素的可以在Unity3D引擎加載,其主要的加載方式有3種。
(1) 通過Resources. Load方法加載。在Unity3D引擎中,其資源界面存在一個文件夾,其名稱為Resources。如果使用Resources. Load方法對資源進行下載,其資源必須轉化為預設體,并存放在Resources文件夾中。使用該方法加載時,Unity3D會默認在Resources文件的路徑中進行資源的讀取和加載。
(2) 通過AssetBunde的形式加載。AssetBundle是Unity引擎中提供的一種用于存儲外部資源的文件格式,它可以存儲任意一種Unity引擎能夠識別的資源。資源打包完成后,通過WWW請求方式對資源進行下載,資源下載后,就可以把資源加載到Unity3D引擎中。
(3) 通過AssetDatebase.loadasset方法加載。該方法主要面向的是Unity3D的開發(fā)人員,并只能在Unity3D的編輯界面中應用。
以上是Unity3D引擎中的3種資源加載方式,對于第1種加載方法,由于只能把資源放在指定位置,靈活性不夠,并且發(fā)布成“.exe”文件后,場景元素庫是不能改變的,從系統(tǒng)的角度出發(fā),場景元素應該可以增加和刪減的,因此該方法不采用。第3種加載方式有一定的局限性,適用的范圍有限。對于第2種資源加載方式,由于其資源可以放置在不同路徑,且場景元素庫也可以實現(xiàn)增加和刪減,實現(xiàn)虛擬場景動態(tài)配置。因此,選擇第2種加載方式,AssetBunde 方法的加載流程圖如圖8所示。
圖8 資源加載流程圖
動態(tài)加載完成訓練場景的模板后,可以改變場景元素的屬性,例如通過改變模型的位置和方向,復制、粘貼、和刪除場景中的模型,也可以通過選定模型,改變其材質,形成不同場景風格。當場景的配置完成,可以保存當前場景,生成XML文件,該場景的XML文件為患者配置的個性化場景,通過控制面板的方法完成上述操作,如圖9所示。
圖9 控制面板
圖9(a)控制面板中的參數(shù)可以調節(jié)場景中所選物體的平移和旋轉,圖9(b)控制面板中的參數(shù)可以對場景中的元素進行常規(guī)如復制、粘貼、等一些操作,還可以對元素材質進行更換。點擊“Save”按鈕,可以生成配置好的場景的XML文件。
通過以上對數(shù)據(jù)采集輸入虛擬場景和場景動態(tài)個性化配置的研究,以圖6(a)的場景為例,圖10(a)為實驗的真實環(huán)境,(b)實現(xiàn)Kinect捕捉人體實際數(shù)據(jù)與虛擬場景的結合實現(xiàn)抓取動作,圖10(c)~(f)實現(xiàn)虛擬場景的個性化設計配置。
(a) 真實場景
(c) 桌子動態(tài)配置前
(e) 材質動態(tài)配置前
本文研究虛擬康復訓練場景的建立,在Kinect傳感器數(shù)據(jù)采集的基礎上提出一種建立個性化虛擬場景的方法。該方法可以滿足不同患者的康復需求,通過
以XML文檔存儲康復訓練虛擬場景的場景元素,直接建立虛擬場景并可以進行靈活配置。虛擬場景的個性化配置可以滿足不同患者的需求,提高其康復積極性,患者與場景的多種交互方式,有利于提高康復效率。