Autor Wątek: Analiza chodu, orientacja względna, kwaternion, MATLAB  (Przeczytany 1212 razy)

Offline alexx600

  • Użytkownik

# Listopad 24, 2016, 10:12:27
Dzień Dobry, Mam dość nietypowy problem. Bardziej związany z samymi kwaternionami niż grą, ale może ktoś będzie mi w stanie pomóc
Jestem zobligowany do przeprowadzenia "analizy chodu" przy pomocy czujników inercyjnymi 9DoF i informacji o orientacji.

W chwili obecnej dysponuje dwoma takim sensorami(http://www.shimmersensing.com/shop/shimmer3),które to wysyłają informacje o orientacji w postaci kwaternionu.

Czujniki te zwracają informację o wychyleniach względem 3 osi ( Yaw - kąt między biegunem magnetycznym, a położeniem urządzenia, Pitch-rotacja względem kierunku wektora grawitacji, Roll- rotacje względem kierunku wektora grawitacji).

Sama idea działania czujników wydaje się być dla mnie względnie zrozumiała.
Problem pojawia się natomiast przy umocowaniu sensora na nodze.

Chciałbym założyć, że w przypadku stania pionowego rotacji kończyny jest równa 0 (q=[ 1.0, 0.0, 0.0,0.0]). Kwaternion natomiast zwraca już na wstępie orientację wynikającą z odchylenia od poziomu, oraz orientacji względem bieguna magnetycznego ziemi. Czujnik przyczepiony jest nie do kości, a do mięśni,wszystko jest więc logiczne.


Jeżeli, chcę z mojego kwaternionu kwaternionu przejść do orientacji zerowej, powinienem pomnożyć go przez kwaternion sprzężony.
[ 1.0  0.0  0.0  0.0\right] =q*  * q
Więc zrobiłem coś takiego.
1. Zapisuję aktualną orientacje do zmiennych Q1=q1 oraz Q2=q2.
2. Na ich podstawie Tworzę kwaterniony sprzężone Q1*oraz Q2*
3. Każdą nowo odczytaną wartość wymnażam przez wcześniej obliczone kwaterniony sprzężone
q1=q1* Q1* oraz q2=q2* Q2*
Mnożenia dokonuje za pomocą specjalnej funkcji, gdzie q1 /q2  jest pierwszą z rotacji, a Q1* /Q2*  drugą.
Gdzie: q1 i q2 to kwaterniony odczytane z sensorów
Otrzymuję coś, czego potrzebowałem


Natomiast, gdyby wszystko byłoby idealnie, to nie pisałbym na forum.
Problem pojawia się pdokonywaniu "resetowania" przy różnym obrocie ciała względem bieguna magnetycznego.

Analizuje ruch powolnego podnoszenia palców stopy do góry.
Jeżeli resetowania dokonałem będąc obrócony w biurze:
 "palcami w kierunku okna"

 "palcami w kierunku sciany 1"

"palcami w kierunki drzwi"

"palcami w kierunku sciany 2"


Widać, że tylko w ostatnim przypadku, ruch jest odzwierciedlany w sposób prawidłowy.

Moje pytanie brzmi.
1. W jaki sposób uniknąć niekorzystnego zjawiska występującego podczas "resetowania";
2. Czy kolejność mnożenia może mieć znaczenie w tym przypadku. Wiem, że generalnie kolejność mnożenia kwaternionów podobnie jak macierzy ma znaczenie, aczkolwiek
 q*q*=q**q
Co natomiast z sytuacją powyższą, gdzie q1 mnożę przez kwaternion Q1*
Dziękuję za jakiekolwiek podpowiedzi.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Dab

  • Redaktor
    • blog

# Listopad 25, 2016, 02:46:04
Kwaternion, jak nazwa wskazuje, opisuje tylko rotację. Nie wiem na jakiej zasadzie działają używane przez ciebie czujniki, ale jeżeli dostarczają tylko przechył w 3 osiach (choćby i względem Ziemi) to nie odtworzysz z tego wszystkich opisanych przez ciebie ruchów.

W jednej z sekwencji masz nieruchomą piętę i podnosisz palce, w innej palce powinny być nieruchome a unieść się ma cała noga. Na samych rotacjach tego nie zrobisz, potrzebna jest kość z translacją będąca punktem odniesienia. Hasło do wyszukania: root motion bone.

Offline alexx600

  • Użytkownik

# Listopad 25, 2016, 12:25:33
Tak zadaje sobie sprawę, że kwaternion zwraca tylko orientację a nie niesie informacji o przemieszczeniu.
Prezentowany przykład jest bardzo uproszczony i zdaje sobie z tego sprawę.

Podkreślę, że mój problem polega na tym, że rejestruje cały czas ten sam ruch,a wynik  zależy od mojej orientacji podczas "resetowania".

Cytuj
W jednej z sekwencji masz nieruchomą piętę i podnosisz palce, w innej palce powinny być nieruchome a unieść się ma cała noga.

Problem jest taki, że zawsze podnoszę palce ku górze, w każdym zarejestrowanym przypadku. A nagrania różnią się. Resetowanie występuje przy różnych orientacjach  (obrót wokół osi Z/ kierunek heading/ orientacja względem bieguna magnetycznego)

A jeżeli chodzi o
Cytuj
w innej palce powinny być nieruchome a unieść się ma cała noga. Na samych rotacjach tego nie zrobisz
, ja się z tym nie zgodzę.

Chociażby
https://www.youtube.com/watch?v=cvqL2LQjBgQ

3:36

Offline koirat

  • Użytkownik

# Listopad 25, 2016, 12:28:14
@Dab w sumie wydaje mi sie że się trochu mylisz.
Budowę szkieletu masz stałą (translacje-długosci kości) więc do opisu jego aktualnego stanu wystarczą ci tylko rotacje.

Tak jak możesz mieć animacje do animacji szkieletowej która posiada jedynie zmiany orientacji poszczególnych kości.