Zamiana kwaternionu na kąty Eulera

Obiekty i przekształcenia geometryczne, opisane za pomocą układu (nie zawsze prostokątnego) współrzędnych.
Alvedro
Użytkownik
Użytkownik
Posty: 17
Rejestracja: 26 wrz 2012, o 17:40
Płeć: Mężczyzna
Lokalizacja: woj. Lubelskie
Podziękował: 3 razy

Zamiana kwaternionu na kąty Eulera

Post autor: Alvedro »

Cześć!

Buduję urządzenie, które za pomocą 3 silników będzie mechanicznie stabilizowało smartfona podczas nagrywania wideo, czyli buduję tak zwany 3-osiowy gimbal. Do stabilizacji wykorzystuję układ IMU, czyli 3-osiowy akcelerometr i 3-osiowy żyroskop, z których to sensorów pozyskuję informację o przyspieszeniach liniowych oraz kątowych obiektu, który chcę stabilizować. Pozyskane dane są odpowiednio skalowane i przeliczane na odpowiednie jednostki, a następnie trafiają na wejście filtru, który został opracowany przez Sebastiana Madgwicka, czyli tzw. . Wyjściem wspomnianego filtru jest kwaternion rotacji. Dalej, w moim obecnym algorytmie taki kwaternion przekształcam na kąty Eulera - pitch, roll oraz yaw i dalej wrzucam je odpowiednie na 3 regulatory PID, które to następnie obliczają sygnał sterujący dla każdego z 3 silników. To tak w uproszczeniu.

To właściwie mi działa, telefon jest stabilizowany, jestem zadowolony z samego działania filtru Madgwicka i jakości pozyskanych danych z IMU. To z czego nie jestem zadowolony i nie do końca może też rozumiem to przekształcenie kwaternionu na kąty Eulera, a raczej odpowiedzi na pytanie czy jest taka konieczność. W większości opracowań, które poruszają podobne tematy trafiam na zdania, że kąty Eulera mają ograniczenia, dochodzi do osobliwości funkcji trygonometrycznych podczas przekształceń, występuje niechciany efekt zwany gimbal lockiem i tak dalej i jakby to jeszcze rozumiem i w odpowiedzi na to pojawiają się zdania, że kwaternion jest ratunkiem. To też rozumiem i doświadczalnie zauważyłem podczas np. wizualizacji kostki w przestrzeni w programie, która dostawała obliczony kwaternion i faktycznie poruszała się w pełnych zakresach w 3D, nie dochodziło do żadnych gimbal locków i innych niechcianych efektów. Wszystko fajnie. Tylko jak ominąć zamianę kwaternionu na kąty Eulera, jednocześnie rozbijając kwaternion na takie 3 elementy, które będzie można wrzucić do wspomnianego wcześniej regulatora PID tak jak w przypadku kątów Eulera. Zachowując przy tym te wszystkie zalety, które posiada kwaternion porównując go do kątów Eulera.

Ostatnio trafiłem

Kod: Zaznacz cały

https://drum.lib.umd.edu/handle/1903/16235
, które dało mi jakąś nadzieję i zacząłem je implementować. Nie rozumiem do końca matematyki, która za tym stoi, ale testując w praktyce też zauważam, że tak jakby czegoś brakuję, ale może to właśnie przez wspomniane braki. W takim sensie, że nie czuję tych 3 oddzielnych elementów, które mógłbym dalej wykorzystać do sterowania silnikami. To co zacząłem implementować znajduje się w rozdziale "Chapter 4: Quaternion-Based Attitude Controller", jest to 43 strona pdfa.

Takie pytanie, które może to podsumować to właśnie pytanie o to czy można pominąć tę zamianę kwaternionu na kąty Eulera, jeżeli tak to jak tym kwaternionem pomanipulować, tak, żeby rozbić go na 3 niezależne elementy, które następnie będzie można wykorzystać do sterowania poszczególnymi silnikami. Walczę z tym już jakiś czas i może już się zapętliłem i może sam jakoś sobie ten problem stworzyłem, a może w innym miejscu trzeba szukać innego rozwiązania, już sam nie wiem. Będę wdzięczny za pytania i dyskusję w tym temacie.
ODPOWIEDZ