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