Muse是一款 InteraXon 开发的头戴式脑电波传感器,它利用数个干电极采集脑电数据,经过滤波与相关算法处理后可以输出实时脑电波信息。最近涉及到这东西的二次开发,网上基本没有现成的资料。经过一段时间的研究,我找到了在Unity中获取数据的方法。

一、专用名词

注意:按照本文思路,可以通过OSC协议实现在 Unity 中获取 Muse 通道数据的功能。因涉及开发内容,本文仅介绍思路及流程,不会包含程序代码。

下面介绍几个本文涉及的专用名词。

  1. UDP
    一种无连接的Internet传输协议,中文名为用户数据报协议。UDP无需建立连接就可以发送数据包,但不保证接收者能够接收数据包。
  2. OSC协议
    OSC 协议即Open Sound Control协议,它是一种开放的,与传输无关的,基于消息的协议,旨在计算机,声音合成器和其他多媒体设备之间进行通信。
    OSC 1.0 协议及报文格式请参阅:http://opensoundcontrol.org/spec-1_0。
  3. 脑波
    脑波即脑电波,我们主要关心这些脑波种类:Delta、Theta、Alpha、Beta、Gamma。
  4. Unity
    一个游戏开发引擎,大多情况下使用 C# 编写脚本。
  5. Wireshark
    一款网络封包分析软件。

二、准备手机APP

AppStore 中下载 MuseDirect 应用程序,目前版本为3.0,这个版本有个坑,后面会讲。

MuseDirect

打开 MuseDirect,在侧栏菜单中连接 Muse 头带,之后便可以在应用程序中看到 Muse 脑带采集的各种数据。

三、设置转发

MuseDirect 侧栏菜单中选择 Streaming,之后填写OSC PREFIX,这个字段用在OSC协议的路径前缀中,而后按需填写IP,Port,最后勾选 Enable OSC Streaming

MuseStreaming1

每台Muse的设备编号都不同,这导致程序生成的OSC消息路径前缀不同,而填写OSC PREFIX之后,程序将会使用OSC PREFIX替代之前的设备编号,这样即使换了Muse设备,OSC消息路径依旧保持一致。

按照 MuseDirect上面的说法,OSC PREFIX不需要在最前加/。填写好PREFIX后,页面下方会展示目前的OSC前缀及路径(此图内填写的前缀为muse)。

MuseStreaming02

看起来似乎一切正常?别急,坑来了。使用Wireshark抓取对应端口的UDP数据包,数据是这样的:

MuseStreaming03

说好的路径前面的/呢?怎么没有了?发过来的数据路径和程序内提示的路径不一致,而这个不一致恰恰是解析报文最重要的分隔符,wtf?

因此,修改PREFIX为如下:

MuseStreaming2

此时 MuseDirect 中显示的路径则是有两个/,不要管它。

MuseStreaming00f

再次抓取数据包,数据与路径正常:

MuseStreaming04

4、Unity开发

目前我们已经可以在某个端口上获取到Muse的OSC数据,接下来的工作就简单了,按照OSC协议解析UDP数据包即可。

具体解析代码因人而异,总之不太复杂,再加上数据是通过UDP数据包发过来的,不像TCP那样需要处理分包,非常方便。

最终你会收到一堆不同路径的 OSC 数据包,它们代表了不同的数据通道或数据类型,选择需要的数据处理即可。

最终测试效果如图所示:

Muse脑电数据

梓喵出没博客(azimiao.com)版权所有,转载请注明链接:https://www.azimiao.com/5589.html
欢迎加入梓喵出没博客交流群:313732000

我来吐槽

*

*

1位绅士参与评论

  1. 七彩88803-25 21:32 回复

    请问2代Muse头环可以吗,1代好像停产了