一种以体感技术实现人机交互的PC游戏控制系统

时间:2024-12-26 02:53:46 来源:作文网 作者:管理员

摘 要:引入最新的健身型体感游戏理念,开发一种感知人体手脚动作的人机交互体感游戏系统,使用压力传感器感应玩家的脚步动作、加速度传感器感应手部动作,并£把感应的动作编码成运动指令,发送给计算机处理并显示。最后完成了软硬件调试,系统成功实现了体感交互方式,玩家从中收获了较好的健身性、趣味性和普适性。

关键词:人机交互;体感游戏;压力传感器;加速度传感器

中图分类号:TฃP391 文献标识码:A

1 引言(Introduction)

如今市场上成功的健身型体感游戏种类繁多,如基于摄像头Kinect平台的《Kinect大冒险》[3]等,这些设备大都价格昂贵,且需要专门的游戏主机。本文的设计目的是以低成本、适用广为特点,为基于键盘操作的电脑小游戏提供体感交互式的控制模式,系统采用压力传感器和加速度传感器,分别感应玩家腿部和手部动作,而不仅仅只有一个手部遥控装置[4],玩家能够获得全身性的运动。

2 系统方案设计(Project design)

本系统包含三个部分:传感器单元、数据采集处理单元和控制显示单元。数据采集处理单元使用三块51单片机,将加速度数据与压力数据分开处理,并实现了玩家手部加速度装置的无线化。整体框图如图1所示。

本系统基于传统的横版过关类游戏,按照常规键盘操作方式使用方向键或其他按键,人物可以前后移动或向上、向前、向后跳跃;人物的手部运动只有一种,其功能视具体游戏而定,在本装置中一律按挥拳攻击处理。

系统使用一个压力感应装置感应玩家的脚步命令动作,该装置有五个区域如图2所示,每个区域下面安装一个压力传感器-广测YZC-1B,其中C区代表“原地”方向,玩家在这个区域跳一下,上位机游戏的人物原地跳一下;A和B区分别是“前进”方向的左右脚摆放位置,玩家在这个区域原地跑或向上跳跃,游戏人物向前进或者向前跳;D和E区分别是“后退”方向的左右脚摆放位置。

数据采集处理单元以串口通信方式,向PC上位机中的游戏发送控制命令,上位机中的串口模拟键盘程序可以根据串口发来的命令,模拟按键响应,控制电脑游戏中游戏人 ت物的动作,从而实现单片机对电脑游戏的控制。

3 动作判断方法分析(Analysis of motion)

动作判断方法是本系统研究阶段的主要研究内容,判断方法的好坏直接影响系统功能的实现。

3.1 脚步动作判断

在跑步和跳跃时,人的左右脚的动作有紧密联系,设置玩家右脚为主动脚,左脚为从动脚,判断每次的动作都从右脚开始。

以体重50kg玩家的实验数据为例,数据采样频率10Hz,仅采集得到若干特征值,方便对动作的判断,压感装置测量到的并不是真实的质量,玩家静立在压感装置上的测量值为3kg,当玩家在前进/后退区域跑动,左右脚下的称重传感器测量到的数据如图3所示。从静止到跑步再回到静止状态,右脚和左脚的重量交替变化,重量从小幅波动到大幅起落,最低值到0,峰值能够超过静立重量的两倍。笔者的判断方法是:右脚的重量严格超过静立重量的两倍、同时左脚重量为零、待1秒内左脚落下后重量达到静立重量的两倍,则完成一次跑步命令动作。

当玩家在前进/后退区域跳跃,左右脚下的称重传感器测量到的数据如图4所示。每个跳跃动作可分解为起跳、腾空、落地三个过程[7],左右脚重量变化几乎同步,在起跳和落地过程中,传感器分别会测量到一个峰值,达到静立重量的两倍。笔者仅以第一个峰值为准进行判断,判断方法是:右脚重量达到静立重量的两倍、同时左脚重量超过静立重量、待双脚同时腾空使重量为零,则完成一次跳跃,随后在程序中延时400毫秒,避免误判第二次峰值。

当玩家在原地区域跳跃,两只脚都在同一个传感器上,跳跃过程中质量变化的峰值更大,但其重量变化曲线的趋势与上文大致相同,判断方法也类似,测量到第一个峰值超过静立重量的两倍即视为一次有效的跳跃,随后延时400毫秒。

以上分析的判断方法,能够正确分辨玩家连续的动作,克服双脚质量变化的不平衡特点[8],并及时做出反应,尽量缩短判断动作所需的时间,减小人机交互中的时延感。

3.2 手部动作判断

上述加速度判断方法的合理性在于,取略小于挥出时峰☢值、而又远大于收回时峰值的数值作为阈值,最大限度地避免收回时被判为又一次挥拳,以及挥出时没有被判断为挥拳的误判状况出现。每次判断所需时间极短,可在短时间内进行多次判断,实时反映运动状况。 4 系统软件实现(Software design)

4.1 单片机程序设计

单片机c是主控器,处理压感的数据,判断脚步动作,并且负责传输向上位机的所有命令;单片机a处理加速度手环的数据;单片机b处理单片机a和单片机c的信息交互。单片机c的程序流程图如图6所示。

单片机初始化传感器和AD模块后,首先给存放静立质量的weight_still变量赋值。蜂鸣器发出提示音,玩家站上压力感应装置的“原地”区域,站稳后,单片机每隔50毫秒获取一个16位数据,共采集100个数值并进行排序,取中心数值计算出静立质量(单位:kg),最后赋给weight_still,蜂鸣器停止鸣叫,玩家开始游戏。单片机不断查询原地、向前右脚、向后右脚的ต质量,当质量超出阈值,则进入动作判断程序,若判断有动作,则向串口发送相应的命令,命令为一个字节的字符。单片机a的程序流程图如图7所示。

接收端收到RxData后对其解码,若解得内容与机内预设的KEY=0时的RxData内容相符,则输出一个低电平给单片机c的外部中断引脚,单片机c进入中断程序后向串口发送挥拳的命令,同时输出一个应答信号ACK反馈给单片机b,单片机b随后将低电平拉高。

4.2 上位机软件设计

上位机软件主要是利用MFC作为框架,进行串口通讯和键盘模拟。

MFC中的MSComm通信控件提供了一系列标准通信命令的接口,可以用它创建高效实用的通信程序。本系统建立基于对话框的MFC程序,设置相应的显示框,在添加MSComm控件的同时添加了CMSComm类,调用相关函数对串口各种参数进行设置,与单片机进行匹配,实现串口通讯。

在普通的键盘输入中,当按下一个键时,Windows操作系统把WM_KEYDOWN或者WM_SYSKEYDOWN消息放入消息队列;释放一个键时,Windows把WM_KEYUP或者WM_SYSKEYUP消息放入消息队列中。Windows提供了一个模拟键盘API函数Keybd_event(),该函数能触发一个按键事件,利用该函数可以模拟一个按键被按下或者松开,从而用软件代替键盘实现键盘消息的发送。

上位机软件接收到单片机发来的命令后,判断命令字符,调用Keybd_event()函数,改变其中虚拟码的键值,模拟不同按键被按下的情况,从而实现模拟键盘的功能,使单片机能够控制游戏中的人物。在软件界面上,玩家可根据不同的游戏,选择需要映射的按键,实现了本系统的普适性。

5 实验测试与结果(Result of experiment)

笔者完成了系统的硬件和软件,系统能够正确地采集到玩家的动作命令,并且及时地使游戏中的人物做出相应动作。测试的游戏包括《超级马里奥》等,本装置目前在体重48―55kg的人群中试验过。系统工作图如图8和图9所示。

6 结论(Conclusion)

本文实现了一种基于多单片机的人机交互体感游戏系统,可以为基于键盘操作的电脑小游戏提供体感交互式的控制模式。文章介绍了装置的硬件实现和软件设计,玩家可以使用身体动作控制游戏人物,从传统的按键操作中解放出来,手部控制器采用无线通讯,使玩家的控制更加自然,提高了原游戏的沉浸感、交互性和趣味性,是对传统按键游戏的升级。


热门排行: 教你如何写建议书