Przechowuj orientację do tablicy - i porównaj
Chcę osiągnąć:
Chcę, aby użytkownik mógł "rejestrować" ruch iPhone ' a za pomocą żyroskopu. A następnie użytkownik powinien być w stanie odtworzyć ten sam ruch. Wyciągam rzut, rzucam i ziewam używając:
[self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]
withHandler: ^(CMDeviceMotion *motion, NSError *error)
{
CMAttitude *attitude = motion.attitude;
NSLog(@"pitch: %f, roll: %f, yaw: %f]", attitude.pitch, attitude.roll, attitude.yaw);
}];
Myślę, że mógłbym zapisać te wartości w tablicy, jeśli użytkownik jest w trybie rekordów. A kiedy użytkownik próbuje replikować ten ruch, mogę porównać replikowaną tablicę ruchu z nagraną. rzecz czy, Jak mogę porównać dwie tablice w inteligentny sposób?Nigdy nie będą miały dokładnie tych samych wartości, ale mogą być w pewnym sensie takie same.
Czy w ogóle jestem na dobrej drodze?UPDATE: myślę, że może odpowiedź Alis na temat korzystania z DTW mogłaby być dla mnie tutaj właściwą drogą. Ale nie jestem aż tak mądry (widocznie), więc gdyby ktoś mógł mi pomóc w pierwszych krokach z porównaniem do tablic byłbym szczęśliwym człowiekiem!
Dzięki!2 answers
Spróbuj dynamiczne wypaczanie czasu . Oto przykład z tablicami 1D. W bazie mamy już 2 tablice:
Array 1: [5, 3, 1]
Array 2: [1, 3, 5, 8, 8]
Mierzyliśmy [2, 4, 6, 7]
. Która tablica jest najbardziej podobna do nowo mierzonej? Oczywiście druga tablica jest podobna do nowo mierzonej, a pierwsza Nie.
Obliczmy macierze kosztów według tej pracy, podrozdziału 2.1:
D(i,j)=Dist(i,j)+MIN(D(i-1,j),D(i,j-1),D(i-1,j-1))
Tutaj D(i,j)
jest elementem (i,j)
macierzy kosztów, patrz poniżej. Sprawdź Rysunek 3 tego artykułu, aby zobaczyć zastosowanie tej relacji powtarzania. W skrócie: kolumny są obliczane jako pierwsze, począwszy od D(1,1)
; D(0,*)
i D(*,0)
są pozostawione w MIN. Jeśli porównujemy tablice A
i B
, to Dist(i,j)
jest odległością między A[i]
a B[j]
. Po prostu użyłem ABS(A[i]-B[j])
. Macierze kosztów dla tego przykładu:
Dla tablicy 1 mamy 13 jako wynik, dla tablicy 2 mamy 5. Wygrywa niższy wynik, więc najbardziej podobna tablica to tablica 2. Najlepsza ścieżka wypaczania jest zaznaczona na szaro.
To tylko szkic DTW. istnieje wiele problemów, które musisz rozwiązać w rzeczywistych aplikacji. Na przykład użycie offsetu zamiast stałych punktów końcowych lub określenie miar dopasowania: patrz niniejszy artykuł, strona 363, 5. warunki brzegowe i strona 364. Powyższy artykuł zawiera również więcej szczegółów.
Właśnie zauważyłem, że używasz yaw, pitch and roll. po prostu put: don ' t and another reason not to . Czy możesz zamiast tego użyć danych z akcelerometru? "Akcelerometr jest bezpośrednim pomiarem orientacji" (z manuskryptu DCM ) i to jest to, czego potrzebujesz. A co do pytania tc, czy orientacja względem północy ma znaczenie? Chyba nie.
O wiele łatwiej jest porównać wektory przyspieszenia niż orientacje (kąty Eulera, macierze obrotu, czwartorzędy), jak zauważył tc. Jeśli używasz dane przyspieszenia, masz wektory 3 wymiarowe w każdym punkcie czasowym,współrzędne (x,y, Z). Po prostu obliczyłbymDist(i,j)=SQRT((A[i][X]-B[j][X])^2+(A[i][Y]-B[j][Y])^2+(A[i][Z]-B[j][Z])^2)
,
To jest odległość między dwoma punktami.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:32:23
Myślę, że podejście Ali jest ogólnie dobrym rozwiązaniem, ale istnieje ogólny problem o nazwie Blokada gimbal (lub więc dyskusje na ten temat) przy użyciu kątów Eulera, tj. Napotkasz go, gdy zarejestrujesz bardziej złożony ruch trwający dłużej niż kilka kleszczy, a tym samym prowadzący do dużych delt kątowych w różnych kierunkach kątowych.
W skrócie oznacza to, że będziesz miał więcej niż jedną reprezentację matematyczną dla tego samego pozycja tylko w zależności od kolejności ruchów wykonane, aby się tam dostać - i utrata informacji po drugiej stronie. Rozważ samolot latający w powietrzu od lewej do prawej. Oś X jest od lewej do prawej, oś Y wskazuje na powietrze. Następujące dwie sekwencje ruchu prowadzą do tej samej pozycji końcowej, chociaż dojdziesz tam na zupełnie inne sposoby:
Sekwencja A:
- obrót wokół odchylenia +90°
- obrót wokół skoku +90°
Sekwencja B:
- obrót wokół skoku +90°
- obrót wokół rolki +90°
W obu przypadkach twój samolot wskazuje na ziemię i możesz zobaczyć jego dno z twojej pozycji.
Jedynym rozwiązaniem jest uniknięcie kątów Eulera i tym samym komplikowanie sprawy. Quaternions są najlepszym sposobem, aby sobie z tym poradzić, ale zajęło trochę czasu (dla mnie), aby uzyskać wyobrażenie o tej dość abstrakcyjnej reprezentacji. OK, ta odpowiedź nie idzie o krok dalej w odniesieniu do pierwotnego problemu, ale może to pomóc uniknąć marnowania czasu. Może uda Ci się dokonać pewnych zmian koncepcyjnych, aby skonfigurować swój pomysł.
Kay
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:32:23