Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:aml:lab4 [2013/11/09 13:36] esimon [Filtrowanie danych] |
pl:dydaktyka:aml:lab4 [2019/06/27 15:50] (aktualna) |
===== Sensor Manager ===== | ===== Sensor Manager ===== |
| |
Pobierz aplikację kompas, z repozytorium i przetestuj jej działanie. | Do **wybranego** projektu: |
**Uwaga** Pobierz tylko wersje tagowaną jako RAW, filtrowanie będzie realizowane podczas tego ćwiczenia. | |
Przeanalizuj w jaki sposób realizowany jest dostęp do sensorów i ich przekształcenie w odpowiedni dla obrotu ekranu układ współrzędnych. | Przeanalizuj w jaki sposób realizowany jest dostęp do sensorów i ich przekształcenie w odpowiedni dla obrotu ekranu układ współrzędnych. |
| |
| ==== Mindroid ==== |
| Sklonuj projekt: [[https://github.com/sbobek/mindroid|Mindroid.]] |
| Zbuduj 4-kołowego robota, przeczytaj tutorial dot tego jak sterować robotem za pomocą ruchów telefonu. |
| Przetestuj działanie aplikacji i wykonując kolejne ćwiczenia dotyczące filtrowania danych, spróbuj polepszyć działanie aplikacji, tak by szybciej reagowała na zmiany. |
| |
| ==== Kompas ==== |
| |
| {{:pl:dydaktyka:aml:compas.png?200 |}} |
| Pobierz aplikację kompas, z repozytorium [[https://sbobek@bitbucket.org/sbobek/aml_compas|Bitbucket]] i przetestuj jej działanie. |
| |
| **Uwaga** Pobierz tylko wersje tagowaną jako **RAW**, filtrowanie będzie realizowane podczas tego ćwiczenia. |
| |
| |
| |
* x - filtrowana dana | * x - filtrowana dana |
* p - szacowany błąd | * p - szacowany błąd |
* k - wzmocnienie Klmana (tzw. //Kalman Gain//) | * k - wzmocnienie Kalmana (tzw. //Kalman Gain//) |
* r - szum pomiaru | * r - szum pomiaru |
* q - szum przetwarzania | * q - szum przetwarzania |
| |
Wartości, które należy dobrać, w celu modyfikowania działania filtru to: **p,q** oraz **k**. | Wartości, które należy dobrać, w celu modyfikowania działania filtru to: **q, r** oraz **k**. Wartość **p** nie jest specjalnie istotna, ponieważ jej wartość jest dynamicznie ustalana w procesie filtrowania. |
| |
| Poeksperymentuj z różnymi wartościami i zaobserwuj wyniki. Dla jakich wartości otrzymujesz najlepsze rezultaty? |
| |
| **Uwaga** Dla ułatwienia, poniżej kod filtru kalmana w C: |
| <code c> |
| typedef struct { |
| double q; //process noise covariance |
| double r; //measurement noise covariance |
| double x; //value |
| double p; //estimation error covariance |
| double k; //kalman gain |
| } kalman_state; |
| |
| kalman_state |
| kalman_init(double q, double r, double p, double intial_value) |
| { |
| kalman_state result; |
| result.q = q; |
| result.r = r; |
| result.p = p; |
| result.x = intial_value; |
| |
| return result; |
| } |
| |
| void |
| kalman_update(kalman_state* state, double measurement) |
| { |
| //prediction update |
| //omit x = x |
| state->p = state->p + state->q; |
| |
| //measurement update |
| state->k = state->p / (state->p + state->r); |
| state->x = state->x + state->k * (measurement - state->x); |
| state->p = (1 - state->k) * state->p; |
| } |
| </code> |
| |
| Przykładowe wyjście dla kodu z przykładu powyżej: |
| |
| {{:pl:dydaktyka:aml:kalman-test.png?500|}} |
| |
| //Kod żródłowy, oraz wykresy pochodzą ze strony// [[http://interactive-matter.eu/blog/2009/12/18/filtering-sensor-data-with-a-kalman-filter/|Interactive Matter Lab]] |
| |
| ==== Gotowe do użycia zestawy filtrów ==== |
| Fajne repozytorium: https://github.com/berndporr/iirj |
| |
| ===== Zapis danych do analizy ===== |
| Zacznij pracować nad zapisem danych z **akcelerometru** do bazy danych SQLite, odpowiednio modyfikując klasy z [[.:lab3#baza_danych|Lab 4]]. |
| |
| |
===== Analiza danych ===== | |
//analiza danych z akcelerometru - pobranie, zapisanie do sqlite, analiza w octave (czestotliwosci maksymalnej i minimalnej, amplituda, srednie przyspieszenie, korelacja trzech osi , srednia - jakie?etc.)// | |
| |
| |
| |