Lab 08 - Prosty interfejs HMI
Budowa prostego interfejsu HMI opartego o jednokanałowy sygnał EMG
Wprowadzenie
Dzisiejsze zajęcia są poświęcone budowie prostego interfejsu HMI, wykorzystującego kod stworzony podczas kilku poprzednich zajęć laboratoryjnych i wykorzystany do sterowania ruchem gracza w labiryncie Interfejs będzie umożliwiaj generację 2 komend. np. ruch w lewo i w prawo, które będą określana na podstawie analizy wartości RMS sygnału zarejestrowanego w pojedynczym kanale EMG. Ogólny sposób działania takiego interfejsu ma postać
DO działania prócz wykorzystania elementów opracowanych na poprzednich zajęciach (filtracja wstępna, wyznaczanie cech) potrzebna będzie normalizacja sygnału, pozwalająca wyrazić w procentach strefy aktywności (zakresy wartości RMS)
Normalizacja
Operacja normalizacji jest jednym z podstawowych wymogów skutecznej klasyfikacji. W zakresie analizy sygnału EMG amplituda sygnału EMG zależy od cech osobnicznych, lokalizacji elektrod, oraz parametrów fizycznych kontaktu między elektrodą a skórą. Zazwyczaj, dla uzyskania powtarzalnych efektów sygnał EMG, jest normalizowanny względem maksymalnego skurczy dowolnego, tzn wartości sygnału EMG podczas, której użytkownik generuje maksymalną siłę skurczu (np. zaciska pięść)
Współczynnik normalizujący możemy wyznaczyć osobno dla każdego kanału/mięśnia. Najczęściej wyznacza się wartość RMS w oknie 500ms lub dłuższym (zależnym od czasu trwania skurczu). Jako wartość współczynnika przyjmuje się maksymalną, zaobserwowaną wartość sygnału RMS dla danego kanału. $$ norm_i = max(RMS_i)
$$
normalizacja sygnału: $$ ^{norm}x_i = x_1/norm_i $$
Zadanie
- Wczytaj sygnał MVC, lub zarejestruj sygnał z czujnika Trigno. Rejestracja powinna obejmować:
- wykonanie maksymalnego skurczu (4-8s),
- wykonanie słabego skurczu (4-8s)
- wykonanie umiarkowanie silnego skurczu (4-8s)
Uwaga: Te dane możesz wykorzystać do przygotowania i przetestowania poszczególnych elementów składowych budowanego systemu oraz do wyznaczenia progów.
- Napisz funkcję
norm_emg
normalizującą sygnał emg
= rms(signal_mvc, window=500, stride=100, fs=5120, columns_emg=['EMG_8', 'EMG_9']).max()
norm_coeffs = norm_emg(signal, norm_coeffs, columns_emg=['EMG_8', 'EMG_9']) norm_emg
- Wyznacz współczynnik normalizujący dla danych z sensora Trigno
- Stwórz pipeline integrujący dane z sensora Trigno:
- akwizycja danych
- filtracja
- wyznaczanie rms, pamiętaj, żeby integrować sygnał zawsze o tej samej długości, stąd do gromadzenia danych użyj bufora cyklicznego określając maksymalną długość bufora (
maxlen
) na taka jaka ustawiona jest jako okno funkcji RMS - zastosowanie normalizacji
- klasyfikator w postaci funkcji progowania. Funkcja powinna zwracać 3 wartości:
idle
- 0-30% (lub progi pośrednie) MVCcommand_1
- 30-50% MVCcommand_2
- >60% MVC- zintegrować prostą grę, tak by było możliwe sterowanie za pomocą komend z progowania zintegrowanych w metodzie
Maze.on_execute()