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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

作者:姚晨雨等

来源:《软件工程师》2015年第01期

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

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

中图分类号:TP391 文献标识码:A

1 引言(Introduction)

从20世纪80年代开始,“游戏与运动相结合”“健身与娱乐相结合”的设计理念开始在各种商业游戏中有所应用[1]。传统的人机交互方式使用键盘和鼠标,机械性的重复相同的动作致使玩家的兴趣越来越低[2],而基于传感技术的人机交互方式将全身动作的感应信号转换为对游戏的控制信号,将电子游戏与健身运动结合在一起。

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

2 系统方案设计(Project design)

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

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

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

系统使用一个无线手环感应人的手部动作,玩家向前大幅度挥拳时,游戏人物做出手部动作。手环由一个加速度传感器ADXL345[5]、射频发送模块NRF24L01/NRF24L01+[6]和一块ST89C52RD单片机构成。

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

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

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

3.1 脚步动作判断

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

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

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

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

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

3.2 手部动作判断

玩家手部的加速度传感器数据曲线如图5所示,静止时,三轴加速度大小保持相对稳定。水平X轴、Y轴稳定在0—0.1m/s2,竖直Z轴稳定在1.00m/s2左右(重力加速度)。挥拳时,Z轴加速度仍保持在0.89—1.05m/s2,而X轴、Y轴的加速度变化基本同步,在挥拳挥出时,水平加速度会经历一个变大直至超过1m/s2,然后回落的过程;收回时由于动作平缓,水平加速度虽然也会出现一个峰值,但不会超过1m/s2。由于只需要在一次完整的挥拳动作过程中得到一次有效的加速度判断,故取其峰值范围作为判断依据,在X轴、Y轴中,若有任意一轴加速度大小超过1m/s2,判断挥拳一次。

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

4 系统软件实现(Software design)

4.1 单片机程序设计

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

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

单片机初始化ADXL芯片后,首先向芯片I2C总线发送起始信号,写入设备地址和存储单元地址,随后开始连续读取来自随机存储器的六个地址数据,从中分离出X、Y、Z三轴加速度,分析各轴的加速度,若单片机判断出现了一次挥拳,令输出端口PORT1输出一个值

相关文档
最新文档