體感游戲是視覺與本體感覺和動作控制的集合,伴隨著虛擬現實技術的迅猛發展,正逐步走入市場。為了達到視覺、運動相結合的目的,采用加速度傳感器與VGA顯示器相結合的方法,通過戴有速度手套的手的運動來完成對游戲界面中的滑塊控制,接住隨機下落的方塊而獲得分數。最后進行了板級測試,實現了開機界面、模式切換、難度調節、計分、游戲暫停與重新開始等功能。通過驗證,游戲獲得了較好的互動性、參與感與沉浸感。 計算機游戲領域已經到了一個同質化相當嚴重的時代。機械性的重復相同的動作致使玩家的興趣越來越低。而現在游戲產業迎來了一個轉折點,開始向交互性、置入感等方向發展。而良好的沉浸感要求游戲必須在互動性上有創新。過去,游戲大部分是通過鍵盤與鼠標來完成控制的,但隨著傳感器技術、微機視覺的進步,使得利用自己的行動來對機器發出指令的愿望得以實現。這種人機互動模式以更為自然性、直觀性的運動、語音等摸式代替電腦的鍵盤和鼠標等外設。 現在已經有了很多創新成果,如三維攝像機、傳感器球拍、數據手套等。一些公司也推出了各種平臺,如日本任天堂公司的Wii、微軟的Kinect、華碩的Xtion等。這些設備一般較為昂貴,本文設計目的是低成本來完成人機交互,利用FPGA作為主控制器,借助現代家庭較為普及的電腦的顯示器,實現體感游戲的設計,提高游戲的沉浸感與趣味性,同時保持了對于鍵盤操作的兼容性。 1 系統設計方案 該系統主要由兩個部分組成,分別是數據采集單元、顯示控制單元。數據采集單元主要實現對運動控制信息的采集、數據的修正與處理、上傳到顯示控制單元等功能。顯示控制單元主要實現游戲的開始、難度設定、模式切換、顯示等功能。整體框圖如圖1所示。 圖1 系統整體框圖 1.1 數據采集單元 數據采集單元主要包括從控制器、加速度傳感器、LED顯示、按鍵、串口四個硬件部分。各部分的選擇和功能如下: 從控制器選用STC89C51單片機,此系列單片機是宏晶科技推出的新一代超強抗干擾、低功耗、高性價比的單片機,指令代碼完全兼容傳統8051單片機,并且有LQFP封裝,使得速度手套可以做到小型化。 加速度傳感器選用的是ADXL345。它是一款完整的3 軸加速度測量系統。既能測量運動或沖擊導致的動態加速度,也能測量靜止加速度,例如重力加速度,使得器件可作為傾斜傳感器使用。本設計中利用了其測靜止加速度的功能,得到傾斜角度,從而產生控制指令。 采集單元中用了兩個LED燈,用于顯示當前速度手套的輸出狀態:當左側燈亮說明發出的控制信號為向左運動。兩個按鍵輸入用于游戲的控制信號暫停和分數清零的信號的產生。 采集單元利用串口將控制信號上傳到顯示控制單元。RS232是由電子工業協會(Electronic Industries Association,EIA)所制定的異步傳輸標準接口。在低通信速率下,直接連接的最大物理距離為15 m,可以使得人能遠離屏幕來操作游戲,防止眼睛疲勞。后期會考慮采用315模塊來實現無線的操作。 1.2 顯示控制單元 此單元是整個系統的核心,完成了游戲的大部分功能設計,主要包括主控制器、VGA接口、PS/2接口、獨立按鍵、數碼管、串口等硬件部分。 主控制器采用Altera于2004年推出的CycloneⅡ的FPGA,型號為EPC2C8208。其功耗較低,核電壓只有1.2 V,片上RAM 有162 Kb,可以用于配置為RAM,ROM,FIFO等,時鐘利用50 MHz的有源晶體產生。總控制單元負責接收數據采集單元的信號、兩種游戲模式的切換和控制指令的產生、VGA顯示控制、游戲初始化界面存儲等。 2 系統軟件實現 游戲主要實現的功能有:歡迎界面與游戲界面的切換以及VGA顯示;速度手套模式與鍵盤模式的切換;計分系統,包含分數的顯示、清零等;游戲的難度等級設置、游戲的開始界面設計、暫停、結束、重新開始等功能。軟件設計包括單片機、FPGA的程序設計以及兩者通信指令編碼準則設定三個方面。 2.1 單片機程序設計 單片機部分主要功能為通過采集加速度傳感器和按鍵的信號,根據兩個單元間的編碼準則產生相應的控制指令,通過串口上傳到顯示控制中心。程序設計流程圖如圖2所示。 圖2 單片機程序流程圖 2.2 FPGA程序設計 FPGA是游戲的主控制器,完成了游戲的大部分功能,頂層設計文件中主要包括輸入顯示類模塊、VGA核心模塊、存儲模塊三類模塊。其中輸入顯示類模塊主要有分頻模塊、PS/2接收模塊、串口接收模塊、指令處理模塊、數碼管顯示模塊;存儲模塊包括基于FPGA 片上RAM的RAM和ROM模塊。頂層設計框圖如圖3所示。 圖3 FPGA頂層設計框圖 2.2.1 輸入顯示類模塊 獨立按鍵用于模式的選擇、游戲難度的調節、由歡迎界面到游戲界面的切換;串口部分用于接收來自數據采集單元的控制指令,經過譯碼模塊后送入模式選擇模塊;PS/2模塊用于接收鍵盤信號輸入并產生指令送入模式選擇模塊;數碼管用于顯示當前的游戲模式、難度等級和獲得分數。 顯示器采用的分辨率為640×480 的,刷新頻率為60 Hz,根據VGA常見刷新頻率時序表可知,需要時鐘為25 MHz左右,板子輸入時鐘為50 MHz,經過分頻模塊后可以提供25 MHz的時鐘。 2.2.2 存儲模塊 設計中,由于采用的是FPGA的片上RAM作為存儲介質,受到其162 Kb的約束,只能設計大小為256×256的單色界面。存儲的數據位寬為32位,共2 048個,地址線為11位。 游戲界面因為要不斷修改,故存放在基于FPGA片上RAM的RAM模塊中。其可同時有讀寫使能,因此可以同時讀寫,即使同時讀寫同一個地址也不會出錯,而且還可以設置成讀寫地址線各自獨立,不用考慮時分復用使用地址線的問題。這樣在實際代碼中就可以將RAM的讀和寫完全獨立考慮,分別由掃描輸出模塊和數據處理模塊完成,兩者互不干擾。圖4是RAM的讀寫時序圖。 圖4 配置RAM中讀寫數據時序圖 開始界面由于是固定的,放入ROM 中,初始化ROM文件中的數據可通過Matlab處理得到。現在有一些字模軟件雖然可以讀取要顯示的圖片,但給出的數據格式并不能初始化ROM的,因此,利用Matlab編寫了一段圖片處理程序,可以讀取圖片,然后經過處理,生成一個可以直接復制到ROM初始化文件中的數組形式。這樣,使得圖片顯示操作簡單,圖片替換更容易。 2.2.3 VGA控制模塊 在游戲界面設計中,存在主要的難點:小方塊隨機間隔下落、難度等級設置等。 在游戲中,為了增加游戲的難度,在設計中,小方塊的降落為兩個,而且是有一定的間隔、在隨機位置下落。小方塊的動態顯示是通過不斷修改RAM中要顯示圖像的數據來實現的。游戲中方塊的長為32 個像素(對應RAM中存儲的數據位寬,方便修改),則界面中有8條下落路線,小方塊的下落是從界面頂端開始的,也就意味著RAM中的數據修改是從前8位的某一位開始的,因此實現隨機下落只需要產生一個1~8范圍的隨機數。在設計中,通過設計了一個偽隨機數產生器,生成一個9以內的隨機數作為RAM修改數據的起始位。 第二個小方塊的下落是通過設定一個標志位Num2,當第一個方塊下落到游戲界面的中間位置時,置位Num2,從而觸發了第二個小方塊的下落進程,第二個方塊開始下落。其中,兩個小方塊下落修改數據的操作都是在VGA掃描的消隱階段完成的,因此每進行一次幀掃描,小方塊下落1個像素。VGA刷新頻率為60 Hz,因此小方塊每秒會下落60個像素。 當游戲操作者漏接的方塊數據到達一定數目m,游戲結束。難度等級是通過設置被控制方塊左右移動靈敏度和漏接方塊數目m 來實現的。靈敏度越高,m 越小,游戲等級越高。 2.3 通信編碼準則 單片機從加速度傳感器獲得的數據中提取出y 軸的加速度值,由此可以判斷出速度手套的此時的狀態。它送往串口的數據不是加速度值,而是編碼后的指令。具體的編碼譯碼原則設定如表1所示。 表1 串口通信編碼準則 表1 中FPGA 譯碼是FPGA 的串口接收模塊獲得后,解碼之后送給VGA顯示模塊的指令。游戲中保持了傳統鍵盤的兼容性,具體實現是通過PS/2模塊根據鍵盤輸入信號產生與表格1中FPGA譯碼相同的指令,送給VGA顯示模塊,完成對游戲的控制。 3 結語 本文設計了一款基于FGPA的體感游戲,通過利用人體的動作完成對游戲的操作,利用VGA顯示技術來到達更好的類似虛擬現實的效果,同時系統也保持了對傳統游戲鍵盤操作的兼容性。 游戲通過加入人體的互動,使得游戲者可以對游戲有一種身臨其境的感覺,增加游戲趣味性、交互性、構想性,同時也使得參與者身體得到運動與鍛煉。 游戲最后實現了常規游戲的基本功能,主要有歡迎界面與游戲界面的切換以及VGA顯示;速度手套模式與鍵盤模式的切換;計分系統,包含分數的顯示、清零等;游戲的難度等級設置、顯示以及游戲的結束;游戲的暫停、重新開始等功能等。最后在硬件平臺實現,表明游戲具有可玩性、趣味性,并能使游戲者獲得較好的游戲體驗。 |