一种生物反馈增强的多媒体游戏的开发

摘要

作为一种前沿技术,生物反馈已广泛应用于心理治疗、控制及多种人机交互应用中。本文开发了一款基于生物反馈技术的多媒体游戏,包含两个主要部分:脑机接口(BCI)的设计和多媒体游戏的设计。在脑机接口设计部分,采集脑电信号(EEG)并发送至处理模块进行分类。所有脑电信号将被分为两类:运动或放松。随后,这些分类结果将被发送至游戏进程,以实时控制虚拟汽车的动作。在第二部分中,介绍了通过QTCreator进行多媒体游戏设计的过程。我们主要使用QTCreator的GraphicsView框架来开发该游戏。最后,我们将介绍如何结合MATLAB、SCAN4.5和QTCreator,实现利用生物反馈技术进行游戏。

一、引言

随着现代化进程的迅速发展,我们的生活节奏明显加快,由此引发了严重的心理问题。根据卫生部提供的数据,严重精神疾病的发病率已从20世纪50年代的2.7%上升至如今的13.47%,轻症患者数量更是不计其数。然而,社会对此的反应却远远不足。我们仍然缺乏专业的心理健康治疗手段,以及患者能够在家中轻松进行的辅助疗法。其中一种最有效的辅助疗法是采用生物反馈技术[1],它有助于远程健康监测[2],减压[3],疼痛减轻、调节心率、治疗高血压等。但这种治疗通常较为枯燥[4],要求患者重复一些乏味的动作,导致他们很快失去兴趣,从而在一定程度上削弱了治疗效果。为了改进这一状况,我们可以将该技术与有趣的内容相结合,以吸引用户的注意力,从而提升治疗效果。

在生物反馈技术中,脑机接口(BCI)是最流行且最成熟的方法之一[5][6]。它能最直接地反映我们的情绪[7]。此外,脑机接口为我们提供了大脑与外周设备之间的直接通信通路。通过脑机接口,我们无需首先通过双手或双腿来表达我们的意图。来自大脑的指令可以直接执行,用于玩游戏、驱动轮椅[8]以及控制机器人,而无需双手或双腿的参与;残疾人可以重新拥有“双腿”或“双手”,能够站立、行走并操作复杂的设备[9]。基于上述原因,我们将在研究中采用脑机接口技术进行生物反馈视频游戏的设计。

电脑游戏在我们社会的大众中,尤其是年轻人中非常流行[10]。在游戏中,我们可以放松、娱乐,甚至结交朋友。因此,我们可以将生物反馈技术与一些有趣的游戏相结合,以提高其效果。对于游戏开发,有许多可用的软件,例如MATLAB、Visual Studio(VS)和QTCreator。其中,MATLAB具有强大的计算能力,VS拥有大量的程序库。但在界面开发方面,QTCreator是最佳选择。首先,它具有强大的图形视图框架,有助于我们有效处理游戏中图形项目之间的复杂关系。其次,它具备独特的跨平台能力,使我们能够轻松地将游戏扩展到其他平台。因此,本文将采用QTCreator作为游戏开发软件。

生物反馈增强型多媒体游戏的结构如图1所示。首先,脑电图仪(EEG)信号由Neuroscan设备采集,并发送至其配套软件SCAN4.5。SCAN4.5提供一个TCP端口,通过编写MATLAB TCP客户端,MATLAB可实时获取脑电数据。在MATLAB中,利用其强大的计算能力对原始脑电数据进行处理,提取特征并进行分类。随后,将分类结果通过UDP套接字发送至QTCreator。QTCreator中设计的游戏进程将根据这些结果作出响应。

在接下来的章节中,我们将依次介绍如图1所示的系统。

示意图0

II. 脑机接口的设计

A. ERS/ERD现象和信号采集

似乎我们的大脑以一种复杂的方式运作,但仍有许线索可以推断我们的思维。事实上,人脑由数十亿个神经细胞组成。它们通过不断相互交流,并在头皮上表现为变化的电位。不同的意图会导致头皮上不同的电位分布。例如,当我们想要移动身体的某个部位时,特定位置的脑电信号能量水平会发生变化。头皮上的能量水平会降低。这被称为事件相关去同步化(ERD)现象。相反,当我们停止想象运动时,能量水平会上升,这被称为事件相关同步化(ERS)现象。这两种现象在α节律和β节律中表现明显。它们如图2所示。根据这种能量水平的不同表现,我们可以将脑电信号分为两类:运动想象或放松。该技术被称为运动想象[11],并且有许多方法可用于分类运动想象中的不同模式[12][13]。

对于脑电图信号采集,Neuroscan具有高分辨率、高速、多通道和40个传感器,是一款优良的信号放大器。我们使用它来采集头皮上的原始脑电数据。在计算机中,原始数据必须首先由Neuroscan的配套软件SCAN4.5接收,然后通过TCP套接字发送到MATLAB进行处理。

示意图1

B. 预处理与特征提取算法

由于原始脑电信号中混入了许多噪声信号,因此需要进行预处理。最重要的任务是滤出ERS/ERD现象表现明显的α频带和β频带中的信号。预处理有两种方法:首先,我们可以在SCAN4.5中设置内置滤波器的低通和高通频率;其次,我们可以使用MATLAB的滤波函数。

预处理后,我们将采用公共空间模式(CSP)算法来提取信号的特征。该算法的主要思想是构建一个转换器,使其能够最大化某类信号的方差,同时最小化另一类信号的方差,从而更明显地区分它们。为了完成该算法,我们首先计算脑电信号矩阵的协方差。公式如下所示:

$$
C = \frac{EE^T}{\text{trace}(EE^T)}
$$

其中,矩阵 $ E \in \mathbb{R}^{N \times T} $ 表示脑电信号的数据,$ N $ 代表电极数量,$ T $ 代表一次采集中的采样点数量。“trace()”表示计算矩阵对角元素的和。

使用该公式,我们计算n次左手运动想象和左手放松数据的协方差,分别记为 $ C_{li} $ 和 $ C_{ri} $。然后可以计算它们的平均值:

$$
C_l = \frac{\sum_i C_{li}}{n}
$$

$$
C_r = \frac{\sum_i C_{ri}}{n}
$$

其中 $ C_l $ 表示所有 $ C_{li} $ 的平均值,$ C_r $ 表示所有 $ C_{ri} $ 的平均值。然后,我们应该计算混合空间的协方差:

$$
C_c = C_l + C_r
$$

其中 $ C_c $ 表示混合空间的协方差。

其次,我们对矩阵 $ C_c $ 的特征进行分解:

$$
C_c = U_c \times A_c \times U_c^T
$$

在这里,我们可以得到两个矩阵,即特征向量矩阵 $ U_c $ 和矩阵 $ C_c $ 的特征值矩阵 $ A_c $。

第三,我们对矩阵 $ C_c $ 进行白化变换:

$$
P = A_c^{-0.5} \times U_c^T
$$

$$
S_l = P \times C_l \times P^T
$$

$$
S_r = P \times C_r \times P^T
$$

然后,我们对矩阵 $ S_l $ 和 $ S_r $ 的特征进行分解:

$$
S_l = B \times A_l \times B^T
$$

$$
S_r = B \times A_r \times B^T
$$

现在,所需的转换器如下所示:

$$
W = (B^T \times P)^T
$$

C. 分类算法

在分类中,我们采用线性判别分析(LDA)算法。它是一种简单且稳定的分类器。其主要思想是基于已知样本构建分类准则,然后根据该准则对新样本进行分类。

LDA的表达式如下所示:

$$
D(x) = b + \omega^T \times x
$$

其中“x”表示新样本,“b”和“w”是由已知样本计算得到的参数,“D(x)”是分类的结果。如果 $ D > 0 $,则表示 x 是一种信号,而 $ D < 0 $ 表示另一种信号。

D. 离线脑机接口实验

基于上述算法,现在我们可以建立离线脑机接口。实验的训练模式如图3所示。在第一阶段,受试者有10秒时间进行准备。然后,他应进行左手运动想象。在下一个间隔中,他停止想象。接着,他应进行右手运动想象,然后停止,并重复此循环。

设置好训练模式后,出现了一个问题:我们如何保证离线脑电数据与训练间隔之间的同步?简而言之,在完成一次训练实验并获得记录有脑电数据的离线文件后,我们能否知道每个间隔与其脑电数据之间的精确对应关系?为了解决这个问题,我们使用QTCreator创建了一个训练窗口,如图4所示。

在此窗口中,我们可以设置训练的参数,例如时间间隔、循环索引等。更重要的是,它可以与SCAN4.5进行通信。如果我们点击“开始实验”按钮,它将向SCAN4.5发送命令,使其开始采集和记录脑电数据。一旦完成训练,它将发送命令给SCAN4.5,使其停止采集。这已确保了在数据文件与训练模式的开始和结束时刻之间实现同步。

然后,我们可以根据之前设置的时间间隔、循环索引和采样率来计算每个间隔的脑电数据。

完成这些准备工作后,受试者只需坐在显示器前,注视训练窗口并按照窗口给出的指示进行操作。每次实验结束后,我们将得到一个离线文件。通过该文件,我们可以获取脑电数据,并使用前述算法对其进行处理。

示意图2

示意图3

E. 实验结果

完成实验后,我们得到一个离线脑电数据文件。首先从文件中加载原始数据,并对其进行预处理,以滤除8到12Hz之间的特定频率范围。原始数据和滤波数据在图5中进行了比较。从时域来看,我们几乎看不出它们之间的差异。但如果在频域中进行可视化,我们可以更容易地区分它们,如图6所示。然后,可以对滤波数据进行CSP变换,提取特征并进行分类。一次实验的分类结果如图7所示。在图中,红色圆圈表示运动想象,蓝色‘x’表示放松。如图7所示,这些算法的准确率高达81.3%。

示意图4

示意图5

示意图6

三、多媒体游戏的设计

A. 游戏规则设计

多媒体游戏界面如图8所示。用户车辆、障碍车辆和背景的图像均从互联网下载[14]。

游戏中场景有四条车道。场景底部的红色汽车是用户车辆,其他车辆为障碍车辆,它们会随机出现在场景中。游戏开始时,用户车辆的速度为0米/秒,随后自动加速并追赶障碍车辆。如果玩家未能及时变道,将与障碍车辆碰撞,此时用户车辆速度将重置为0米/秒,并需再次加速。

我们已经在游戏中定义了两个关于碰撞的重要事件。第一个是上文提到的碰撞事件,当用户车辆与障碍车辆的尾部发生碰撞时触发。在这种情况下,用户车辆会停止,而障碍车辆会被撞击并向前飞行一段距离。第二个是强行并道事件,当用户车辆与障碍车辆并行后变道进入障碍车辆所在车道时触发。在这种情况下,障碍车辆必须让行,否则将被摧毁。同时用户车辆的速度会增加。第二个事件将提高游戏的趣味性。

示意图7

B. 游戏框架设计

在确定游戏规则后,我们设计了游戏程序的框架。正如我们在第一节中提到的,QTCreator为我们提供了强大的图形视图框架用于游戏设计。在其框架中,主要有三个重要组件,分别是QGraphicsScene、QGraphicsView和QGraphicsItem。为了便于理解,我们可以用一个类比来介绍它们:QGraphicsScene就像一间空房子,我们可以在其中添加许多“家具”(QGraphicsItems)。这不仅仅是一间简单的房子,它知道每个成员的坐标、轮廓、运行状态等信息,同时还配备了“广播系统”。一旦发生某些重要事件,例如碰撞或鼠标点击,它会通知其中的所有成员或仅特定成员。QGraphicsView类似于房子的一扇窗户,通过这扇窗户,我们可以局部或全局地观察QGraphicsScene中的项目。我们还可以设置这个窗口的大小和透明度。QGraphicsItem则是这间房子中的家具。例如,在本游戏中,用户车辆、障碍车辆和背景图片都是QGraphicsItems。它为我们提供了一些基本功能,用于绘制项目的形状、移动项目、检测边缘和碰撞等。

基于该框架,我们将游戏场景作为框架的核心,因为它能够轻松管理其中包含的所有图形项目。图形视图为被视为窗口系统中的窗口,用于从其视角观察游戏场景。障碍车辆被设计为链表结构,以便更好地进行管理。背景图片也是场景的一个项目,它根据用户车辆的速度在屏幕上快速或缓慢移动,从而产生车辆正在前进的错觉,而实际上车辆始终停留在场景底部。具体细节将在下一节中介绍。该框架如图9所示。

示意图8

C. 基本游戏的实现

为了可视化游戏设计,我们需要在场景中绘制图形项目,例如用户车辆、障碍车辆和背景图片。在这一步中,我们使用QGraphicsItem中的成员函数paint()。通过该函数,我们可以使用Qt绘图工具绘制任意形状或加载图片来绘制项目。

下一步,我们使用moveby(x,y)函数来移动项目。函数括号中的参数表示项目在x和y方向的位移。为了实现实时自动移动项目,我们可以使用Qt定时器。Qt定时器的基本机制如下:首先设置定时器的时间间隔并启动它。定时器运行后,每当完成一个时间间隔,就会执行超时函数,然后重复开始下一个时间间隔。因此,我们需要设置时间间隔,并将“moveby()”函数写入超时函数中。定时器的超时函数。然后项目将在屏幕上以特定速度自动移动。如果我们想改变速度,可以更改定时器的间隔或moveby()函数中的参数。

接下来,我们考虑本游戏的速度机制。游戏中主要有两种速度:用户车辆的速度和障碍车辆的速度。对于障碍车辆,它们根据各自的速度在屏幕上向前或向后移动。一旦它们移出视图范围,就会消失。然而,用户车辆不会在屏幕中消失,实际上它始终停留在场景的底部。为了营造用户车辆向前行驶的错觉,我们并不移动用户车辆本身,而是让背景图片朝相反方向移动。但如果在整个游戏过程中持续移动背景图片,则需要一张很长的图片,这很难找到,并且会限制游戏的总时长(因为当图片结束时,游戏也必须停止)。因此,我们在背景动画中设计了一个循环:首先选取一张背景图片,并复制一份连接在其上方;然后让视口沿着这张新的图片向上移动;当视口的底边线到达初始背景图片的顶边线时,视口将返回到初始背景图片的底边线位置,并继续这一循环过程。

现在我们介绍如何计算背景和障碍车辆相对于屏幕的速度。公式如下:

$$
V_{bs} = -V_{ua}
$$

$$
V_{os} = V_{oa} - V_{ua}
$$

其中 $ V_{bs} $ 和 $ V_{os} $ 表示背景和障碍车辆相对于屏幕的速度,即它们在屏幕中的实际移动速度。$ V_{ua} $ 和 $ V_{oa} $ 分别是用户车辆和障碍车辆的理论速度。

接下来,我们将这些速度转换为Qt定时器中的时间间隔。公式如下所示:

$$
I = \alpha \times \frac{1}{V}
$$

其中 $ I $ 是定时器的间隔,$ V $ 是物体相对于屏幕的速度,$ \alpha $ 是可变系数。通过增加 $ \alpha $,我们可以提高游戏的难度。

D. 碰撞检测与多媒体的实现

使用QTCreator作为我们的开发平台的优势之一是,它具备处理图形项目之间碰撞的高效机制。一旦我们将障碍车等项目添加到游戏场景中,QT将自动监控其状态。如果它与场景中的其他项目发生碰撞,QT会立即执行相应的碰撞处理函数。实际上,这些函数是QT的“槽”函数,它们可以与“信号”函数关联,以处理诸如碰撞和键盘输入等信号事件。在此情况下,事件即为碰撞。为了实现碰撞检测与管理,我们只需将项目添加到场景中,并在QTCreator中将碰撞管理集成到“槽”函数中,而无需担心如何检测项目是否与其他项目发生碰撞,该过程将自动完成。因此,这一机制使我们的程序更加简洁且易于理解。

为了获得更好的游戏体验,我们还可以为游戏添加一些背景音乐。为此,我们可以使用另一个名为Phonon的QT类。首先,我们创建一个新的Phonon类变量。然后设置输出方式和背景音乐的路径。之后,我们命令音乐开始播放。

E. 使用生物反馈控制游戏

在本节中,我们将实现通过生物反馈技术来玩多媒体游戏的目标。在此前的步骤中,我们已经使用一些软件完成了脑机接口和多媒体游戏的设计。现在核心问题是如何将MATLAB、QTCreator和SCAN4.5这些软件集成在一起。其中,SCAN4.5用于从Neuroscan采集脑电数据,MATLAB用于数据处理和分类,QTCreator用于游戏设计。如图1所示,脑电数据首先从SCAN4.5发送到MATLAB,分类结果再从MATLAB发送到QTCreator。因此,我们的任务是建立这两条通信路径。

如第I节所述,SCAN4.5提供了一个TCP端口,可供我们实时获取脑电数据。在SCAN4.5的技术规范中,对TCP数据包有详细的描述。数据包的结构如图10所示。从图中可以看出,该数据包由两部分组成:头部和数据部分。头部包含四个成员:“bodysize”表示本数据包中数据部分所占的字节数;其余三个成员的不同取值组合代表MATLAB与SCAN4.5之间的不同命令。我们可以利用这些命令使SCAN4.5开始采集数据、发送数据、停止采集等。因此,我们的工作是根据SCAN4.5提供的协议编写一个MATLAB TCP客户端程序。在编写客户端程序时,必须考虑两个重要问题。一是如何精确地接收并分析头部。一旦失败,由于TCP的数据流是连续的,将会引发一系列错误。另一个问题是如何匹配发送方与接收方的速度,因为我们无法过快或过慢地接收数据。为了解决这个问题,我们最好使用MATLAB定时器,并找出最佳的定时器间隔。

示意图9

在QTCreator和MATLAB之间建立通信通道有多种方法。一种是使用MATLAB引擎,这种方法稳定但速度太慢,会影响游戏中的用户体验。另一种选择是使用动态链接库,速度更快,但对MATLAB和QTCreator的版本依赖性很强。如果更改软件版本,可能会导致许多错误。本文采用了一种新方法,即使用UDP套接字作为这两个软件之间的通道,原因如下。首先,它稳定且快速,完全不依赖于版本或操作系统,两个软件进程可以在系统中并行运行而互不干扰。其次,与TCP相比,UDP更简单、更快速,无需在两个终端之间建立连接。第三,由于我们仅在一台计算机上使用局域网通信,因此无需担心数据包丢失问题。为了建立此通道,我们首先在MATLAB和QTCreator中绑定一个特定的UDP端口。例如,MATLAB绑定到‘6667’端口,QTCreator绑定到‘6666’端口。然后,如果MATLAB需要向QTCreator发送分类结果,可以使用MATLAB中的函数“fwrite(UDP,data)”将数据发送到6666端口的UDP。QTCreator将实时监控该端口,一旦MATLAB发送结果,QTCreator会立即接收。

在建立这两个通信通道后,我们现在也完成了我们的目标。如图11所示,训练后,用户只需坐在显示器前,戴上电极帽并注视游戏场景即可玩游戏。当用户希望用户车辆向左转时,他执行运动想象;而当希望向右转时,则放松。

示意图10

IV. 结论

本文中,我们首先打算设计一种基于运动想象的脑机接口界面。我们采用CSP和线性判别分析算法进行特征提取与分类,实验结果验证了这些算法的有效性。随后,我们通过QTCreator设计了一款多媒体游戏。利用QTCreator独特的框架和丰富的代码资源,我们更高效地完成了游戏设计。并且更加清晰,这将有助于我们今后完成游戏或将其扩展到其他平台。最后,我们通过使用TCP和UDP套接字将游戏与生物反馈技术相结合。我们综合考虑了两者的优缺点,决定通过TCP传输脑电数据,以利用其可靠性;通过UDP传输游戏指令,因为UDP更简单且快速性更高。实验结果证明了这些通信通道的稳定性和快速性。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐