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
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.