CleverPoint

Dla programistów

Otwarty protokół. Państwa scena, Państwa narzędzia.

CleverPoint 4 komunikuje się w protokole Open Sound Control (OSC) przez UDP — otwartym standardzie z 1997 roku, z bibliotekami dla Unity, Unreal, Pythona, MATLAB-a, Max i większości innych narzędzi w laboratorium. Moduł używa go do komunikacji z komputerem, a komputer — do komunikacji z Państwa sceną. Nic zastrzeżonego do licencjonowania, nic do odtwarzania metodą inżynierii wstecznej.

Dwa połączenia, jeden protokół

Moduł ↔ komputer /Clever/…

Moduł ogłasza się w sieci Wi-Fi, przesyła surowe próbki z licznikiem pakietów i znacznikiem czasu, co pięć sekund raportuje stan akumulatora i sygnału oraz przyjmuje polecenia START, STOP i polecenia rejestrów ADC. EVA robi to za Państwa; zamiast niej może to robić Państwa własny kod.

Scena ↔ komputer /PC/…

Scena VR wysyła jeden ciąg znaków na zdarzenie: która sekcja się rozpoczęła lub zakończyła. EVA zapisuje go w nagraniu obok próbek i odsyła do sceny tętno na żywo, dzięki czemu scenariusz może reagować na osobę w goglach.

Reszta laboratorium

EVA przesyła kanały przez LSL do każdego innego odbiorcy, sterownik MATLAB odczytuje pliki, a CleverLab eksportuje tabele do Excela. Referencyjne funkcje MATLAB-a do obsługi protokołu są dostarczane z urządzeniem.

Oznaczanie sekcji ze sceny

Jeden komunikat OSC, adres /PC/Section, jeden argument tekstowy: nazwa sekcji oraz START lub STOP. Unity z OscJack lub extOSC, Unreal z wbudowaną wtyczką OSC, Python z python-osc — komunikat jest ten sam.

Jeśli wolą Państwo nie ingerować w scenę, operator może ustawiać znaczniki ręcznie w EVA na komputerze w trakcie nagrania. Droga przez OSC sprawia, że są dokładne i nie wymagają ręcznej obsługi.

// Unity, C# (OscJack)
var eva = new OscClient(evaHost, evaPort);
eva.Send("/PC/Section", "Stroop START");
// … zadanie trwa …
eva.Send("/PC/Section", "Stroop STOP");
# Python
from pythonosc.udp_client import SimpleUDPClient
eva = SimpleUDPClient(eva_host, eva_port)
eva.send_message("/PC/Section", "Stroop START")

W sieci to 32 bajty: adres, znacznik typu ,s i ciąg znaków, każde z wyrównaniem do czterech bajtów. Host i port ustawia się w EVA.

Etykiety epizodów w EVA: Highway1, Island1, Height1 z czasami rozpoczęcia i czasem trwania, obok przebiegów z elektrod
Gdzie trafiają znaczniki: etykiety epizodów w EVA.

Tętno z powrotem w trakcie nagrania

EVA wysyła do sceny w trakcie nagrania komunikat /PC/Online/Pulse z jedną liczbą zmiennoprzecinkową: liczbą uderzeń na minutę. Wystarczy subskrypcja za pomocą tej samej biblioteki, a scena może spowolnić scenariusz, podnieść alarm albo po prostu wyświetlić wartość.

# Python
from pythonosc.dispatcher import Dispatcher
from pythonosc.osc_server import BlockingOSCUDPServer

def on_pulse(address, bpm):
    print(bpm)           # np. 64.0

d = Dispatcher()
d.map("/PC/Online/Pulse", on_pulse)
BlockingOSCUDPServer((scene_host, scene_port), d).serve_forever()
Widok online w EVA: przebiegi z elektrod, kardiogram, wykres zmienności, tętno i inne wskaźniki na żywo
Wartości, które EVA oblicza na żywo; do sceny wysyłane jest tętno.

Albo bezpośrednia komunikacja z modułem

Do nagrywania nie potrzebują Państwo naszego oprogramowania. Moduł jest urządzeniem OSC w Państwa sieci Wi-Fi; może nim sterować dowolna biblioteka OSC na dowolnej platformie. Specyfikacja protokołu jest dołączona do urządzenia, a oto ona w całości:

KierunekAdresArgumentyDziałanie
moduł → wszyscy/Clever/ConnectSSID, IP, MAC, RSSI Wi-Fi, akumulator V, akumulator %Rozgłaszanie do nadejścia pierwszego polecenia; potem moduł odpowiada tylko temu hostowi.
moduł → host/Clever/StatusRSSI Wi-Fi, akumulator V, akumulator %Co pięć sekund. Ponowne łączenie i monitorowanie.
host → moduł/Clever/Control/Overall"START" lub "STOP"Uruchomienie lub zatrzymanie strumienia próbek.
moduł → host/Clever/Online/BEP4 × int32, blobLicznik pakietów, sekundy, ułamki sekund, rejestr kanałów (bity 0–7 — włączone kanały, bity 16–23 — odłączenie elektrody), następnie próbki.
host → moduł/Clever/Set/Registers/BEPN × (adres, wartość)Zapis rejestrów ADC: częstotliwość próbkowania, wzmocnienie każdego kanału, wyłączenie zasilania, polaryzacja (bias), wykrywanie odłączenia elektrod.
host → moduł/Clever/Get/Registers/BEPN × adresOdczyt rejestrów; moduł odpowiada na /Clever/Registers/BEP.

Blob z próbkami

Osiem kanałów z przeplotem, 24 bity ze znakiem, big-endian, wprost z 24-bitowego przetwornika ADC: lewa kość jarzmowa, F7, AF3, AF4, F8, prawa kość jarzmowa, wejście zapasowe, EKG. Jeden najmniej znaczący bit to 0,54 µV przy wzmocnieniu równym 1; wartość należy podzielić przez ustawione wzmocnienie kanału. Trzy bajty na próbkę, więc strumień 500 Hz z ośmiu kanałów to 12 kB na sekundę.

Konfiguracje referencyjne

Do specyfikacji dołączone są dwa zestawy rejestrów: 500 Hz dla nakładki VR (kanał 7 wyłączony, wykrywanie odłączenia elektrod na aktywnych kanałach) i 1000 Hz. Częstotliwość lub wzmocnienie zmienia się przez zapis rejestrów; moduł nie przerywa przesyłania.

Referencyjne funkcje MATLAB-a: oscsend, oscparsing i blobBEBToInt, łącznie około 250 linii, obejmują wysyłanie, parsowanie i przeliczanie bloba na mikrowolty.

Okno Device Settings w EVA: tabela rejestrów ADC z polami wyboru bitów i przyciskami odczytu i zapisu
Te same rejestry w widoku EVA.

Co trafia na dysk

  • Każdy kanał z wybraną częstotliwością, jeden zegar, jeden licznik pakietów
  • Znaczniki sekcji ze sceny wraz z ich czasem w nagraniu
  • Stan odłączenia elektrody dla każdego kanału, więc wiadomo, kiedy elektroda odstała od skóry
  • Eksport do Excela z CleverLab; LSL do pracy na żywo

Pobierz przykładowe nagranie →

Menu EVA: Advanced, Send BEP data to LSL
Jeden przełącznik w EVA przesyła kanały przez LSL.

Wbudowany w symulator morski

Novikontas, morski ośrodek szkoleniowy, rejestruje kursantów podczas ćwiczeń na symulatorze. Scenariusz oznacza zdarzenia; instruktorzy widzą, jak organizm każdego kursanta na nie reagował, ćwiczenie po ćwiczeniu.

«Mamy teraz dostęp do kompleksowej, opartej na danych wiedzy o fizjologicznych i psychologicznych reakcjach naszych kursantów.» — Dmitrijs Semjonovs, zastępca dyrektora, Novikontas
Kursant w goglach przy konsoli symulatora statku

Konfiguracja, parowanie przez Wi-Fi i specyfikacja protokołu są w dokumentacji.

Prosimy opowiedzieć nam o Państwa scenariuszu.