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.
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()
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:
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/BEP
N × adres
Odczyt 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.
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
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
Konfiguracja, parowanie przez Wi-Fi i specyfikacja protokołu są w dokumentacji.