A suitable application of OpenVibe?
A suitable application of OpenVibe?
Hi All,
Just a quick question to double check my initial research.
I currently have a TMSi Porti device and would like to capture and process EMG (and other data GSR etc which does not require processing) data for hand opening/closing for amputees (which I asume would require classification within OpenVibe designer) to be sent out via VRPN to Vizard from WorldViz to open/close a virtual hand (which works using a camera system at the moment).
I know if I can get the EMG signals into OpenVibe and classified I will be fine, but just wanted to double check if this type of classification would be possible in real time and that the general idea doesn't sound too crazy.
Many thanks in advance,
Peter
Just a quick question to double check my initial research.
I currently have a TMSi Porti device and would like to capture and process EMG (and other data GSR etc which does not require processing) data for hand opening/closing for amputees (which I asume would require classification within OpenVibe designer) to be sent out via VRPN to Vizard from WorldViz to open/close a virtual hand (which works using a camera system at the moment).
I know if I can get the EMG signals into OpenVibe and classified I will be fine, but just wanted to double check if this type of classification would be possible in real time and that the general idea doesn't sound too crazy.
Many thanks in advance,
Peter
Re: A suitable application of OpenVibe?
It sounds fine to me. I have not done it with EMG, but I have a similar project in mind.
Question is whether your amplifier is supported by OpenVibe.
Yes, you can output the result with VRPN to another application - we do that all the time. We use OpenVibe for the algorithmic part and we have another application that stimulates the user and provides him with real-time feedback (through VRPN from OpenVibe). This application is the front-end.
Classification is OK with LDA - both train/online. For SVM I am not sure (SVM might take longer time to train).
You can try do the something like in the motor imagery scenario in OpenVibe.
So, go ahead
Question is whether your amplifier is supported by OpenVibe.
Yes, you can output the result with VRPN to another application - we do that all the time. We use OpenVibe for the algorithmic part and we have another application that stimulates the user and provides him with real-time feedback (through VRPN from OpenVibe). This application is the front-end.
Classification is OK with LDA - both train/online. For SVM I am not sure (SVM might take longer time to train).
You can try do the something like in the motor imagery scenario in OpenVibe.
So, go ahead
Last edited by toncho11 on Tue Jul 30, 2013 9:00 am, edited 1 time in total.
Re: A suitable application of OpenVibe?
Many thanks for the reply.toncho11 wrote:It sounds fine to me. I have not done it with EMG, but I have a similar project in mind.
Question is whether your amplifier is supported by OpenVibe.
Yes, you can output the result with VRPN to another application - we do that all the time. We use OpenVibe for the algorithmic part and we have another application that stimulate the user and provides him with real-time feedback (through VRPN from OpenVibe). This application is the front-end.
Classification is OK with LDA - both train/online. For SVM I am not sure (SVM might take longer to train).
You can try do the something like in the motor imagery scenario in OpenVibe.
So, go ahead
Thankfully my amplifier is supported and stable for OpenVibe, I might have to give it another try since last time I tried it I couldn't get it to connect to the acquisition server.
It sounds like LDA will work fine, I have some experience using SVM so I'll read up on LDA.
I'll post any results etc if it helps the community.
Many thanks again.
Re: A suitable application of OpenVibe?
I should add we are using the TMSi Porti (32 channel) device, it might take some playing around with but should work out the box with OpenVibe.
Re: A suitable application of OpenVibe?
Dear pwsnow,
the TMSi Porti32 device works perfectly well with OpenViBE, and it has already been used at Inria for EMG recording, no crazy idea here...
As to the classifcation of EMG, you will likely have to create dedicated processing pipelines, the classifier is not alone for this task and different classifiers usually give sensibly similar results. The SVM is indeed longer to train than LDA but you might have slightly better results with it. Other classifiers might be implemented as well.
Porti32 is a good device for both EEG and EMG
Have fun !
Yann
the TMSi Porti32 device works perfectly well with OpenViBE, and it has already been used at Inria for EMG recording, no crazy idea here...
As to the classifcation of EMG, you will likely have to create dedicated processing pipelines, the classifier is not alone for this task and different classifiers usually give sensibly similar results. The SVM is indeed longer to train than LDA but you might have slightly better results with it. Other classifiers might be implemented as well.
Porti32 is a good device for both EEG and EMG
Have fun !
Yann
Re: A suitable application of OpenVibe?
Thanks for the confirmationyrenard wrote:Dear pwsnow,
the TMSi Porti32 device works perfectly well with OpenViBE, and it has already been used at Inria for EMG recording, no crazy idea here...
As to the classifcation of EMG, you will likely have to create dedicated processing pipelines, the classifier is not alone for this task and different classifiers usually give sensibly similar results. The SVM is indeed longer to train than LDA but you might have slightly better results with it. Other classifiers might be implemented as well.
Porti32 is a good device for both EEG and EMG
Have fun !
Yann
Are you using the MindMedia Nexus32B drivers? I keep getting connection failing messages with them.
I did consider using the FieldTrip drivers as a backup.
I'm using the lastest version of OpenVibe too.
Re: A suitable application of OpenVibe?
Just to give an update,
I think the current release of OpenVibe doesn't suppor the driver of the TMSi Porti32 we recieved from TMSi.
I get the usual error when trying to play on the acquisition server (same goes when using the TMSI Driver but it doesn't connect):
[ INF ] Connecting to device [MindMedia NeXus32B]...
[ INF ] Connection succeeded!
[ INF ] Staring the acquisition...
[ ERROR ] Could not start acquisition with NeXus API
[ ERROR ] Starting failed!
[ INF ] Stoping the acquisition
We recieved the unit early this year but the date stamp of the TmsiSDK.dll is early 2012.
Guess I'll modify the existing driver to create a new driver. When talking to TMSi a while back about us writing a Python plug in for our Porti32 device they did mention some things have changed and certain steps/changes need to be implemented.
yrenard, how old is your Porti32 device?
EDIT: I should add I have tried connecting the device on two separate machines, one 64 bit one 32bit with no luck too.
I think the current release of OpenVibe doesn't suppor the driver of the TMSi Porti32 we recieved from TMSi.
I get the usual error when trying to play on the acquisition server (same goes when using the TMSI Driver but it doesn't connect):
[ INF ] Connecting to device [MindMedia NeXus32B]...
[ INF ] Connection succeeded!
[ INF ] Staring the acquisition...
[ ERROR ] Could not start acquisition with NeXus API
[ ERROR ] Starting failed!
[ INF ] Stoping the acquisition
We recieved the unit early this year but the date stamp of the TmsiSDK.dll is early 2012.
Guess I'll modify the existing driver to create a new driver. When talking to TMSi a while back about us writing a Python plug in for our Porti32 device they did mention some things have changed and certain steps/changes need to be implemented.
yrenard, how old is your Porti32 device?
EDIT: I should add I have tried connecting the device on two separate machines, one 64 bit one 32bit with no luck too.
Re: A suitable application of OpenVibe?
yrenard,
I've exported the dll file of the Porti device (I'm writing a driver for it now) is this similar to the content of your dll file?
I'm trying to compile the source on Visual Studio but have run into a problem, I'll see if I can get that fixed.
I've looked at the source code for both the Mind Media NeXus32B & the TMSi Refa32B drivers and the methods mentioned above are different. I thought the Porti32 box was a clone of the Mind Media NeXus32B?
Peter
EDIT: It turns out that our version of the driver is 7, I believe that the driver written for the current version of OpenVibe is 6. Explains why my device doesn't work. Well at this rate at least my new driver will contribute to the community
I've exported the dll file of the Porti device (I'm writing a driver for it now) is this similar to the content of your dll file?
Code: Select all
Function Name Address Relative Address Ordinal Filename Full Path Type
ClassInstall 0x0000000180007460 0x00007460 1 (0x1) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
Close 0x0000000180007c70 0x00007c70 15 (0xf) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
CloseCardFile 0x0000000180009890 0x00009890 23 (0x17) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
ConvertSignalFormat 0x0000000180008c30 0x00008c30 40 (0x28) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
DeviceFeature 0x00000001800086c0 0x000086c0 19 (0x13) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
Free 0x0000000180007470 0x00007470 8 (0x8) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
FreeDeviceList 0x0000000180007740 0x00007740 13 (0xd) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetBufferInfo 0x00000001800081c0 0x000081c0 48 (0x30) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetCardFileList 0x0000000180009330 0x00009330 26 (0x1a) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetCardFileSamples 0x0000000180009910 0x00009910 24 (0x18) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetCardFileSignalFormat 0x00000001800095e0 0x000095e0 28 (0x1c) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetConnectionProperties 0x0000000180009250 0x00009250 21 (0x15) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetDeviceList 0x00000001800075d0 0x000075d0 12 (0xc) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetErrorCode 0x00000001800092e0 0x000092e0 20 (0x14) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetErrorCodeMessage 0x0000000180009300 0x00009300 2 (0x2) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetExtFrontEndInfo 0x000000018000a020 0x0000a020 25 (0x19) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetFrontEndInfo 0x00000001800091d0 0x000091d0 3 (0x3) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetOEMData 0x000000018000a820 0x0000a820 46 (0x2e) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetOEMSize 0x000000018000a630 0x0000a630 44 (0x2c) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetRandomKey 0x000000018000a380 0x0000a380 42 (0x2a) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetRecordingConfiguration 0x0000000180009bd0 0x00009bd0 30 (0x1e) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetRevision 0x000000018000a360 0x0000a360 35 (0x23) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetRtcAlarmTime 0x0000000180008fb0 0x00008fb0 39 (0x27) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetRtcTime 0x0000000180008e20 0x00008e20 37 (0x25) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetSamples 0x0000000180008210 0x00008210 10 (0xa) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
GetSignalFormat 0x0000000180008a70 0x00008a70 16 (0x10) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
LibraryExit 0x0000000180007d50 0x00007d50 5 (0x5) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
LibraryInit 0x0000000180007490 0x00007490 4 (0x4) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
Open 0x0000000180007770 0x00007770 14 (0xe) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
OpenCardFile 0x0000000180009450 0x00009450 29 (0x1d) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
OpenFirstDevice 0x00000001800079a0 0x000079a0 47 (0x2f) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
ResetDevice 0x0000000180008c00 0x00008c00 18 (0x12) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
SetMeasuringMode 0x0000000180008410 0x00008410 17 (0x11) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
SetOEMData 0x000000018000a6c0 0x0000a6c0 45 (0x2d) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
SetRecordingConfiguration 0x0000000180009de0 0x00009de0 31 (0x1f) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
SetRefCalculation 0x0000000180009ba0 0x00009ba0 36 (0x24) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
SetRtcAlarmTime 0x0000000180008ec0 0x00008ec0 38 (0x26) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
SetRtcTime 0x0000000180008d60 0x00008d60 11 (0xb) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
SetSignalBuffer 0x0000000180007fe0 0x00007fe0 9 (0x9) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
SetStorageMode 0x0000000180007e10 0x00007e10 49 (0x31) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
Start 0x0000000180007e30 0x00007e30 6 (0x6) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
StartCardFile 0x0000000180009810 0x00009810 22 (0x16) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
Stop 0x0000000180007f30 0x00007f30 7 (0x7) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
StopCardFile 0x0000000180009880 0x00009880 27 (0x1b) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
TMSiFlashFirmware 0x000000018000a1e0 0x0000a1e0 33 (0x21) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
TMSiGetFirmwareStatus 0x000000018000a2f0 0x0000a2f0 34 (0x22) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
TMSIRawData 0x000000018000a980 0x0000a980 41 (0x29) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
TMSISendDataBlock 0x00000001800090c0 0x000090c0 32 (0x20) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
UCLGetBufferInfo 0x000000018000134c 0x0000134c 50 (0x32) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
UCLGetUsbDeviceList 0x00000001800013a4 0x000013a4 51 (0x33) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
UCLOpenFile 0x00000001800011a8 0x000011a8 52 (0x34) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
UCLOpenUSBDevice 0x00000001800015c0 0x000015c0 53 (0x35) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
UCLReadCirculairBuffer 0x00000001800012f4 0x000012f4 54 (0x36) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
UCLStartIsoStream 0x00000001800012bc 0x000012bc 55 (0x37) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
UCLStopIsoStream 0x00000001800012d8 0x000012d8 56 (0x38) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
UnlockFrontEnd 0x000000018000a470 0x0000a470 43 (0x2b) TmsiSDK.dll C:\Dev\TmsiSDK.dll Exported Function
I've looked at the source code for both the Mind Media NeXus32B & the TMSi Refa32B drivers and the methods mentioned above are different. I thought the Porti32 box was a clone of the Mind Media NeXus32B?
Peter
EDIT: It turns out that our version of the driver is 7, I believe that the driver written for the current version of OpenVibe is 6. Explains why my device doesn't work. Well at this rate at least my new driver will contribute to the community
Re: A suitable application of OpenVibe?
Dear Peter
the porti32 and nexus32 are identical devices.
the nexus32 driver has been built by mindmedia in 2006 or so. it might be possible to have a new build along to the latest TMSi SDK from them if needed.
the refa32 driver has been built by bpayan at Inria in 2009 or so. it might be possible to grab the source code or have a new build along to the latest TMSi SDK from his former team if needed. Laurent Bougrain shall be contacted for this I believe.
Hope this helps,
Best regards,
Yann
the porti32 and nexus32 are identical devices.
the nexus32 driver has been built by mindmedia in 2006 or so. it might be possible to have a new build along to the latest TMSi SDK from them if needed.
the refa32 driver has been built by bpayan at Inria in 2009 or so. it might be possible to grab the source code or have a new build along to the latest TMSi SDK from his former team if needed. Laurent Bougrain shall be contacted for this I believe.
Hope this helps,
Best regards,
Yann
Re: A suitable application of OpenVibe?
Many thanks, that is what I have been doing. v7 of the TMSi driver is completely rewritten and lots of steps needed in v6 (current OpenVibe drivers) have been taken out. This is partly a good idea since so long as the device is connected (Wifi/UBS/Bluetooth) it is automatically connected to and not via the registry.yrenard wrote:Dear Peter
the porti32 and nexus32 are identical devices.
the nexus32 driver has been built by mindmedia in 2006 or so. it might be possible to have a new build along to the latest TMSi SDK from them if needed.
the refa32 driver has been built by bpayan at Inria in 2009 or so. it might be possible to grab the source code or have a new build along to the latest TMSi SDK from his former team if needed. Laurent Bougrain shall be contacted for this I believe.
Hope this helps,
Best regards,
Yann
I'm half way through writing the driver so once I have tested it I'll write some quick documentation and it will be ready for the community to use
Re: A suitable application of OpenVibe?
Hi Yann,yrenard wrote:Dear pwsnow,
the TMSi Porti32 device works perfectly well with OpenViBE, and it has already been used at Inria for EMG recording, no crazy idea here...
As to the classifcation of EMG, you will likely have to create dedicated processing pipelines, the classifier is not alone for this task and different classifiers usually give sensibly similar results. The SVM is indeed longer to train than LDA but you might have slightly better results with it. Other classifiers might be implemented as well.
Porti32 is a good device for both EEG and EMG
Have fun !
Yann
Is there any documentation for creating dedicated processing pipelines in OpenVibe?
Regards,
Peter
-
- Posts: 112
- Joined: Sun Mar 14, 2010 12:58 pm
Re: A suitable application of OpenVibe?
Hello,
I don't know exactly what kind of EMG processing you would like to do, but there are already a number of generic signal processing boxes in OpenVIBE (see http://openvibe.inria.fr/documentation/ ... ithms.html), to filter the signals, apply basic mathematical operations on it, classify it, etc. So there are probably enough boxes available to already perform some form of EMG processing (provided there is already a driver to read your EMG signals in OpenViBE - if not you will need to create one for your EMG device, see http://openvibe.inria.fr/tutorial-creat ... on-server/). Could you be more specific on what kind of processing you would like to achieve?
I hope this helps,
Best regards,
Fabien
I don't know exactly what kind of EMG processing you would like to do, but there are already a number of generic signal processing boxes in OpenVIBE (see http://openvibe.inria.fr/documentation/ ... ithms.html), to filter the signals, apply basic mathematical operations on it, classify it, etc. So there are probably enough boxes available to already perform some form of EMG processing (provided there is already a driver to read your EMG signals in OpenViBE - if not you will need to create one for your EMG device, see http://openvibe.inria.fr/tutorial-creat ... on-server/). Could you be more specific on what kind of processing you would like to achieve?
I hope this helps,
Best regards,
Fabien
Re: A suitable application of OpenVibe?
Apologies for the extremely long delay in replying.
Progress has been made to using the TMSi Porti 32 and EMG.
Thanks to the recent drivers the acquisition from the amp is perfect.
Using this report as a guideline http://buck.ugent.be/fulltxt/RUG01/001/ ... 001_AC.pdf we have managed to collect the data and clasify it (to a point, the report uses LDA, which gives me error messages about training failed via crashing but I can only get SVM working with 50% accuracy). Just having problems with the online classifier.
I have managed to get the VRPN working with our own external software (both data from our EMG recordings & from the demo applications which come with OpenVibe).
I guess its a problem with the data being classified incorrectly since I'm basing the scenairos off of the paper which uses LDA and using SVM outputs 0.5 This is flagged on the BCI motor imagery demo scenairos shifting the value.
Can anyone point me in the right direction, since I know EMG can be used in OpenVibe? It will be great to get basic EMG working online streaming via VRPN to show open and close. Once this is done I can work on our goal of adding more complex feature extraction since we want to use this EMG signal to detect grasp and release in a amputated limb.
I am continuing reading more papers based on EMG applied to grasp & release, just hard translating prior work to OpenVibe.
Many thanks, sorry for the lack of replies!
Peter
Progress has been made to using the TMSi Porti 32 and EMG.
Thanks to the recent drivers the acquisition from the amp is perfect.
Using this report as a guideline http://buck.ugent.be/fulltxt/RUG01/001/ ... 001_AC.pdf we have managed to collect the data and clasify it (to a point, the report uses LDA, which gives me error messages about training failed via crashing but I can only get SVM working with 50% accuracy). Just having problems with the online classifier.
I have managed to get the VRPN working with our own external software (both data from our EMG recordings & from the demo applications which come with OpenVibe).
I guess its a problem with the data being classified incorrectly since I'm basing the scenairos off of the paper which uses LDA and using SVM outputs 0.5 This is flagged on the BCI motor imagery demo scenairos shifting the value.
Can anyone point me in the right direction, since I know EMG can be used in OpenVibe? It will be great to get basic EMG working online streaming via VRPN to show open and close. Once this is done I can work on our goal of adding more complex feature extraction since we want to use this EMG signal to detect grasp and release in a amputated limb.
I am continuing reading more papers based on EMG applied to grasp & release, just hard translating prior work to OpenVibe.
Many thanks, sorry for the lack of replies!
Peter
Re: A suitable application of OpenVibe?
Just a quick question, whilst looking at the class descriptions on the Configure Graz Motor Imagery BCI Stimulator settings I came across "OVTK_GDF_Artifact_EMG". Could I not use this as a class?
-
- Posts: 112
- Joined: Sun Mar 14, 2010 12:58 pm
Re: A suitable application of OpenVibe?
Hi There,
Good to now you are making progress here!
Could you please be more specific about the problem you have with the online classifier? Maybe you can send us your scenario so we can have a look at them and see what may be wrong?
I guess that if you have an error/warning message, that could be an issue indeed.
Regarding the "OVTK_GDF_Artifact_EMG" you can indeed use that as a class label. In fact you can use any stimulation as the class label.
best,
Fabien
Good to now you are making progress here!
Could you please be more specific about the problem you have with the online classifier? Maybe you can send us your scenario so we can have a look at them and see what may be wrong?
I guess that if you have an error/warning message, that could be an issue indeed.
Regarding the "OVTK_GDF_Artifact_EMG" you can indeed use that as a class label. In fact you can use any stimulation as the class label.
best,
Fabien