《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于Windows Phone 7的體感健身系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
基于Windows Phone 7的體感健身系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
電子技術(shù)應(yīng)用2012年第1期
韓德強(qiáng),劉立哲,顧春雷
北京工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,北京100124
摘要: 體域網(wǎng)包含一系列傳感器節(jié)點(diǎn),通過(guò)短距離通信技術(shù)實(shí)現(xiàn)與外界的通信,提供醫(yī)療保健、消費(fèi)電子、個(gè)人娛樂(lè)等多項(xiàng)服務(wù)。論述了一個(gè)結(jié)合體域網(wǎng),利用微軟公司推出的XNA技術(shù)和.NET框架,在Windows Phone 7環(huán)境下設(shè)計(jì)實(shí)現(xiàn)的體感健身系統(tǒng)。
關(guān)鍵詞: 體域網(wǎng) WindowsPhone7 XNA
中圖分類(lèi)號(hào): TP391.8
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)01-0014-03
Research on data-processing and conversion of complex mask layout image
Zhao Min1, Tang Yueke2, Chen Baoqin2, Li Jinru2, Hu Yong2
1. School of Information and Technology in Zhanjiang Normal University, Zhanjiang 524048, China; 2. Key Laboratory of Nano-Fabrication and Novel Devices Integrated Technology, Institute of Microelectronics, Chinese Academy of Science, Beijing 100029, China
Abstract: Algorithm of digital image processing is introduced to data-processing and conversion of mask layout system. A software module has been developed to achieve bmp file input, gray-scale quantification, contrast stretching, edge detection, polygon approximation and GDSII file output. Experiment results show that this system can successfully converse complex bmp image to GDSII file.
Key words : image processing; data conversion; mask layout; bmp file; GDSII file

    隨著人們生活節(jié)奏的加快,很多人難以做到經(jīng)常進(jìn)行體育鍛煉。近幾年對(duì)該問(wèn)題提出了多種解決方案,其中運(yùn)用體域網(wǎng)(Body Area Network)技術(shù)實(shí)現(xiàn)的健身方案逐漸受到市場(chǎng)的青睞。

    體域網(wǎng)通過(guò)連接多個(gè)傳感器節(jié)點(diǎn),實(shí)現(xiàn)人體周邊、體表以及體內(nèi)范圍的通信,支持醫(yī)療保健、個(gè)人娛樂(lè)等功能。它把人體變成通信網(wǎng)絡(luò)的一部分,從而真正實(shí)現(xiàn)了網(wǎng)絡(luò)的泛在化,具有廣泛的應(yīng)用前景和巨大的市場(chǎng)潛力。
    該系統(tǒng)使用ZigBee技術(shù)組成體域網(wǎng),并將采集到的人體運(yùn)動(dòng)信息以無(wú)線的方式發(fā)送到Windows Phone 7系統(tǒng)上。運(yùn)用XNA技術(shù)和.NET 框架,在系統(tǒng)上模擬實(shí)現(xiàn)110 m跨欄競(jìng)賽流程的3D游戲。用戶可通過(guò)屏幕看到模擬的運(yùn)動(dòng)畫(huà)面,增加鍛煉的趣味性,提高人們對(duì)運(yùn)動(dòng)的熱情。系統(tǒng)具有體積小巧、方便易用的特點(diǎn),適合在相對(duì)較小的空間使用。
1 系統(tǒng)總體架構(gòu)設(shè)計(jì)
    體感健身系統(tǒng)首先通過(guò)高靈敏的角度傳感器和心率傳感器實(shí)時(shí)采集運(yùn)動(dòng)者腿部擺動(dòng)角度以及心率變化信息,然后利用ZigBee模塊組成體域網(wǎng),再傳輸?shù)狡脚_(tái)中。系統(tǒng)對(duì)收到的信息進(jìn)行處理,實(shí)時(shí)模擬出一個(gè)3D跨欄的游戲。系統(tǒng)結(jié)構(gòu)圖如圖1所示。

    Windows Phone 7是微軟公司于2010年10月發(fā)布的全新智能手機(jī)操作系統(tǒng)。它并不是之前Windows Mobile操作系統(tǒng)的升級(jí)或是繼承,而是一個(gè)全新的操作系統(tǒng),它基于Windows Embedded Compact 7新內(nèi)核編寫(xiě)系統(tǒng),完全脫離了Mobile 6的技術(shù)架構(gòu)。簡(jiǎn)潔華麗的metro界面,宣告了它不同以往的風(fēng)格;采用全新的Push Notification技術(shù)方便了手機(jī)終端與服務(wù)器的數(shù)據(jù)同步[1]。
    為方便開(kāi)發(fā),Windows Phone 7提供了模擬器(Emulator),Emulator可以運(yùn)行在Windows 7操作系統(tǒng)下,并且在調(diào)試和運(yùn)行程序時(shí),不需要將游戲部署到真正的設(shè)備中[2]。
2 系統(tǒng)硬件設(shè)計(jì)
2.1 ZigBee數(shù)據(jù)采集模塊

    ZigBee數(shù)據(jù)采集模塊是硬件平臺(tái)的關(guān)鍵部分,該部分首先利用ZigBee技術(shù)組成體域網(wǎng),然后采集用戶橈動(dòng)脈處的脈搏信號(hào)和腿部的擺動(dòng)角度信號(hào),處理后再以無(wú)線的方式將數(shù)據(jù)傳輸?shù)较到y(tǒng)接收模塊上。為了擴(kuò)大系統(tǒng)的應(yīng)用范圍,將來(lái)也可考慮用藍(lán)牙設(shè)備作為無(wú)線傳輸工具。體感傳感器模塊硬件框圖如圖2所示。

2.2 數(shù)據(jù)接收模塊
    系統(tǒng)接收端使用CC2531內(nèi)置的USB將從ZigBee模塊接收到的數(shù)據(jù)傳到手機(jī)終端上。
3 系統(tǒng)軟件設(shè)計(jì)
3.1 開(kāi)發(fā)環(huán)境

    系統(tǒng)軟件部分使用Visual Studio 2010開(kāi)發(fā),與舊的Visual Studio 版本相比,最新版本的Visual Studio 在性能上有很大提升,方便程序員高效地編寫(xiě)高質(zhì)量的代碼。而且微軟公司提供的Windows Phone 7開(kāi)發(fā)包都是基于Visual Studio 2010的,因此本設(shè)計(jì)選擇Visual Studio 2010作為軟件開(kāi)發(fā)平臺(tái)。
    Windows Phone 7提供了兩種不同的開(kāi)發(fā)平臺(tái):Silverlight for Windows Phone和XNA 4.0 Game Studio。Silverlight是為開(kāi)發(fā)Windows Phone7準(zhǔn)備的。XNA 4.0 Game Studio是為開(kāi)發(fā)游戲準(zhǔn)備的。
    XNA是微軟公司推出的通用軟件開(kāi)發(fā)平臺(tái),建立在C#的基礎(chǔ)上方便游戲開(kāi)發(fā)的一組工具集,目的是讓游戲開(kāi)發(fā)過(guò)程更加輕松簡(jiǎn)單并富有樂(lè)趣。XNA 4.0比起之前的嵌入式版本XNA 3.1而言進(jìn)步非常明顯,能夠支持3D游戲,而且還封裝了Open GLES 2.0的接口[3]。
    為了支持XNA的開(kāi)發(fā),開(kāi)發(fā)環(huán)境還需要安裝.NET Framework 4或.NET Framework 4的 Runtime動(dòng)態(tài)連接庫(kù),否則XNA工程將無(wú)法正常編譯。開(kāi)發(fā)環(huán)境層次圖如圖3所示。

3.2 系統(tǒng)軟件實(shí)現(xiàn)
    3D游戲主要設(shè)計(jì)實(shí)現(xiàn)模擬110 m跨欄競(jìng)賽的流程。圖4展示了游戲全部模塊的關(guān)系結(jié)構(gòu)。對(duì)于軟件開(kāi)發(fā)人員而言,主要實(shí)現(xiàn)的是導(dǎo)入模型、渲染場(chǎng)景、輸入處理、音效處理及運(yùn)行時(shí)機(jī)制等功能。下面結(jié)合本系統(tǒng)的特點(diǎn)分別對(duì)上述幾個(gè)模塊給出處理方法。

 

 

3.2.1 模型導(dǎo)入
    模型的導(dǎo)入需要XNA的內(nèi)容管道(pipeline)來(lái)支持。XNA自帶了兩類(lèi)3D模型的導(dǎo)入處理器,可以分別處理
.FBX文件和.x文件。其中,.x文件在DirectX 3D編程中應(yīng)用得比較廣泛。系統(tǒng)軟件使用MAYA制作三維動(dòng)畫(huà)文件,通過(guò)插件導(dǎo)出為DirectX(.X)文件,經(jīng)過(guò)pipeline導(dǎo)入器處理后,所有不同類(lèi)型的內(nèi)容文件都被轉(zhuǎn)換成XNA框架的內(nèi)部格式。在游戲生成階段,編譯器直接將這些文件封裝到游戲的內(nèi)容管理模塊(Content Manager)中。
    Content Manager是由XNA框架Runtime引擎驅(qū)動(dòng)的,具有良好的封裝,在形式上對(duì)程序員是透明的。使用模型文件的時(shí)候,調(diào)用Content Manager的Load<T>方法即可實(shí)現(xiàn)對(duì)模型的導(dǎo)入。具體實(shí)現(xiàn)代碼為:
    public Model dc_model = null;
    再在LoadContent()函數(shù)中對(duì)模型變量賦值,用Load方法導(dǎo)入模型。具體實(shí)現(xiàn)代碼如下:
    dc_model
    =Game.Content.Load<Model>(@"Models\"+"fuwa");
    fb_model_batch
    = new ModelBatch(Game.GraphicsDevice);
    其中,模型文件的存儲(chǔ)位置以相對(duì)路徑的形式導(dǎo)入,有效避免了系統(tǒng)安裝在別的目錄后找不到模型文件的錯(cuò)誤。模型導(dǎo)入效果如圖5所示。

3.2.2 場(chǎng)景渲染
    場(chǎng)景渲染是將已導(dǎo)入到緩沖區(qū)的模型及紋理繪制在顯示屏上。雖然涉及到大量的繪制操作,但利用XNA提供的繪制精靈(SpriteBetch),可以輕松地完成這一工作。在計(jì)算機(jī)圖形學(xué)術(shù)語(yǔ)中,精靈被定義為一張集成在大場(chǎng)景中的二維或者三維圖像。屏幕顯示管理模塊就是通過(guò)繪制場(chǎng)景中的多種精靈來(lái)完成的。XNA框架提供的精靈也可以用來(lái)進(jìn)行二維圖像繪制,本系統(tǒng)中所有屏幕顯示文本都是由精靈繪制的。
    除此之外,開(kāi)發(fā)者還需要關(guān)心世界變換矩陣、攝像機(jī)變換矩陣和投影變換矩陣的設(shè)置。世界變換矩陣是指將模型坐標(biāo)系變換為三維世界坐標(biāo)系的矩陣[4]。具體實(shí)現(xiàn)代碼為:
    final_world_transforms = Matrix.Identity
    *Matrix.CreateFromYawPitchRoll(dc_rotation.Y, dc_rotation.X, dc_rotation.Z)
    * origional_world_transforms
    * Matrix.CreateTranslation(dc_position);
    攝像機(jī)矩陣是以攝像機(jī)所在坐標(biāo)為原點(diǎn),以攝像機(jī)要觀察的方向?yàn)榛鶞?zhǔn),創(chuàng)建一個(gè)新的攝像機(jī)坐標(biāo)系,將世界坐標(biāo)系變換為攝像機(jī)坐標(biāo)系[4]。XNA提供了一個(gè)CreateLookAt的方法,它返回一個(gè)矩陣。這個(gè)矩陣存儲(chǔ)了從三維圖形轉(zhuǎn)換為平面圖形需要做的方向和位置變換。具體實(shí)現(xiàn)代碼為:
    //Make the camera follow the object
      cmr_position = object_to_follow + cmr_drag;
      cmr_target = object_to_follow;
    //Create the view matrix
      cmr_view
      =Matrix.CreateLookAt(cmr_position,
      cmr_target, Vector3.Forward);
    投影變換矩陣,是指將三維坐標(biāo)系變?yōu)槎S坐標(biāo)系的變換矩陣。其功能是將三維物體進(jìn)行轉(zhuǎn)換,以便在二維屏幕上輸出。這里用到的投影變換是投射投影法。用此投影法可以表現(xiàn)物體距離的遠(yuǎn)近。具體實(shí)現(xiàn)代碼如下:
    //Create the projection matrix
    cmr_projection
    =Matrix.CreatePerspectiveFieldOfView
    (MathHelper.ToRadians(cmr_camera_fov),
    graphics_device_in_cmr.Viewport.AspectRatio, 1, 10000);
    AspectRatio為程序窗口的長(zhǎng)寬比,1為最近可視距離, 10 000為最遠(yuǎn)可視距離。
3.2.3 音效處理
    聲音管理器(AudioManager)繼承自GameComponent,負(fù)責(zé)管理游戲需要使用的聲音。XNA框架提供了能夠處理聲音的SoundEffectInstance類(lèi)型,類(lèi)型中除了包含聲音播放的相關(guān)方法,還封裝了聲音效果渲染方法[5]。聲音管理模塊還設(shè)計(jì)了一個(gè)字典(泛型Dictionary)用于存放所有的音效。泛型在排序和搜索方面比普通數(shù)據(jù)類(lèi)型要好得多。加載聲音、播放聲音、停止聲音和暫停聲音都是調(diào)用SoundEffectInstance類(lèi)型中封裝的對(duì)應(yīng)方法,將聲音名稱(chēng)傳入之后,在聲音字典里查找,如果存在,則進(jìn)行相應(yīng)操作。
3.2.4 輸入處理
    本系統(tǒng)是為Windows Phone 7設(shè)備開(kāi)發(fā)的體感游戲,用戶在游戲過(guò)程中,需要進(jìn)行跑和跳的動(dòng)作來(lái)完成游戲。系統(tǒng)所讀取到的輸入信號(hào)就是傳感器在垂直空間的位置變化。輸入處理的流程是,首先使用C#接口函數(shù)讀取USB輸入的數(shù)據(jù),然后初始化一個(gè)三維向量(Vector3)的臨時(shí)變量statevalue,再初始化一個(gè)布爾變量isjump表示是否有跳躍動(dòng)作,之后對(duì)變化后的statevalue進(jìn)行向量的單位化操作,最后根據(jù)兩個(gè)變量的值確定模型的動(dòng)作。
    游戲使用事件輪詢(xún)驅(qū)動(dòng),不論當(dāng)前是否有輸入操作,都對(duì)輸入模塊進(jìn)行訪問(wèn)。這與傳統(tǒng)的應(yīng)用程序開(kāi)發(fā)的事件注冊(cè)驅(qū)動(dòng)是不同的。采用事件注冊(cè)驅(qū)動(dòng)的程序,用戶輸入后系統(tǒng)對(duì)其進(jìn)行捕捉,喚醒事件處理程序,即在輸入信號(hào)產(chǎn)生之前程序不會(huì)做任何事。相比之下,XNA框架游戲程序由事件輪詢(xún)驅(qū)動(dòng),游戲程序會(huì)主動(dòng)詢(xún)問(wèn)系統(tǒng)是否有用戶輸入發(fā)生,不論有沒(méi)有用戶輸入,程序都會(huì)一直運(yùn)行。
3.2.5 游戲運(yùn)行時(shí)機(jī)制
    本質(zhì)上,游戲運(yùn)行是由循環(huán)的一系列操作組成,這些操作被反復(fù)使用直到游戲結(jié)束。但游戲循環(huán)只包含繪制和更新兩個(gè)方法,所有影響游戲的邏輯都將在這些方法中完成。繪制時(shí)需要與系統(tǒng)進(jìn)行大量的數(shù)據(jù)交互,尤其繪制圖像時(shí)更將耗費(fèi)大量系統(tǒng)空間。為減少繪制方法的負(fù)擔(dān),提高系統(tǒng)性能,游戲?qū)⑦\(yùn)行需要的所有操作(碰撞檢測(cè)、更新分?jǐn)?shù)、游戲結(jié)束檢測(cè)等等)都放到更新方法中實(shí)現(xiàn)。
    在實(shí)現(xiàn)繪制方法的過(guò)程中,用到了XNA的深度緩沖(depth buffer)和模板緩沖(stencil buffer)等特性。深度緩沖和模板緩沖是XNA框架中圖形設(shè)備的屬性。考慮到游戲運(yùn)行時(shí)圖形設(shè)備需要繪制的場(chǎng)景較大,內(nèi)容較多,并且還包括完成渲染模型的動(dòng)畫(huà)效果等工作,因此,開(kāi)啟緩沖功能有助于提高圖形設(shè)備性能。繪制方法流程圖如圖6所示。

    本文詳細(xì)介紹了體感健身系統(tǒng)開(kāi)發(fā)的過(guò)程和方法,對(duì)XNA開(kāi)發(fā)3D游戲過(guò)程中重要的函數(shù)給出了使用說(shuō)明。系統(tǒng)可以幫助那些運(yùn)動(dòng)場(chǎng)地受限制或者行動(dòng)不便的
人提高運(yùn)動(dòng)樂(lè)趣,具有比較廣泛的應(yīng)用范圍。
參考文獻(xiàn)
[1] 韓續(xù).Windows Phone 7平臺(tái)下電子健康軟件的設(shè)計(jì)與實(shí)現(xiàn)[M].北京:清華大學(xué)出版社,2008.
[2] PETZOLD C.Programming Windows Phone 7[M].Redmond:Microsoft Press,2010.
[3] SHERROD A. DirectX游戲開(kāi)發(fā)終極指南[M].北京:北京交通大學(xué),2011.
[4] 張景仁,蔡發(fā)奎.基于XNA的機(jī)場(chǎng)火災(zāi)消防模擬設(shè)計(jì)[J].武警學(xué)院學(xué)報(bào),2007(12):31-34.
[5] Araon Reed. Learning XNA 4.0.O&prime;reilly media[Z].2010.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。