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: 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
Pobierz aplikację kompas, z repozytorium 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:
x = x
p = p + q;
k = p / (p + r);
x = x + k * (measurement – x);
p = (1 – k) * p;
Gdzie:
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:
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;
}
Przykładowe wyjście dla kodu z przykładu powyżej:
Kod żródłowy, oraz wykresy pochodzą ze strony Interactive Matter Lab
Gotowe do użycia zestawy filtrów
Zapis danych do analizy
Zacznij pracować nad zapisem danych z akcelerometru do bazy danych SQLite, odpowiednio modyfikując klasy z Lab 4.