Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:aml:lab4 [2013/10/20 11:46]
esimon
pl:dydaktyka:aml:lab4 [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ====== Dostęp do sensorów ====== ====== Dostęp do sensorów ======
 +
 +===== Sensor Manager =====
 +
 +Do **wybranego** projektu: ​
 +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.
 +
 +
 +
 +
 +===== Filtrowanie danych =====
 +
 +Dla danych pobieranych z sensorów urządzenia zaimplementuj filtr Kalmana.
 +Poszczególne parametry tego filtra powinny być aktualizowane zgodnie z formułami podanymi poniżej:
 <​code>​ <​code>​
-//​implementacja filtru kalmana ​ +x = x 
-//analiza danych z akcelerometru+p = p + q; 
 + 
 +k = p (p + r); 
 +x = x + k * (measurement – x); 
 +p = (1 – k) * p;
 </​code>​ </​code>​
 +
 +Gdzie:
 +  * x - filtrowana dana
 +  * p - szacowany błąd
 +  * k - wzmocnienie Kalmana (tzw. //Kalman Gain//)
 +  * r - szum pomiaru
 +  * q - szum przetwarzania
 +
 +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]].
 +
 +
 +
 +
 +
pl/dydaktyka/aml/lab4.1382262373.txt.gz · ostatnio zmienione: 2019/06/27 15:51 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0