嵌入式技术
近年来,体感游戏和音乐节奏类游戏深受大家喜爱,是健身娱乐两不误的最佳选择,同时也能让对电子游戏无感的人群,依然能够享受健身的乐趣。结合当下热门的话题和游戏,本项目设计了一个智能体感节奏音乐游戏机,该游戏机是全体感的,玩家需要佩戴蓝牙运动传感器,通过手部动作进行游戏的开始、模式的选择以及执行游戏过程中的动作。
本次安谋杯的题目为智能游戏机设计,从题目出发,设计一个游戏机我们需要考虑使用什么进行游戏的交互,游戏该如何显示,以及游戏的音乐如何播放,即交互、显示、音效三大部分,有了这三个部分一个游戏机才算完整。因此我们所设计的SOC系统必须考虑如何高效实现这三个部分。
在游戏的交互上,从智能角度出发,我们希望玩家能通过无线传感来实现游戏的交互,即只需要通过在屏幕前通过手部动作即可完成游戏的交互。因此我们使用了蓝牙运动传感器+蓝牙接收芯片的方案,玩家佩戴传感器,在FPGA端通过蓝牙接收芯片接收蓝牙运动传感器的数据,并对玩家的动作进行识别。此外这部分也是最能体现智能的地方,我们在内部实现了K-means聚类算法的硬件加速器用于动作识别。
对于为什么选择K-means聚类算法的原因是这样的,首先我们希望实现的是全体感,在游戏过程中的所有场景下,都只需要通过手部动作进行选择,那么就希望我们使用的动作识别算法,它具有非常高的灵活性,必须是可配置的,能够随意切换从而识别不同的动作。第二点我们的动作本质上并不复杂,以游戏的模式选择来说,我们只需要识别到玩家向左切换游戏,即手往左挥,或向右切换游戏,即手向右挥,因此我们并不需要特别高的精度,而且这两个动作实际上是很容易区分的。基于上述考量,我们就想到了K-means聚类算法,通过预先进行训练,存储不同动作识别时需要的聚类中心信息,从而能够随意切换识别不同的动作,这也使得我们能够只通过一个硬件设计多个不同游戏的动作。K-means聚类算法的硬件加速器如下图所示。
在游戏的显示上,我们必须有软硬件协同设计的思想,我们的想法是CPU通过给出一个坐标,硬件部分就在显示器的相应位置显示游戏的素材。此外我们还需要考虑游戏素材可能会发生重叠,且游戏背景和游戏素材的重叠问题等,那么这就出现了优先级的问题,因此我们还设计了素材的优先级仲裁电路。同时我们考虑到如果游戏的素材过多,如果靠CPU一个一个地去改写它们的坐标,那么肯定会影响系统的性能,这时候就需要硬件部分来解决这一问题,即提供一些批处理方法,使得CPU可以控制一批的素材。这个做法是很自然的,我们是在进行嵌入式设计的时候发现这一问题,然后再去改SOC系统的底层硬件。
在游戏的音效上,参考日常我们游玩的游戏,音效实际上应该有两种,即背景音乐和触发了特定事件的特效音乐的混叠。因此在音效的处理上,我们设计了一个音效混叠电路,其实就是两者的简单相加。为了提高音效播放的灵活性,我们还设计了相应的寄存器用于对背景音乐与特效音乐进行缩放,这样可以让特效音乐的声音比背景音乐大,反之也是可以的。音效混叠的电路设计如下图所示。
游戏的三要素至此我们已经有了充足的考量,但是从硬件具体实现上又出现了问题,主要是存储的问题。首先是音乐和游戏素材的存储,尤其是音乐,光靠板子的片上存储资源是远远不能存储一首歌,即我们必须满足游戏对存储资源容量的需求。通过SD卡就可以解决这些问题。而第二个问题就是存储读写速度的问题,我们使用HDMI进行图像传输,越高的分辨率对存储的读写速度要求也更高,SD卡的读写速度远远无法符合游戏素材的实时传输(大家可以手动计算一下吞吐量),因此我们必须使用外部的SDRAM作为显存,因为SDRAM的存取速率相对而言是足够的。
基于上述两个问题的解决,我们设计了相应的DMA模块,能够在SD卡、SDRAM、片上存储之间进行数据的传输,极大地提高了灵活性,后期需要添加游戏素材,只需要把游戏素材事先写入SD卡中,再把其在SD内的地址存储在keil内调用即可。而且我们拓宽一下思维,SD卡并不一定只能存音乐和游戏素材,我们还可以写入一些音乐节拍的东西到SD卡中,CPU可以去读出这一信息来实现音游,而不需要实时处理音乐的节奏信息。
本游戏机实现了四个游戏模式,分别为Drum Master、Tennis Master、Double Boxing、Single Boxing。
在Drum Master(击鼓大师)模式下,音符块会跟随音乐的节奏信息出现,玩家需要等待音符块到达目标点后进行击打,不同的音符块需要执行不同的击打动作(即左手击打与右手击打)。这个游戏我们是仿照太鼓达人这个游戏来复现的,我们设计的游戏画面如下图所示。游戏中,音符块会从右边出现,音符块有两种类型,分别对应需要用左手敲还是右手敲。此外游戏画面中还有歌曲的进度条、游戏的得分、游戏的连击得分信息。
在Tennis Master(网球大师)模式下,音符块会由5个通道根据音乐节奏随机掉落,玩家需要事先将传感器绑在腿上,在游戏中移动到对应的通道下,并挥拍(另一个传感器是绑在手上)进行相应方向的击打。
在Double Boxing(双人拳击)模式下,此时为双人游戏,共有三种不同的动作音符块(直拳、摆拳、上勾拳),两个玩家需要根据不同的音符块做出相应的动作。而在Single Boxing(单人拳击)模式下,共有六种不同的动作音符块(左直拳、左摆拳、左上勾拳、右直拳、右摆拳、右上勾拳),玩家需要根据不同的音符块做出相应的动作。这个游戏是放着了有氧拳击这个游戏进行复现的。
不管是哪个游戏模式,最后都会有一个玩家评分的总结,该评分是根据游玩过程中玩家的连击数、击中数等因素决定的。
全部0条评论
快来发表一下你的评论吧 !