王 洪,趙翠蓮,范志堅,楊志高
(上海大學 機電工程與自動化學院 上海市智能制造及機器人重點實驗室,上海200072)
有實驗結果表明,特定的功能訓練能促進人體中樞神經的重組和代償,恢復患者的肢體運動功能[1]。因此,許多學者對肢體障礙患者的運動訓練方法及平臺進行了研究,其中結合虛擬現實技術與臨床醫學的虛擬訓練方法,在近幾年來也有了廣泛的研究和應用,如丁偉利等[2]在PC機上針對神經損傷患者手部及上肢的運動和控制功能,利用虛擬環境和普通攝像頭設計了一套虛擬康復系統;Ustinova等[3]開發了虛擬栽花系統幫助患者進行手部功能康復訓練。
在人體肌肉表面通過電極拾取的表面肌電信號(sEMG)對人體無損,其蘊含著很多與人體動作相關聯的信息,許多學者將肌電信號與三維仿真技術相結合,形成可人機交互的訓練系統,從而為肢體障礙患者提供新型訓練方法。如李文等[4]在PC平臺上利用表面肌電信號建立在虛擬平臺上的飛機射擊游戲來對患者進行康復訓練;Xu Zhang等[5]利用多通道表面肌電傳感器和3D 加速度器開發一個手勢識別系統,用于人和電腦之間的交互。
從目前的研究現狀來看,現有的虛擬康復系統主要集中在PC平臺上[6,7],費用昂貴、難于攜帶是其面臨的主要問題,因此發展價格低廉、可攜帶的虛擬康復訓練系統十分必要。隨著信息化和互聯網技術的發展,移動設備由于其處理性能的長足進步正被廣泛接受和使用[8]。目前,也有學者在Android平臺上實現了心電監護系統[9]、腦電反饋訓練系統[10]。本文提出利用肌電信號處理技術和虛擬現實技術,針對腦卒中患者肢體功能恢復的腕關節訓練動作,在Android平臺上設計并實現具有人機交互功能的康復訓練軟件產品,并研究軟硬件集成的系統組件開發方法。
Android是以Linux為核心的開放源代碼的操作系統,可以運行在手機、平板電腦、GPS、播放器等各種移動設備上。Android平臺由操作系統、中間件、用戶界面和應用軟件四層組成。Android運行時由Android核心庫集和Dalvik虛擬機兩部分組成,其中核心庫集提供了Java語言核心庫所能使用的絕大部分功能,而虛擬機負責運行Android的程序。應用框架層采用結構化的設計方法簡化了組件之間的重用,為Android 開發人員提供了訪問框架應用程序的接口。在應用程序層,Android本身附帶了一些核心的應用程序,簡化了Android應用程序的開發[11]。
Android一般使用Java語言進行開發,也可以用C++等計算機語言,開發平臺使用開放源代碼、基于Java的可擴展集成開發環境Eclipse,實際開發需要下載Android提供的SDK (軟件開發工具包),并在Eclipse中配置相應的開發環境[12]。
本文所設計的虛擬訓練系統包括硬件平臺和軟件平臺兩個部分,如圖1所示。硬件部分的主要功能是采集和發送肌電信號,軟件部分是基于Android平臺開發的虛擬訓練環境。執行流程是采集設備通過電極片從患者的肌肉表面實時采集肌電信號,通過藍牙發送器發送。裝有Android系統的移動設備上通過藍牙接收信號并對其進行分析處理從而驅動目標物的移動。

圖1 系統軟硬件平臺
硬件平臺:①移動設備一臺:1.7 GHz 雙核CPU、1GB內存、1GB可用存儲空間、支持OpenGL ES硬件加速的圖形芯片、具有藍牙接收硬件;②肌電采集設備一臺(內置藍牙發送器),電極片若干。
軟件平臺:①操作系統:Android 2.3~Android 4.2;②程序開發工具:Eclipse +ADT plugin 和Android SDK Tools;③三維建模工具:Blender及Obj模型導入導出相關插件。
虛擬訓練系統利用三維建模技術構建現實世界的虛擬場景,根據用戶的不同動作,在獲取原始肌電信號的基礎上,通過信號處理得到的能量值作為虛擬場景的輸入源,并通過程序驅動場景中目標物的運動作為反饋。通過這種訓練方法增強訓練者的運動能力,實現運動功能恢復。
為了提高軟件的開發效率,開發中引入了軟件組件的思想。軟件組件定義為自包含的、可編程、可重用、與軟件無關的軟件單元,可以很容易被用于組裝應用程序中。本系統的軟件結構由以下4個組件構成:
(1)藍牙組件:為了擺脫物理連接上的限制,降低系統的服務成本、靈活使用設備,本文設計的系統采用藍牙傳輸肌電信號,采用串口模擬協議 (RFCOMM)。藍牙(Bluetooth)是一種短距離無線通信技術,功耗小、成本低、傳輸速率高、抗干擾能力強。數據的傳輸采用藍牙技術,在Android平臺上開發的程序可以直接調用虛擬串口接收下位機肌電采集設備發送的信號數據[13]。
(2)UI組件:Android應用是運行于手機系統上的程序,這種程序以用戶界面的形式提供給用戶操作。Android提供了非常豐富的用戶UI組件,借助于這些用戶UI組件,開發者可以非常方便地開發出優秀的用戶界面。所有UI組件都建立在View、ViewGroup基礎之上,Android采用了“組合器”設計模式來設計View 和ViewGroup,View-Group是View 的子類,因此ViewGroup 也可當成View使用。
圖2顯示了UI組件層次,ViewGroup作為容器來裝配其它組件,ViewGroup里可以包含普通的View 組件之外,還可以包含ViewGroup組件自身。

圖2 UI組件層次
(3)OpenGL ES渲染組件:本文的虛擬訓練環境采用OpenGL ES開發。OpenGL ES是OpenGL 的子集。它是一個免費的、跨平臺的、功能完善的2D/3D 圖形庫接口API,主要針對嵌入式系統設計,如移動電話、手持設備等。OpenGL ES與OpenGL 有很多相似的開發規則并繼承了其開放性的優點,這樣通過OpenGL 開發的個人計算機游戲也能相對容易的移植到移動設備上[14]。
(4)XML文件存儲組件:可擴展標記語言XML 可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。利用XML進行患者的訓練數據存儲可以很方便的對數據進行訪問。
此外,虛擬訓練場景中的模型使用Blender進行建模,利用其提供的Obj導出插件,保存為通用的Obj文件格式。Obj文件格式中保存了模型的三角形網格、紋理、光照和材質以及著色器效果等視見屬性。在Android平臺上需要編寫讀取Obj文件格式的插件。加載模型后,在程序運行時,通過OpenGL ES相關函數渲染。
系統總體結構主要分為數據層和表現層,如圖3所示。數據層為表現層提供數據支持,主要包括對原始肌電信號的分析和處理、數據存儲和對XML文件的訪問。表現層根據狀態設計模式構建用戶界面,完成人機交互功能。

圖3 系統結構層次
資源數據庫保存系統所需的數據,主要包括虛擬環境中物體的3D 網格 (.obj)、2D 紋理圖 (.png)、音效(.wav)和存儲文件 (.xml)。虛擬訓練場景的構建需要加載網格模型和渲染,第一步通過讀取.obj文件把模型加載到內存中,由于模型的建模過程是在其局部坐標系中,因此第二步需要把模型數據從局部坐標系變換到世界坐標系中,這可以通過坐標變換來完成,下面的代碼展示了風扇模型的加載過程。
采用XML文件主要用來實現存儲、查詢訓練數據及對用戶的信息進行管理。XML 文件的解析采用了Visitor模式,縮減了代碼量并且使代碼清楚易懂。下面的偽代碼是本文采用的簡易數據存儲格式。
在該文件中,保存了用戶的基本信息,包括用戶姓名和最大得分記錄。針對單個用戶,每個record元素記錄單次訓練的時間和操作成功次數。
表現層中的用戶界面根據狀態模式[15]進行設計,將單獨一個用戶界面所有相關的屬性和行為封裝到一個類中,如LoginState表示用戶登錄的界面,定義一個狀態基類(如State),可以通過定義新的子類從而很容易的增加新的狀態和轉換。本文設計的系統把每個界面封裝成一個狀態(對象),控制狀態之間的切換從而完成系統的功能,狀態之間的關系構成了有限狀態機 (finite-state machine,FSM)[16]。下面的偽代碼展示了界面之間的切換條件:
enum StateType{用戶登錄,主菜單,設備連接,閾值采集,虛擬訓練,輸出訓練結果};

對于每一位新的訓練者,在動作訓練之前,為了能較好的控制訓練中目標物的運動,需要根據訓練者自身的肌力狀況設置肌電信號的觸發閾值。
從能量的角度分析,對于采集到的連續動作的肌電信號,需要進行動作信號的分割和提取,由于肌肉運動強度和肌電信號的幅度存在一定的正比關系,如圖4 (a)所示,可以在Δt時間內,使用滑動矩形窗對信號數據進行絕對值累加,得到該時刻的窗內肌電信號能量總和Q,通過判斷Q 與閾值的關系來實現自動實時分割各個動作[17]。計算方法如式 (1)所示

式中:x(t)是肌電信號數據,得到的Q(t)就是對應t時刻的肌電信號能量值。其中窗口寬度為Δt,滑動窗口的移動步長為Δt/2,時間窗的寬度Δt選擇要合適,太窄會導致能量值太小,過于敏感而引起誤判斷,如果太寬會造成延時較多。實驗中,采樣頻率為1500Hz,窗口寬度時間設置為0.1s,即150點的信號能量。處理后即可得到新的能量曲線,如圖4 (b)實線所示。

圖4 肌電信號的平滑處理
為了減小和消除序列信號中的隨機起伏波動,使控制目標物更為平滑,對信號序列進行滑動平均處理?;瑒悠骄挠嬎惴椒ㄈ缡?(2)所示

式中:Q(t)——當前時間點要計算的肌電信號,n——步長,同樣n的取值比較關鍵,太大會造成延時較多,如圖4(b)點線所示,是n 等于120點 (即0.08s)時處理之后的信號序列。
訓練者進入到系統的肌電采集狀態,采集一短時間內的多個腕伸動作肌電信號,經過式3滑動平均處理后,找出信號序列中的最小值Q′s_min和最大值Q′s_max。然后根據式 (3)插值,計算訓練時的閾值

式中:K——插值系數,K∈ (0,1),K 值可在訓練系統中進行調整。
本文設計的風扇吹球虛擬訓練環境用于訓練者的腕關節功能訓練,訓練開始前需要進行針對當前訓練用戶的參數化設置過程,訓練時為了增強用戶訓練的積極性添加了隨機播放背景音樂的功能,訓練結束后顯示訓練的結果,整個訓練過程中通過電極片采集患者的sEMG 的變化,驅動訓練場景中的小球的運動。
根據式 (3)設置好閾值后,在接下來的每個動作周期內,根據式 (4)當訓練時的肌電信號值Xi 大于閾值Ythreshold時,小球上升,否則下落

在訓練過程中,訓練的時間和小球的運動高度根據患者的不同情況來調整。小球運動的高度h∈(0,H),H 為訓練時最大高度。訓練分m 個難度,當前難度r目標物上升高度計算方法如式 (5)


整個訓練的流程如圖5所示。進入訓練之前,需要設置當前難度等級等初始化參數。訓練時,首先判斷操作時間是否已經用完,如何時間已經用完,顯示給患者當前的操作成功數和歷史最高操作數,通過這個方法激勵患者的訓練積極性。如果還有剩余時間,則根據當前小球的高度判斷是否得分,如果小球高度大于預設定的高度值h,操作成功數加1,程序控制屋頂的燈打開,直達小球高度小于預設定的高度值h,此時屋頂的燈熄滅。在界面上實時顯示操作成功數和剩余時間。整個流程循環直到剩余時間為0,退出風扇吹球訓練環境,跳轉到輸出訓練結果界面。

圖5 操作流程
根據設計的狀態之間的轉化關系。系統運行步驟如下:
步驟1 訓練者在登錄界面中可以選擇或創建新的用戶,單擊確定按鈕后進入到主菜單界面;
步驟2 在主菜單界面中,單擊連接設備按鈕,開始搜索藍牙設備,搜索之后,周圍的藍牙設備名稱會在列表中顯示,根據藍牙設備的名稱 (“EMG”)從列表中選擇,返回到主菜單界面;
步驟3 當成功連接設備后,單擊閾值采集。進入到閾值采集界面,如圖6所示,在此過程中,需要采集幾個腕伸動作肌電信號的最大值和最小值,根據式(3)設置閾值;

圖6 訓練閾值采集
步驟4 從閾值界面返回后,單擊風扇吹球按鈕,開始風扇游戲康復訓練,如圖7 (a)所示,訓練者肌肉運動產生肌電驅動小球運動;
步驟5 當剩余時間為0時,跳轉到輸出結果界面,如圖7 (b)所示,界面上顯示當前用戶本次操作成功次數和歷史最高操作成功數,從而調動用戶的訓練積極性。

圖7 虛擬訓練場景和結果
在訓練結果顯示界面中,單擊重新游戲按鈕,回到虛擬訓練場景,再次訓練;單擊退出按鈕,回到主菜單,可以選取其它的康復訓練場景。
基于Android平臺的肌電虛擬訓練仿真系統是將肌電信號的分析處理技術和虛擬現實的優勢與康復醫學有效的結合起來,為腦卒中患者提供體驗式的虛擬訓練環境。四大組件的模塊化程序設計方法提高了系統開發效率和可擴展性,有限狀態機的設計方法使程序結構更加清晰。該系統分別以一名25 歲和一名50 歲的健康人作為實驗對象,訓練效果較好。但腦卒中患者的肌電信號有其特殊性 (微弱,異常等),所以本文下一步的工作要以腦卒中患者作為實驗對象,對現有的系統進行驗證和改進。
[1]Blume KR,Dietrich C,Huonker R,et al.Cortical reorganization after macro replantation at the upper extremity:A magneto encephalographic study [J].Brain,2014,137 (3):757-769.
[2]DING Weili,DAI Yan,SU Yuping,et al.Low cost virtual rehabilitation system of arm based on vision interaction [J].Journal of System Simulation,2012,24 (9):2027-2029 (in Chinese).[丁偉利,代巖,蘇玉萍,等.基于視覺交互的手部運動虛擬康復系統 [J].系統仿真學報,2012,24 (9):2027-2029.]
[3]Ustinova KI,Perkins J,Szostakowski L,et al.Effect of viewing angle on arm reaching while standing in a virtual environ-ment:potential for virtual rehabilitation [J].Acta psychologica,2010,133 (2):180-190.
[4]LI Wen,ZHAO Lina,LI Tengfei,et al.The application of sEMG in the upper limb movement function rehabilitation for stroke patients[J].Chinese Journal of Rehabilitation,2013,28 (2):163-165 (in Chinese).[李文,趙麗娜,李騰飛,等.表面肌電信號在腦卒中患者上肢運動功能康復中的應用 [J].中國康復醫學雜志,2013,28 (2):163-165.]
[5]Zhang X,Chen X,Wang W,et al.Hand gesture recognition and virtual game control based on 3Daccelerometer and EMG sensors[C]//Proceedings of the 14th International Conference on Intelligent User Interfaces.ACM,2009:401-406.
[6]Al-Jumaily A,Olivares RA.Bio-driven system-based virtual reality for prosthetic and rehabilitation systems [J].Signal,Image and Video Processing,2012,6 (1):71-84.
[7]Nakamura G,Shibanoki T,Shima K,et al.A training system for the MyoBock hand in a virtual reality environment[C]//Biomedical Circuits and Systems Conference.IEEE,2013:61-64.
[8]TONG Chengfeng,HU Qing.Research and design of dual-net dual-standby on android [J].Computer Applications and Software,2012,29 (2):250-253 (in Chinese).[童承鳳,胡慶.基于Android平臺的雙網雙待的研究與設計 [J].計算機應用與軟件,2012,29 (2):250-253.]
[9]FAN Chencan.The Android mobile ECG monitoring system based on Bluetooth 4.0transmission [D].Zhejiang:Zhejiang University,2013 (in Chinese).[范晨燦.基于藍牙4.0傳輸的Android手機心電監護系統 [D].浙江:浙江大學,2013.]
[10]DENG Dong,LI Huayun.Design of Eeg feedback training system design based on Android [J].The Science Education Article Collects,2014 (4):106-111 (in Chinese). [鄧冬,李華云.基于Android平臺的腦電反饋訓練系統設計 [J].科教文匯,2014 (4):106-111.]
[11]ZENG Jianping,SHAO Yanjie.Study of android’s system architecture and application development[J].Microcomputer Information,2011,27 (9):1-3 (in Chinese). [曾健平,邵艷潔.Android系統架構及應用程序開發研究 [J].微計算機信息,2011,27 (9):1-3.]
[12]ZHENG Yunqing,HUANG Qi.Designing and developing Android-based software automated monitoring tools [J].Computer Applications and Software,2013,30 (2):235-238 (in Chinese). [鄭云卿,黃琦.基于Android 平臺的軟件自動化監控工具的設計開發 [J].計算機應用與軟件,2013,30 (2):235-238.]
[13]QIAN Zhihong,LIU Dan.Survey on data transmission in Bluetooth technology [J].Journal on Communications,2012,33 (4):143-151(in Chinese). [錢志鴻,劉丹.藍牙技術數據傳輸綜述[J].通信學報,2012,33 (4):143-151.]
[14]LIU Qi,CHI Xianshu.Similarities and differences between OpenGL and OpenGL ES [J].Journal of Liaoning Technical University (Natural Science),2008,27 (2):261-262.[劉琪,遲賢書.OpenGL 與OpenGL ES 在開發過程中的異同[J].遼寧工程技術大學學報 (自然科學版),2008,27 (2):261-262.]
[15]Chin B,Millstein T.An extensible state machine pattern for interactive applications [G].LNCS 5142:ECOOP.Berlin:Springer Berlin Heidelberg,2008:566-591.
[16]REN Na,GUO Kai.The human-computer interaction inter-face software design method based on the finite state machine[J].China New Technologies and Products,2011 (3):35-36.[任娜,郭鍇.基于有限狀態機的人機交互界面軟件設計方法 [J].中國新技術新產品,2011 (3):35-36.]
[17]LI Lin,WANG Jianhui,GU Shusheng.Improved automatic segmentation method of sEMG based on signals’energy value[J].Computer Science,2013,40 (6A):188-191 (in Chinese).[李琳,王建輝,顧樹生.一種改進的基于信號能量閾值的表面肌電信號自動分割方法 [J].計算機科學,2013,40 (6A):188-191.]