Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

在线实验的具体操作流程是什么? #17

Open
Houxy0522 opened this issue Dec 24, 2022 · 4 comments
Open

在线实验的具体操作流程是什么? #17

Houxy0522 opened this issue Dec 24, 2022 · 4 comments

Comments

@Houxy0522
Copy link

  很高兴可以使用贵校和贵团队开发的MetaBCI平台进行实验,但是我在进行运动想象的在线实验时产生了一些困惑,向您请教一下,主要问题是:在线实验的具体操作流程是什么?

  我使用了您项目中提供的范式demo-stim_demo.py,online=True作为在线实验范式,在线demo-Online_mi.py作为在线采集后台,我的操作流程是先运行范式界面,但是不进行任何操作(不点击enter),之后运行Online_mi.py,但是这样的操作流程会导致一些问题:
  第一个问题关于在线程序和刺激程序的连接,在运行Online_mi.py之后,切回在线范式时,在初始界面选中MI点击enter后,范式界面没有反应,不进入出现左右手的页面,而且FeedbackWorker在run()函数中,会产生except queue.Empty 异常,导致陷入循环等待。而在进行离线采集,online=false时,范式不用和在线程序进行连接时,可以正常运行,请问这是否代表我的在线程序和刺激程序并没有进行正确的连接,如何将在线程序和刺激程序进行正确的连接呢,仅仅保证lsl_source_id相同即可?
  第二个问题关于在线程序和NeuroScan的连接,我使用的是curry8的协议,NeuroScan36导联(不是64导联,此处有影响吗?),在ns.start_acq()里,会进行两次self.recv(​),其中第一次self.recv(​)可以正常运行,b_header ={bytes} b'DATA\x00 x01 x00 x01 x00 x00 x00 x00’,self._unpack_header(b_header)解析出来header = tuple <class 'tuple'>: ('DATA', 1, 1, 0),由于pkf_size=0,不从socket读取数据;但是第二次self.recv(​)运行异常,会陷入socket循环等待,主要原因是b_header ={bytes} b'x00 x00 x00 x04 x00 x00 x00 x00"x03 x00 x00',(此处有些异常,在第九位出现了双引号),self._unpack_header(b_header)解析出来为header = tuple <class 'tuple'>:( x00 x00 x00 x04', 0, 0, 570621952),其pkf_size=570621952,因此会从socket读取570621952数据,但是此时socket中并没有这么多数据,而且因为之前self.set_timeout(None),没有设置过期时间,因此陷入长时间的等待,请问这个问题是因为36导联或者是数据协议不同而产生的吗?
   非常感谢您的耐心阅读,我将会非常感谢您的回答!
@Zvivian
Copy link
Contributor

Zvivian commented Dec 27, 2022

很高兴您使用MetaBCI平台进行实验,我是负责范式与在线部分的人员,关于您的问题做以下解答:
第一个问题,具体在线流程为:首先打开NeuroScan“serve”模式;然后运行在线demo-Online_mi.py,等待程序终端内打印出模型正确率,出现“Connected”提示,此时NeuroScan采集软件显示脑电波形;最后运行范式demo-stim_demo.py,online=True。这是因为在线demo-Online_mi.py中定义了StreamInfo的连接,用于在线与范式之间的反馈传输。
第二个问题,是否将在线demo-Online_mi.py里NeuroScan的num_chans设置为36,如果已经设置,可能是由于数据协议不同。
希望对您的问题有所帮助!

@Houxy0522
Copy link
Author

您好,非常感谢贵团队的回复。按照您上次提供的在线操作流程,在运行Online_mi.py时,发现MetaBCI平台(此处作为client)和采集软件curry8(此处作为NeuroScan的sever)无法正常通信的情况,分析后发现是因为MetaBCI平台和curry8所使用的传输协议不同,MetaBCI平台使用12byte数据作为控制命令,并将12byte数据解析为(ch_id,w_code,w_request,pkg_size),但curry8使用20byte数据作为控制命令,并将20byte数据解析为(m_chId,m_wCode,m_wRequest,m_unSample,m_dwSize,m_dwSizeUncompressed),其中前三项长度和意义可以一一匹配,但第四项不同,因此,在MetaBCI平台和curry8进行指令交互时,会出现命令解析错误,导致scoket陷入长时间等待。请问贵团队使用的是什么采集软件?如果是curry8,想向您请教一下curry8的配置; 如果不是curry8,因为传输协议不同造成上述问题,那我使用时,需要修改的部分有哪些呢?amplifiers.py中的指令集_COMMANDS和接受函数recv()吗?

@ch-MEIJIE
Copy link
Collaborator

您好,如果还感兴趣,我最近合并了一个新的PR,里面包含了对curry 8在线协议的支持。
但是我这里没有curry 8的license,因此无法对这部分代码进行测试,如果可以想请你帮忙测试,有bug烦请沟通~~

@a1848580190
Copy link

您好,请问您现在解决这个问题了吗?我最近也碰到了得不到TCP/IP传输的数据,方便加个联系方式讨论一下吗?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants