摘 要:引入最新的健身型體感游戲理念,開發(fā)一種感知人體手腳動作的人機(jī)交互體感游戲系統(tǒng),使用壓力傳感器感應(yīng)玩家的腳步動作、加速度傳感器感應(yīng)手部動作,并把感應(yīng)的動作編碼成運(yùn)動指令,發(fā)送給計算機(jī)處理并顯示。最后完成了軟硬件調(diào)試,系統(tǒng)成功實(shí)現(xiàn)了體感交互方式,玩家從中收獲了較好的健身性、趣味性和普適性。
關(guān)鍵詞:人機(jī)交互;體感游戲;壓力傳感器;加速度傳感器
中圖分類號:TP391 文獻(xiàn)標(biāo)識碼:A
1 引言(Introduction)
從20世紀(jì)80年代開始,“游戲與運(yùn)動相結(jié)合”“健身與娛樂相結(jié)合”的設(shè)計理念開始在各種商業(yè)游戲中有所應(yīng)用[1]。傳統(tǒng)的人機(jī)交互方式使用鍵盤和鼠標(biāo),機(jī)械性的重復(fù)相同的動作致使玩家的興趣越來越低[2],而基于傳感技術(shù)的人機(jī)交互方式將全身動作的感應(yīng)信號轉(zhuǎn)換為對游戲的控制信號,將電子游戲與健身運(yùn)動結(jié)合在一起。
如今市場上成功的健身型體感游戲種類繁多,如基于攝像頭Kinect平臺的《Kinect大冒險》[3]等,這些設(shè)備大都價格昂貴,且需要專門的游戲主機(jī)。本文的設(shè)計目的是以低成本、適用廣為特點(diǎn),為基于鍵盤操作的電腦小游戲提供體感交互式的控制模式,系統(tǒng)采用壓力傳感器和加速度傳感器,分別感應(yīng)玩家腿部和手部動作,而不僅僅只有一個手部遙控裝置[4],玩家能夠獲得全身性的運(yùn)動。
2 系統(tǒng)方案設(shè)計(Project design)
本系統(tǒng)包含三個部分:傳感器單元、數(shù)據(jù)采集處理單元和控制顯示單元。數(shù)據(jù)采集處理單元使用三塊51單片機(jī),將加速度數(shù)據(jù)與壓力數(shù)據(jù)分開處理,并實(shí)現(xiàn)了玩家手部加速度裝置的無線化。整體框圖如圖1所示。
本系統(tǒng)基于傳統(tǒng)的橫版過關(guān)類游戲,按照常規(guī)鍵盤操作方式使用方向鍵或其他按鍵,人物可以前后移動或向上、向前、向后跳躍;人物的手部運(yùn)動只有一種,其功能視具體游戲而定,在本裝置中一律按揮拳攻擊處理。
系統(tǒng)使用一個壓力感應(yīng)裝置感應(yīng)玩家的腳步命令動作,該裝置有五個區(qū)域如圖2所示,每個區(qū)域下面安裝一個壓力傳感器-廣測YZC-1B,其中C區(qū)代表“原地”方向,玩家在這個區(qū)域跳一下,上位機(jī)游戲的人物原地跳一下;A和B區(qū)分別是“前進(jìn)”方向的左右腳擺放位置,玩家在這個區(qū)域原地跑或向上跳躍,游戲人物向前進(jìn)或者向前跳;D和E區(qū)分別是“后退”方向的左右腳擺放位置。
系統(tǒng)使用一個無線手環(huán)感應(yīng)人的手部動作,玩家向前大幅度揮拳時,游戲人物做出手部動作。手環(huán)由一個加速度傳感器ADXL345[5]、射頻發(fā)送模塊NRF24L01/NRF24L01+[6]和一塊 ST89C52RD單片機(jī)構(gòu)成。
數(shù)據(jù)采集處理單元以串口通信方式,向PC上位機(jī)中的游戲發(fā)送控制命令,上位機(jī)中的串口模擬鍵盤程序可以根據(jù)串口發(fā)來的命令,模擬按鍵響應(yīng),控制電腦游戲中游戲人物的動作,從而實(shí)現(xiàn)單片機(jī)對電腦游戲的控制。
3 動作判斷方法分析(Analysis of motion)
動作判斷方法是本系統(tǒng)研究階段的主要研究內(nèi)容,判斷方法的好壞直接影響系統(tǒng)功能的實(shí)現(xiàn)。
3.1 腳步動作判斷
在跑步和跳躍時,人的左右腳的動作有緊密聯(lián)系,設(shè)置玩家右腳為主動腳,左腳為從動腳,判斷每次的動作都從右腳開始。
以體重50kg玩家的實(shí)驗(yàn)數(shù)據(jù)為例,數(shù)據(jù)采樣頻率10Hz,僅采集得到若干特征值,方便對動作的判斷,壓感裝置測量到的并不是真實(shí)的質(zhì)量,玩家靜立在壓感裝置上的測量值為3kg,當(dāng)玩家在前進(jìn)/后退區(qū)域跑動,左右腳下的稱重傳感器測量到的數(shù)據(jù)如圖3所示。從靜止到跑步再回到靜止?fàn)顟B(tài),右腳和左腳的重量交替變化,重量從小幅波動到大幅起落,最低值到0,峰值能夠超過靜立重量的兩倍。筆者的判斷方法是:右腳的重量嚴(yán)格超過靜立重量的兩倍、同時左腳重量為零、待1秒內(nèi)左腳落下后重量達(dá)到靜立重量的兩倍,則完成一次跑步命令動作。
當(dāng)玩家在前進(jìn)/后退區(qū)域跳躍,左右腳下的稱重傳感器測量到的數(shù)據(jù)如圖4所示。每個跳躍動作可分解為起跳、騰空、落地三個過程[7],左右腳重量變化幾乎同步,在起跳和落地過程中,傳感器分別會測量到一個峰值,達(dá)到靜立重量的兩倍。筆者僅以第一個峰值為準(zhǔn)進(jìn)行判斷,判斷方法是:右腳重量達(dá)到靜立重量的兩倍、同時左腳重量超過靜立重量、待雙腳同時騰空使重量為零,則完成一次跳躍,隨后在程序中延時400毫秒,避免誤判第二次峰值。
當(dāng)玩家在原地區(qū)域跳躍,兩只腳都在同一個傳感器上,跳躍過程中質(zhì)量變化的峰值更大,但其重量變化曲線的趨勢與上文大致相同,判斷方法也類似,測量到第一個峰值超過靜立重量的兩倍即視為一次有效的跳躍,隨后延時400毫秒。
以上分析的判斷方法,能夠正確分辨玩家連續(xù)的動作,克服雙腳質(zhì)量變化的不平衡特點(diǎn)[8],并及時做出反應(yīng),盡量縮短判斷動作所需的時間,減小人機(jī)交互中的時延感。
3.2 手部動作判斷
玩家手部的加速度傳感器數(shù)據(jù)曲線如圖5所示,靜止時,三軸加速度大小保持相對穩(wěn)定。水平X軸、Y軸穩(wěn)定在0—0.1m/s2,豎直Z軸穩(wěn)定在1.00m/s2左右(重力加速度)。揮拳時,Z軸加速度仍保持在0.89—1.05m/s2,而X軸、Y軸的加速度變化基本同步,在揮拳揮出時,水平加速度會經(jīng)歷一個變大直至超過1m/s2,然后回落的過程;收回時由于動作平緩,水平加速度雖然也會出現(xiàn)一個峰值,但不會超過1m/s2。由于只需要在一次完整的揮拳動作過程中得到一次有效的加速度判斷,故取其峰值范圍作為判斷依據(jù),在X軸、Y軸中,若有任意一軸加速度大小超過1m/s2,判斷揮拳一次。
上述加速度判斷方法的合理性在于,取略小于揮出時峰值、而又遠(yuǎn)大于收回時峰值的數(shù)值作為閾值,最大限度地避免收回時被判為又一次揮拳,以及揮出時沒有被判斷為揮拳的誤判狀況出現(xiàn)。每次判斷所需時間極短,可在短時間內(nèi)進(jìn)行多次判斷,實(shí)時反映運(yùn)動狀況。
4 系統(tǒng)軟件實(shí)現(xiàn)(Software design)
4.1 單片機(jī)程序設(shè)計
單片機(jī)c是主控器,處理壓感的數(shù)據(jù),判斷腳步動作,并且負(fù)責(zé)傳輸向上位機(jī)的所有命令;單片機(jī)a處理加速度手環(huán)的數(shù)據(jù);單片機(jī)b處理單片機(jī)a和單片機(jī)c的信息交互。單片機(jī)c的程序流程圖如圖6所示。
單片機(jī)初始化傳感器和AD模塊后,首先給存放靜立質(zhì)量的weight_still變量賦值。蜂鳴器發(fā)出提示音,玩家站上壓力感應(yīng)裝置的“原地”區(qū)域,站穩(wěn)后,單片機(jī)每隔50毫秒獲取一個16位數(shù)據(jù),共采集100個數(shù)值并進(jìn)行排序,取中心數(shù)值計算出靜立質(zhì)量(單位:kg),最后賦給weight_still,蜂鳴器停止鳴叫,玩家開始游戲。單片機(jī)不斷查詢原地、向前右腳、向后右腳的質(zhì)量,當(dāng)質(zhì)量超出閾值,則進(jìn)入動作判斷程序,若判斷有動作,則向串口發(fā)送相應(yīng)的命令,命令為一個字節(jié)的字符。單片機(jī)a的程序流程圖如圖7所示。
單片機(jī)初始化ADXL芯片后,首先向芯片I2C總線發(fā)送起始信號,寫入設(shè)備地址和存儲單元地址,隨后開始連續(xù)讀取來自隨機(jī)存儲器的六個地址數(shù)據(jù),從中分離出X、Y、Z三軸加速度,分析各軸的加速度,若單片機(jī)判斷出現(xiàn)了一次揮拳,令輸出端口PORT1輸出一個值KEY=0給無線通訊模塊,模塊收到KEY0后進(jìn)行編碼,將與之相應(yīng)的32字節(jié)數(shù)據(jù)串RxData發(fā)給單片機(jī)b的無線接收模塊一次。
接收端收到RxData后對其解碼,若解得內(nèi)容與機(jī)內(nèi)預(yù)設(shè)的KEY=0時的RxData內(nèi)容相符,則輸出一個低電平給單片機(jī)c的外部中斷引腳,單片機(jī)c進(jìn)入中斷程序后向串口發(fā)送揮拳的命令,同時輸出一個應(yīng)答信號ACK反饋給單片機(jī)b,單片機(jī)b隨后將低電平拉高。
4.2 上位機(jī)軟件設(shè)計
上位機(jī)軟件主要是利用MFC作為框架,進(jìn)行串口通訊和鍵盤模擬。
MFC中的MSComm通信控件提供了一系列標(biāo)準(zhǔn)通信命令的接口,可以用它創(chuàng)建高效實(shí)用的通信程序。本系統(tǒng)建立基于對話框的MFC程序,設(shè)置相應(yīng)的顯示框,在添加MSComm控件的同時添加了CMSComm類,調(diào)用相關(guān)函數(shù)對串口各種參數(shù)進(jìn)行設(shè)置,與單片機(jī)進(jìn)行匹配,實(shí)現(xiàn)串口通訊。
在普通的鍵盤輸入中,當(dāng)按下一個鍵時,Windows操作系統(tǒng)把WM_KEYDOWN或者WM_SYSKEYDOWN消息放入消息隊(duì)列;釋放一個鍵時,Windows把WM_KEYUP或者WM_SYSKEYUP消息放入消息隊(duì)列中。Windows提供了一個模擬鍵盤API函數(shù)Keybd_event(),該函數(shù)能觸發(fā)一個按鍵事件,利用該函數(shù)可以模擬一個按鍵被按下或者松開,從而用軟件代替鍵盤實(shí)現(xiàn)鍵盤消息的發(fā)送。
上位機(jī)軟件接收到單片機(jī)發(fā)來的命令后,判斷命令字符,調(diào)用Keybd_event()函數(shù),改變其中虛擬碼的鍵值,模擬不同按鍵被按下的情況,從而實(shí)現(xiàn)模擬鍵盤的功能,使單片機(jī)能夠控制游戲中的人物。在軟件界面上,玩家可根據(jù)不同的游戲,選擇需要映射的按鍵,實(shí)現(xiàn)了本系統(tǒng)的普適性。
5 實(shí)驗(yàn)測試與結(jié)果(Result of experiment)
筆者完成了系統(tǒng)的硬件和軟件,系統(tǒng)能夠正確地采集到玩家的動作命令,并且及時地使游戲中的人物做出相應(yīng)動作。測試的游戲包括《超級馬里奧》等,本裝置目前在體重48—55kg的人群中試驗(yàn)過。系統(tǒng)工作圖如圖8和圖9所示。
6 結(jié)論(Conclusion)
本文實(shí)現(xiàn)了一種基于多單片機(jī)的人機(jī)交互體感游戲系統(tǒng),可以為基于鍵盤操作的電腦小游戲提供體感交互式的控制模式。文章介紹了裝置的硬件實(shí)現(xiàn)和軟件設(shè)計,玩家可以使用身體動作控制游戲人物,從傳統(tǒng)的按鍵操作中解放出來,手部控制器采用無線通訊,使玩家的控制更加自然,提高了原游戲的沉浸感、交互性和趣味性,是對傳統(tǒng)按鍵游戲的升級。
參考文獻(xiàn)(References)
[1] 劉威.健身類體感游戲的設(shè)計策略研究[D].南京師范大學(xué),
2010.
[2] 艾兵.基于FPGA的體感游戲[J].現(xiàn)代電子技術(shù),2014(6):47-50.
[3] 李天逸.全方位體驗(yàn)KINECT游戲[J].電腦迷,2011(5):14-15.
[4] 車力軍,孫峰.3G時代體感游戲的發(fā)展思考[J].電信技術(shù),2011,
(11):55-58.
[5] 李興法.數(shù)字式加速度傳感器ADXL345的原理及應(yīng)用[J].黑
龍江科技信息,2010(36):2.
[6] 劉志平.基于nRF24L01的近距離無線數(shù)據(jù)傳輸[J].應(yīng)用科技,
2008(3):55-58.
[7] 何浩祥.人體跳躍及落地激勵下的樓板動力響應(yīng)研究[J].振動
工程學(xué)報,2013(2):220-224.
[8] 張春林.人體足底受力測試及其分析[J].北京理工大學(xué)學(xué)報,
2004(7):567-570.
作者簡介:
姚晨雨(1993-),女,本科生.研究領(lǐng)域:測控技術(shù).
史韞楊(1994-),女,本科生.研究領(lǐng)域:電子科學(xué)與技術(shù).
冷明鑫(1992-),女,本科生.研究領(lǐng)域:測控技術(shù).