Analýza výstupov z gyroskopu a akcelerometra
Z RoboCupTP wiki
Hráči si každý takt servera spracovávajú informácie zo svojich receptorov. Medzi ne patrí aj akcelerometer a gyroskop. Akcelerometer slúži na zobrazenie momentálneho preťaženia v určitom smere, čiže zaznamenáva zmenu iba počas vykonávania pohybu. Gyroskop ukazuje presné natočenie hráča v rámci súradnicovej sústavy a teda poskytuje dáta aj v prípade, že sa hráč práve nepohybuje.
Obidva receptory fungujú na báze klasickej súradnicovej sústavy, takže používajú osi X, Y a Z. Pre akcelerometer ukazujú zrýchlenie tela hráča v smere jeho jednotlivých osí (X – doprava a doľava, Y – dopredu a dozadu, Z – gravitácia a preťaženie smerom nadol). Avšak, dáta z gyroskopu (po patričnej úprave, zobrazenej nižšie) znázorňujú rotáciu polohy hráča okolo jednotlivých osí (X – dopredu a dozadu, Y – doprava a doľava, Z – smer chôdze vzhľadom na pomyselnú zvislú priamku). Z toho vyplýva, že dáta z osi X akcelerometra súvisia s dátami z osi Y gyroskopu a naopak.
Príprava na analýzu
Pre vykonanie analýzy je najskôr potrebné upraviť surové dáta do požadovaného tvaru. Dáta z akcelerometra nám hovoria aktuálnu hodnotu preťaženia v jednom takte, čo je pre nás výhodné. Upraviť potrebujeme dáta z gyroskopu, ktoré zo servera prichádzajú v tvare uhlovej rýchlosti trupu. Najskôr je nutné získať celkovú polohu hráča a potom túto prekonvertovať z radiánov na stupne.
Dáta z akcelerometra
System.out.println(data.accelerometer.getX() + ";" + data.accelerometer.getY() + ";" + data.accelerometer.getZ());
Úprava dát z gyroskopu
rotationX += Math.toRadians(gyroscope.getX() * TIME_STEP);
rotationX = Angles.normalize(rotationX);
rotationY += Math.toRadians(gyroscope.getY() * TIME_STEP);
rotationY = Angles.normalize(rotationY);
rotationZ += Math.toRadians(gyroscope.getZ() * TIME_STEP);
rotationZ = Angles.normalize(rotationZ);
Dáta z gyroskopu
System.out.println(Math.toDegrees(rotationX) + ";" + Math.toDegrees(rotationY) + ";" + Math.toDegrees(rotationZ));
Po takýchto úpravách môžme spustiť pohyb, nazbierané dáta vložiť do tabuľkového procesora a nechať si vykresliť graf.
Čítanie z grafu
Pre účely tohto testu sme použili pohyb walk_fine_fast2_optimized, z tvorivej dielne tímu Číslo 17 žije. Je to chôdza, ktorá sa ale vďaka snahe o veľkú rýchlosť stal nestabilnou a je takmer isté že po niekoľkých desiatkách krokov hráč spadne na chrbát. Zozbierané dáta sme vložili do grafu.
Keďže sa jedná o chôdzu, robot sa nakláňa iba v smere dopredu – dozadu. Preto môžeme zanedbať dáta znázorňujúce nakláňanie sa bokom doprava a doľava (Os X akcelerometra a os Y gyroskopu).
Akcelerometer
Keďže sme zanedbali os, ktorá znázorňuje zrýchlenie doprava a doľava, zostali nám osi znázorňujúce zrýchlenie dopredu a dozadu (žltá krivka) a gravitačné zrýchlenie (fialová krivka). Zvislá červená priamka znázorňuje moment pádu hráča na chrbát.
Z grafu sa dajú vyčítať viaceré zaujímavé informácie o pohybe:
• Hráč sa pri pohybe periodicky kolíše dopredu, čo možno vidieť na mínusovej časti žltej krivky (os Y akcelerometra)
• Pri páde sa hráč zvalí smerom dozadu na chrbát a potom sa dalej hýbe na zemi – krásne vidieť zýšenie momentálneho preťaženia smerom dozadu
• Fialová krivka znázorňujúca zrýchlenie smerom k zemi (aj gravitačné) ukazuje, že počas krokov pravou a ľavou nohou na hráča nepôsobí rovnaké preťaženie – čo sa napokon aj potvrdilo pri skontrolovaní definície dotyčného pohybu, kde fázy pohybu oboch nôh neboli rovnako rýchle (modré a červené šípky). Jednou z nôh hráč výkoná krok rýchlejšie a teda preťaženie na najnižšej polohe nohy je vyššie. Toto môže mať vplyv napríklad na trajektóriu chôdze.
Pre porovnanie uvedieme aj graf, ktorý vznikol pri stabilnej chôdzi. Je možné vidieť, že hodnoty nie sú také rozkývané.
Gyroskop
Aj pri tomto grafe bola vynechaná krivka znázorňujúca náklon doprava a doľava (os Y gyroskopu). Zelená krivka znázorňuje os X gyroskopu (poloha hráča smerom dopredu a dozadu) a svetlomodrá krivka ukazuje otočenie trupu okolo pomyselnej zvislej čiary – osi Z (a síce aj smer chôdze). Zelená krivka sa môže javiť ako chybná, ale zvislé čiary sú spôsobené osciláciou hodnôt medzi prvým a štvrtým kvartálom jednotkovej kružnice (stredná hodnota je 0 stupňov = 360 stupňov).
Pri analýze kriviek vieme vysloviť nasledujúce zistenia:
• Hráč sa počas vykonávania pohybu niekoľko krát výrazne naklonil dopredu (horné štyri znázornené vychýlenia).
• Pred momentom pádu prichádza výrazné vychýlenie dozadu, ktoré už hráč nakoniec nevyvážil (spodné znázornené vychýlenie).
• Jasne vidieť, kedy už hráč leží na chrbte.
• Lineárnou aproximáciou hodnôt otočenia vzhľadom na os Z (svetlomodrá krivka) môžeme vidieť, že hráč sa nepohyboval po rovnej priamke, ale postupne sa vychyľoval do jedne zo strán. Toto sa dá v budúcnosti aplikovať do adaptívnej chôdze, kde hráč sám detekuje zmenu smeru a zmenou niektorých atribútov pohybu ho v reálnom čase upraví.
Aj tu pre porovnanie uvedieme graf, ktorý vznikol pri stabilnej chôdzi. Je možné vidieť, že lineárna aproximácia ukazovateľa smeru chôdze je vodorovná, takže hráč ide rovno dopredu. Zelená krivka ukazujúca pohyb dopredu a dozadu neprestajne osciluje okolo nuly, takže pohyb je stabilný.
Zhrnutie
Týmito analýzami jednotlivých hodnôt z akcelerometra a gyroskopu sme dokázali rozoznať, ktoré hodnoty je nutné sledovať aby sme vedeli predpovedať možný pád robota. Do budúcna sa to dá využiť ako pomôcka pri tvorení pohybov ale aj ako navigácia pri ataptabilnej chôdzi, kde napríklad informácia o zmene smeru chôdze môže pomôcť pri jeho napravení.