体感游戏是视觉与本体感觉和动作控制的集合,伴随着虚拟现实技术的迅猛发展,正逐步走入市场。为了达到视觉、运动相结合的目的,采用加速度传感器与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.2FPGA程序设计
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显示;速度手套模式与键盘模式的切换;计分系统,包含分数的显示、清零等;游戏的难度等级设置、显示以及游戏的结束;游戏的暂停、重新开始等功能等。最后在硬件平台实现,表明游戏具有可玩性、趣味性,并能使游戏者获得较好的游戏体验。