EasyEEG BCI переходит на новый программный интерфейс
Вышло новое значимое обновление нейрогарнитуры EasyEEG BCI. Главное нововведение — программный интерфейс UDP, а также некоторые небольшие изменения.
Обзор нововведений:
- Переход на обмен данными по широковещательному UDP протоколу
- Передача кроме ЭЭГ, также частотных диапазонов в JSON
- Ускорение реакции индикатора уровня сигнала
- Небольшие исправления алгоритма спектральной обработки
Основное нововведение — отказ от протокола LSL и переход на UDP. Вообще говоря обычному пользователю это будет все равно, так как технология передачи данных между приложениями внутри системы никак не повлияет на эксплуатацию.
Зато это позволит создать быстрее и эффективнее новые приложения для данной системы. LSL, как показала практика, давал больше вреда чем пользы. Он более тяжелый, да и система безопасности ОС на него порой неадекватно реагировала.
Если он действительно нужен будет, всегда есть возможность создать слой совместимости.
Работа с новым программным интерфейсом UDP
Демонстрация будет на примере Python программы, он базово имеет все для этого и устанавливать ничего больше не надо.
При нажатии на кнопку UDP в приложении начинается широковещание в сеть на порт 2000.
Передает данные теперь в JSON формате. Он позволяет легко манипулировать составом параметров и является практически стандартом сетевого взаимодействия.
Полный пакет данных теперь включает кроме ЭЭГ сигнала и времени между измерениями еще и все частотные характеристики. Поэтому приложению их не надо будет рассчитывать и можно сразу использовать для управления.
Параметр | Тип данных | Описание |
---|---|---|
d | int | время между измерениями в мс |
E | float | значение ЭЭГ, отн.ед. |
d1 | int | дельта диапазон, отн. ед. |
t1 | int | тета1 диапазон, отн. ед. |
t2 | int | тета2 диапазон, % |
a1 | int | альфа1 диапазон, % |
a2 | int | альфа2 диапазон, % |
b1 | int | бета1 диапазон, % |
b2 | int | бета2 диапазон, % |
b3 | int | бета3 диапазон, % |
g1 | int | гамма диапазон, % |
Если кнопка Спектр не нажата спектральные характеристики не передаются!
# Пример программы для получения данных с приложения EasyEEG BCI по протоколу UDP # Совместим с приложением версии выше 2.0 включительно # LabData.ru import socket import json sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) udp_host = '0.0.0.0' udp_port = 2000 sock.bind((udp_host,udp_port)) bandsNames = ['d1','t1','t2','a1','a2','b1','b2','b3','g1'] bands = [0] * 9 t = 0.0 while True: print("Ожидание данных с устройства ...") data,addr = sock.recvfrom(1024) try: dt = json.loads(data.decode())["d"] EEG = json.loads(data.decode())["E"] t += dt except: EEG = 0 dt = 0 try: for bn, Name in enumerate(bandsNames): bands[bn] = json.loads(data.decode())[Name] except: bands = [0] * 9 print(f"EEG= { EEG } time= { t } Bands= " + str(bands))
Данный пример программы будет выложен в открытый доступ в GitHub репозитории EasyEEG BCI LabData.
Кроме этого были сделаны небольшие исправления в части скорости реакции индикатора уровня и точности алгоритма спектрального преобразования.
Видеопрезентация
Приложения будут переводится на работу с UDP интерфейсом, о чем сообщу в ВК и телеграм канале. Также скоро выйдет новое приложение для данной системы, поэтому не забывайте подписываться на канал LabData в видеохостингах RUTUBE и VK-видео (дзен).
(c) Роман В. Исаков, 2021