Giter Site home page Giter Site logo

dareplane's Introduction

Dareplane is a modular and broad technology agnostic open source software platform for brain-computer interface research. LSL is used for data communication and TCP sockets for module communication. The platform is designed to be minimalistic and to allow for easy development of custom modules, with minimal overhead of integrating existing code.

Caveat: The platform is in an early alpha stage and is developed by a small group of developers. Although core functionality is implemented and the platform has been used in >20 experimental sessions including simultaneous recording of EEG, ECoG, LFP and other signal modalities, please be aware that bugs are still likely and thorough testing of every setup is required.

The target users are developers of experimental setups who require customized software components, or who just want to have full control over the functionality of data I/O, algorithmic processing, and/or on stimulation and feedback. For this user group, Dareplane aims to provide a minimalistic framework which allows to develop and integrate bespoke modules in a simple way. It is a mind-child of the https://suckless.org/ philosophy and tries to adapt it in a pragmatic manner with research in the focus.

If you are looking for a setup that is more or less ready to use out of the box, you will be better of using a more mature framework which is oriented towards more plug-and-play components. In any case it is good to have a look at the other frameworks section.

The design philosophy of Dareplane

The basic idea of the Dareplane platform is to provide a modular approach for software components used for research of neuro-technology. The design goals are:

  • to provide reusable single purpose modules which can be integrated into a larger system;
  • to be technology agnostic, so that modules can be used with different hardware and developed in different languages;
  • to be minimalistic in terms of constraints and required overhead for integrating existing software into the platform.

The implications of these design goals are:

  • A common channel of communication between modules is required, which should work with a wide range of hardware and software. For Dareplane this is solved by using TCP sockets for module communication. For data transfer, the awesome LSL framework is used.
  • A common protocol for communication is required, which Dareplane implements as string communication using what is referred to as primary commands. This is an arbitray string following by a pipe delimiter and potentially a json payload. Imagine a module for recording EEG data from a single data source. On a high level, a command you would want to use is: STARTRECORDING|{"path":"./mydatafolder/", "file": "myrecoding.xdf"}.

Overview of the Dareplane projects and individual modules

Link Description
dp-strawmam-module a strawman repository as starting point for developing your modules
dp-control-room the central module which combines individual modules to a system
dp-lsl-recording module for interacting with the LSL LabRecorder
dp-mockup-streamer module for creating mock-up streams from files or generating random data
dp-copydraw module to run the CopyDraw - Castano et al. 2019 paradigm
dp-multiband-regression module to perform a multiband regression based on a multichannel data stream
dp-bollinger-control a Bollinger Band control module
dp-ao-communicatio a C++ module interacting with the Alpha Omega's API
dp-ao-stimulator python module to trigger stimulation via dp-ao-communication
dp-arduino-stimulator module to use an Arduino as a mock-up of a neuro-stimulator
dp-picoscope-streamer module to stream data from a Picoscope to LSL
dp-passthrough a simple passthrough Dareplane module for performance testing
dp-threshold-controller a threshold control module with grace periods
dp-cortec-bic soon to be released

For python modules / development

If you are building your modules in python, or using the existing python modules, the dareplane-utils python module will provide some core functionality which most modules will need.

pip install dareplane-utils

The module provides basic functionality around TCP servers, logging, and collecting data from LSL streams.

Control Room module

The control room module is the central piece for composition of modules to a full setup. Modules you need in your experiment are added within a setup configuration file (see ./examples and the documentation in the control room)

Getting started

Refer to the ./examples documents to so see a minimalistic setup and guidance on how to develop your own modules.

Other frameworks

This is a non-exhaustive list of other frameworks which might be more suitable depending on your needs:

dareplane's People

Contributors

matthiasdold avatar

Stargazers

 avatar  avatar Yasuo Kabe avatar Simon Kojima avatar

Watchers

Andreas Meinel avatar Michael Tangermann avatar  avatar  avatar

dareplane's Issues

Connection refused when running dp-mi-paradigm (hello world example)

When spawning up the control_room by calling python -m control_room.main with the config pointing to the dp-mi-paradigm module as in the hello_world example I get the following error:

Screenshot 2023-07-19 at 15 00 23

I have not yet tested it with other paradigm modules involving psychopy, but with the mockup streamer modules this is not a problem.

A quick, though not ideal, fix is to insert a time.sleep of e.g. 1 second where the socket is created (dp-control-room module) in socket.py

Screenshot 2023-07-19 at 15 14 57

This problem is not always reproducible (sometimes connection goes through, and everything runs).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.