Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2015:bio-arm

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2015:bio-arm [2016/01/17 22:45]
Aleš Pohludka
2015:bio-arm [2016/01/18 00:18] (aktuální)
Aleš Pohludka [Demonstrační video a diskuze]
Řádek 18: Řádek 18:
 {{ :​2015:​bio-arm:​elektrody.jpg |Ukázka elektrody}} {{ :​2015:​bio-arm:​elektrody.jpg |Ukázka elektrody}}
     Obr. 2: Ukázka elektrody     Obr. 2: Ukázka elektrody
-{{ :​2015:​bio-arm:​biopack_ekg.jpg?​200 |Měřící jednotka}}+{{ :​2015:​bio-arm:​biopack_ekg.jpg?​400 |Měřící jednotka}}
     Obr. 3: Měřící jednotka     Obr. 3: Měřící jednotka
 {{ :​2015:​bio-arm:​procesor.png |Vývojový kit s FRDM-K64F }} {{ :​2015:​bio-arm:​procesor.png |Vývojový kit s FRDM-K64F }}
Řádek 24: Řádek 24:
 {{ :​2015:​bio-arm:​Set_popis.jpg |Pracovní plocha }} {{ :​2015:​bio-arm:​Set_popis.jpg |Pracovní plocha }}
     Obr. 5: Pracovní plocha ​         Obr. 5: Pracovní plocha ​    
-{{ :​2015:​bio-arm:​EMG.gif?​400 ​|Ukázka naměřeného EMG signálu }}+{{ :​2015:​bio-arm:​emg.png |Ukázka naměřeného EMG signálu }}
     Obr. 6: Ukázka naměřeného EMG signálu ​   ​     Obr. 6: Ukázka naměřeného EMG signálu ​   ​
 ===== Software =====  ===== Software ===== 
 ==== Filtrace ====    ==== Filtrace ====   
 Filtrace obou EMG signálů je realizována pomocí IIR charakteristice založené na Butterworth pásmové propusti s mezními frekvencemi 20 a 50 Hz. Čtení i filtrování je po jednom vzorku v každé iteraci smyčky ve které je nastaven wait na 1 ms čímž je určena vzorkovací frekvece. Neni to tedy přesně 1 kHz, ale vzhledem k jednoduchosti příkazů ve smyčce dostatečně blízko této hodnotě. ​ Filtrace obou EMG signálů je realizována pomocí IIR charakteristice založené na Butterworth pásmové propusti s mezními frekvencemi 20 a 50 Hz. Čtení i filtrování je po jednom vzorku v každé iteraci smyčky ve které je nastaven wait na 1 ms čímž je určena vzorkovací frekvece. Neni to tedy přesně 1 kHz, ale vzhledem k jednoduchosti příkazů ve smyčce dostatečně blízko této hodnotě. ​
 +
 Funkce pro filtraci byly vygenerovány na stránce [[http://​www.micromodeler.com/​dsp/​]]. Je zde možné vybrat typ filtru, různými způsoby upravit jeho charakteritisku a pak použít vygenerovanou hlavičku a funkce. Hlavičkový soubor se pouze připojí a funkce jsou nakopírovány na konci main.cpp programu. Ve free verzi je u IIR filtrů možné generovat kód pouze pro filtry do 4. řádu. ​ Funkce pro filtraci byly vygenerovány na stránce [[http://​www.micromodeler.com/​dsp/​]]. Je zde možné vybrat typ filtru, různými způsoby upravit jeho charakteritisku a pak použít vygenerovanou hlavičku a funkce. Hlavičkový soubor se pouze připojí a funkce jsou nakopírovány na konci main.cpp programu. Ve free verzi je u IIR filtrů možné generovat kód pouze pro filtry do 4. řádu. ​
 +
 +Odkaz na interaktivní vytváření filtrů Micro modeler byl získán ze stránky [[https://​community.arm.com/​groups/​embedded/​blog/​2014/​02/​04/​introduction-to-digital-filters-2]] odkud taky pochází inspirace pro jejich použití. ​
 {{ :​2015:​bio-arm:​prenosovka.png?​800 |Přenosová charakteristika filtru}} {{ :​2015:​bio-arm:​prenosovka.png?​800 |Přenosová charakteristika filtru}}
     Obr. 7: Přenosová charakteristika filtru     Obr. 7: Přenosová charakteristika filtru
Řádek 80: Řádek 83:
 </​code>​ </​code>​
 ==== Vyhodnocovací fáze ==== ==== Vyhodnocovací fáze ====
-V této fázi program začíná kontinuálně meřit a vyhodnocovat naměřená data s oknem 100 vzorků. Na datech je provedena obálka podobně jako v učící fázi. Následuje kritérium, kdy se získaná hodnota porovná s prahy. Jsou-li hodnoty větší, rozsvítí se příslušná led a do čítače s rozsahem 0 až 400 hodnot pro oba signály se přičte 1 pokud již nejsou na maximální hodnotě. Jsou-li hodnoty menší, led zhasne a z čítače se odečte 1 pokud není hodnota 0. Oba signály používají stejnou proměnnou (procenta), biceps je kodován po jednotkách,​ předloktí po tisících. Reálná maximální hodnota je tak 400400.+V této fázi program začíná ​v nekonečné smyčce ​kontinuálně meřit a vyhodnocovat naměřená data s oknem 100 vzorků. Na datech je provedena obálka podobně jako v učící fázi. Následuje kritérium, kdy se získaná hodnota porovná s prahy. Jsou-li hodnoty větší, rozsvítí se příslušná led a do čítače s rozsahem 0 až 400 hodnot pro oba signály se přičte 1 pokud již nejsou na maximální hodnotě. Jsou-li hodnoty menší, led zhasne a z čítače se odečte 1 pokud není hodnota 0. Oba signály používají stejnou proměnnou (procenta), biceps je kodován po jednotkách,​ předloktí po tisících. Reálná maximální hodnota je tak 400400
 + 
 +Jelikož při zvedání ruky bicepsem vzniká signál, který je relativně dobře čitelný i na svodech předloktí,​ je vytvořena pojistka, při které se vyhodnocuje zda je biceps aktivní. Je-li aktivní, pak se práh pro aktuální vzorek otočení zvýší trojnásobně.
 <code c> <code c>
 led=1; ​                           //zhasnuti led indikujici start mereni led=1; ​                           //zhasnuti led indikujici start mereni
Řádek 176: Řádek 181:
 } }
 </​code>​ </​code>​
 +{{ :​2015:​bio-arm:​emgOO.png |Ukázka vyhodnocení dle prahu v MATLABu, hodnota 20 odpovídá aktivnímu otáčení při aktivním bicepsu}}
 +    Obr. 8: Ukázka vyhodnocení dle prahu v MATLABu, hodnota 20 odpovídá aktivnímu otáčení při aktivním bicepsu
 ==== Zobrazení stavu ==== ==== Zobrazení stavu ====
 Na sériovou linku se posílá každá 10. hodnota stavu. Ta je načtena programem "​serialchart"​ pro vykreslování hodnot v čase. Program je volně dostupný z [[https://​code.google.com/​p/​serialchart/​]]. Data lze rovněž podobným způsobem vyhodnocovat pomocí MATLABu: ​ Na sériovou linku se posílá každá 10. hodnota stavu. Ta je načtena programem "​serialchart"​ pro vykreslování hodnot v čase. Program je volně dostupný z [[https://​code.google.com/​p/​serialchart/​]]. Data lze rovněž podobným způsobem vyhodnocovat pomocí MATLABu: ​
Řádek 212: Řádek 219:
 </​code>​ </​code>​
  
-Zdrojový kód je dostupný na [[https://​developer.mbed.org/​users/​customer10123/​code/​Rizeni_ruky_K64F/​]]+Zdrojový kód byl napsán pomocí vývojového prostředí mbed.org a je dostupný na [[https://​developer.mbed.org/​users/​customer10123/​code/​Rizeni_ruky_K64F/​]] 
 +===== Demonstrační video a diskuze===== 
 + 
 +{{youtube>​9D8jCWQ_3tU?​medium}} 
 + 
 +Ve videu je možné shlédnout všechny fáze programu, na monitorech signály vstupující do procesoru z bicepsu a předloktí a křivku vyhodnocení stavu funkce bicepsu v čase. Místo rotace ruky lze použít stisk, u kterého je výsledný signál více zřetelný v závislosti na pozici elektrod. 
 + 
 +Učící fáze je naprostou samozřejmostí,​ protože každý uživatel má hodnoty energie EMG signálu odlišné. Signály jsou filtrovány stejným filtrem. V kódu se za sebou pro filtraci střídají jednotlivé hodnoty signálu z bicepsu a předloktí. Původní představa toho, že se hodnoty jednotlivých vstupních kanálů budou mezi sebou hádat se ukázala jako mylná a oba výsledné vyfiltrované signály se jevily jako vyfiltrované skutečně správně. Nemusela se tak psát kopie filtru, který by filtroval druhý kanál, jak se původně smýšlelo.
  
-===== Diskuze ​===== +Hodnotí se pouze zda-li je sval aktivní/​neaktivní a po jakou dobu. Na základě těchto stavů lze pouze hodnotit zda se končetina hýbe k maximální nebo minimální vychýlce tzn. ustálený stav je pouze v maximu nebo minimu. K vychýlce 50% by uživatel musel kontinuálně daný sval stahovat a uvolňovat, výsledný charakter ustáleného pohybu se však jeví spíš jako vibrující kolem 50%, než ustálený stav. Tento postup vyhodnocování se však zdál nejvíce schůdný vzhledem k nevyspytatelnosti EMG signálu. Rychlost pohybu k maximu a minimu je rovněž konstantní,​ avšak v kódu lehce měnitelná vzhledem k použití operátoru %. 
-blabla+===== Závěr ​===== 
 +Cílem projektu bylo realizovat ovládání protetické ruky s pomocí kitu FRDM-K64F a vhodně zobrazovat její pohyb na PC. Výsledný projekt je schopen detekovat EMG signál ze dvou míst a na základě jejich krátkodobých hodnot v čase vyhodnotit a realizovat dva různé pohyby. O tom v jakém stavu vychýlky v čase se zrovna končetina nachází zobrazuje křivka měřených hodnot na PC. Během návrhu se pracovalo se signály z bicepsu a předloktí. V praxi by se však použilo k ovládání jiné místo než předloktí,​ protože člověk, který by chtěl realizovat práci bicepsu by pravděpodobně předloktí neměl. Vhodným vylepšením by bylo vytvořit vlastní zesilovače,​ bylo by tak možné měření provádět kdekoliv s přístupem napájení. Celý algoritmus by se dal dále upravovat k lepšímu a plynulejšímu ovládání.
2015/bio-arm.1453067112.txt.gz · Poslední úprava: 2016/01/17 22:45 autor: Aleš Pohludka