BCI

Welcome to this new page about my research in Brain Computer Interfaces (BCI). It is the ultimate combination of my passion for neurosurgery / neuroscience, and my passion for information technology. In my first experience with neural engineering, I found it to be an exciting field, and I am looking forward to learn more.

:: LynxMove Qt ::

LynxMove Qt is an open-source and cross-platform software framework for neuroprosthesis control, written in C++ and Qt. It currently supports the LynxMotion robot arms, and has been tested on the AL5D model. The software uses the QextSerialPort library to connect with the serial port (using the USB-to-Serial-Adapter).

The current version (0.1) has been successfully used on Windows 7, Mac OS 10.7 and Ubuntu 12.04 to control the robot arm. The arm can be moved using buttons, sliders, ASCII commands and…. BCI input. The latter is achieved by keyboard input (0-9), which corresponds to a particular type of movement:

0 = Rotate base to left
1 = Rotate base to right
2 = Move shoulder forward
3 = Move shoulder backward
4 = Elbow flexion
5 = Elbow extension
6 = Wrist flexion
7 = Wrist extension
8 = Open gripper
9 = Close gripper

The step size (i.e. amount of movement for each command) can be set between 1 and 300. Note that channels are still hardcoded, using channel 0 up to 4 to connect your robot servos to.

Source code

You can download the source code from the Google Code project page.

I used Qt Creator and the Qt SDK to compile with Visual C++ 2010 Express on Windows, and GCC on Linux and Mac OS X.

I intend to add the source code to a true repository, but have not made up my mind on SVN vs GIT. When I have, I will adapt the link above correspondingly.

Windows

Installation

Compile and run. No additional drivers needed. Select COM port and click the Connect button.

Screenshots

 

Linux

Installation

Ubuntu recognized the USB-to-Serial-Adapter automagically, but did not offer write access to it. Type the following commond, followed by your root password, to get write access:

sudo chmod 666 /dev/ttyUSBx

and replace “x” by the number of your device (in my case, it is ttyUSB0). You can find this by typing:

ls /dev/ttyU*

Then compile and run the application. Select the serial port you just used, and click the Connect button.

Screenshots

 

Mac OS X

Installation

Supposing you use the FTDI USB-to-serial adapter cable, you can download drivers for Mac OS X here. I tested driver version 2.2.17 on an Intel Mac running Mac OS 10.7.4 (aka Lion) and it worked perfectly.

Then compile and run the application. Select the appropriate serial port from the menu and click the Connect button.

Screenshots

 

Future developments on LynxMove Qt

This is on my current To Do list:

  • integrate with BCI2000 and OpenViBE
  • make hardware channels customizable for users

:: MATLAB class ::

Installation

Download the MATLAB class “LynxArm” from the Google Code project page and install into a directory which is in your “path”. You can use it in custom scripts you are developing. Its use should be fairly self-explanatory from the source code and built-in documentation. Some examples:

% Create an instance of the robot arm
arm = LynxArm(‘COM4’);

% Move using BCI key input (0-9); see top of page
arm.moveUsingBCICommand(0);

% Move using ASCII command
arm.moveUsingASCIICommand(‘#0 P300’);

% Disconnect arm from serial port (making it available again)
arm.disconnectFromSerialPort;

Screenshots

 

Contact

See the homepage on how to contact me.

2 Responses to “BCI”

  1. 4chill3s says:

    Hello,

    i use the arduino uno r3 and try to implement a small qt gui with qslider to control one connected servo with this qslider. You know where i get an example with sketch and qt gui to control one servo?

  2. No, I do not know details for this board. You can try using my source code and see how far you can come.

Leave a Reply

Your email address will not be published. Required fields are marked *