Macierz rotacji, kąty Eulera, axis-angle, wektor rotacji, kwaterniony — konwersje, gimbal lock, kiedy czego używać.
Pozycja w 3D to wektor — trzy liczby, koniec. Z orientacją jest inaczej: jedna i ta sama orientacja może być zapisana co najmniej na pięć różnych sposobów, każdy z innymi zaletami i wadami. Brak „uniwersalnego" zapisu, który byłby najlepszy do wszystkiego — używamy różnych w różnych sytuacjach:
Każda z tych reprezentacji opisuje element grupy — zbioru obrotów w 3D. Sama grupa to obiekt 3-wymiarowy (3 stopnie swobody), ale różne sposoby jej sparametryzowania używają różnej liczby liczb (3, 4 lub 9) z różnymi ograniczeniami.
Cel tego modułu: zrozumieć każdą z reprezentacji na poziomie intuicyjnym i obliczeniowym, znać pułapki (gimbal lock!), umieć sprawnie konwertować między nimi i wybrać właściwą do zadania.
Trzy slidery RPY definiują tę samą orientację w 3D. Po prawej zobacz ją zapisaną w pięciu reprezentacjach jednocześnie. Manipuluj suwakami i obserwuj, które liczby się zmieniają i jak (kwaterniony chodzą gładko zawsze; kąty Eulera mają nieciągłości przy pitch = ±90°; macierz zawsze ortogonalna).
0.3536 -0.5732 0.7392 0.6124 0.7392 0.2803 -0.7071 0.3536 0.6124
Najbardziej bezpośrednia reprezentacja: macierz , której kolumny to obrazy bazowych wektorów osi po rotacji:
Cechy: 9 liczb, ale z 6 ograniczeniami:
Algebraicznie: oraz . Inwersja jest banalnie tania:
Zalety: kompozycja rotacji = zwykłe mnożenie macierzowe (). Transformacja wektora — zwykłe . Forma używana w 99% wzorów kinematyki (FK, jakobian, równania DH).
Wady:
Reprezentujemy rotację jako kompozycję trzech obrotów wokół osi. Najczęściej używane w robotyce: roll, pitch, yaw (przechylenie, pochylenie, odchylenie) — kolejność osi ZYX intrinsic:
Słownie: najpierw obracamy wokół osi X (roll), potem wokół nowej osi Y (pitch), na końcu wokół najnowszej osi Z (yaw). Jeśli czytasz macierze od prawej do lewej — to jest właśnie ta kolejność.
Zalety: tylko 3 liczby (minimalna parametryzacja). Łatwo wpisać w panel, łatwo zinterpretować geometrycznie. Standardowy sposób komunikacji człowiek-robot.
Wady — patologie:
„Kąty Eulera" to nie jeden zapis — to cała rodzina. Różnią się kolejnością osi (XYZ, ZYX, ZYZ, ZXZ, …) i tym, czy obroty są intrinsic (wokół osi obracanego ciała) czy extrinsic (wokół osi nieruchomego świata):
Praktyczna porada: zawsze dokumentuj, którą konwencję używasz. „RPY" w robotyce zwykle oznacza ZYX intrinsic (ROS, MoveIt, OpenRAVE), ale w lotnictwie i grafice 3D bywa różnie. Konwersja źle dopasowanych konwencji to klasyczne źródło bugów w integracji z czujnikami i bibliotekami zewnętrznymi.
Każda rotacja w 3 wymiarach to złożenie obrotów wokół trzech osi. Wyobraź sobie żyroskop z trzema obręczami — każda umożliwia obrót wokół innej osi, połączone w łańcuch. Gimbal lock zachodzi, gdy dwie z tych osi się pokrywają:
Spróbuj: ustaw pitch ≈ 90°. Czerwona (yaw) i niebieska (roll) obręcze zaczynają obracać się wokół tej samej osi — tracisz jeden stopień swobody. Zmiana yaw daje teraz to samo co zmiana roll. To jest gimbal lock — nieusuwalna patologia kątów Eulera.
Gimbal lock w fizycznym żyroskopie utrudnia pracę pilotom (znany problem w Apollo 11), a w robotyce destabilizuje regulatory posługujące się kątami Eulera w okolicach pitch ≈ ±90°. Rozwiązanie: używać kwaternionów lub macierzy rotacji jako reprezentacji wewnętrznej (kąty Eulera tylko do wejścia/wyjścia interfejsu użytkownika).
Twierdzenie Eulera o obrotach: każdy obrót w 3D można opisać jako jeden obrót o pewien kąt θ wokół jednej osi k̂. To jest fakt geometryczny — stosuje się również do złożenia 100 wcześniejszych obrotów.
Kierunek rotacjiwokół osi określamy regułą prawej ręki: jeśli kciuk wskazuje wzdłuż osi k̂, palce wskazują kierunek obrotu dla θ > 0. Ta sama konwencja definiuje orientację układu współrzędnych prawoskrętnego (X×Y = Z):
Wzór Rodriguesa (axis-angle → macierz):
gdzie to macierz antysymetryczna z osi k̂:
Połącz oś i kąt w jeden wektor 3-wymiarowy:
Długość wektora = kąt obrotu, kierunek = oś. To jest logarytm SO(3) w sensie algebr Liego — używamy go jako twist error w solverach iteracyjnych (moduł 3) oraz jako standard w OpenCV (cv::Rodrigues) i ROS.
Zalety: 3 liczby, gładkie odwzorowanie w okolicy zera (identyczność). Idealne do reprezentacji małych rotacji (np. w iteracjach IK lub korekcjach dryfu IMU).
Wady: nieciągłe przy θ → 0 (oś staje się nieokreślona — choć produkt θ·k̂ pozostaje gładki) i przy θ → π (dwie antypodalne osie dają tę samą rotację).
Najsubtelniejsza, ale najbardziej praktyczna reprezentacja. Kwaternion to czwórka liczb:
z mnożeniem zdefiniowanym przez Hamiltona (1843). Dla kwaternionów jednostkowych () istnieje piękna tożsamość — każdy obrót w 3D zapisuje się jako:
(, jak w axis-angle). Cztery liczby z jednym ograniczeniem (norma = 1) → 3 stopnie swobody, tyle ile trzeba.
Kompozycja rotacji = mnożenie kwaternionów (po regułach Hamiltona):
Inwersja = sprzężenie (zmień znak części urojonej):
Sferyczna interpolacja liniowa (Spherical Linear Interpolation, Shoemake 1985) — gładkie przejście między dwoma orientacjami i :
gdzie = kąt między i w 4D. Wynik: stała prędkość kątowa od początku do końca, krótszą stroną sfery 4D. Spróbuj zinterpolować dwie orientacje suwakami w eksploratorze powyżej — kwaterniony dają zawsze ciągłą interpolację, natomiast kąty Eulera tracą ciągłość przy ±180°.
| Sytuacja | Najlepsza reprezentacja | Dlaczego |
|---|---|---|
| FK, transformacje punktów, jakobian | Macierz | Bezpośrednie mnożenie macierzy z wektorami |
| Wejście/wyjście z user interface | Kąty Eulera (RPY) | Człowiek rozumie „przekręć o 30°" |
| Twist error w solverach iteracyjnych | Wektor rotacji (log SO(3)) | 3 liczby, gładkie w okolicach 0, dodawanie ma sens |
| Interpolacja trajektorii | Kwaternion (SLERP) | Gładkie, stała prędkość kątowa, brak singularności |
| Składanie wielu rotacji w łańcuchu | Kwaternion | Tańsze i numerycznie stabilniejsze niż macierze |
| Komunikacja z OpenCV / ROS / niskopoziomowe sterowanie | Wektor rotacji lub kwaternion | Standardy bibliotek |
| Prezentacja / wizualizacja / GUI | Kąty Eulera (intuicyjnie) lub axis-angle | Czytelne dla człowieka |
| Małe korekcje (np. dryf IMU) | Wektor rotacji | Dodawanie ma sens dla małych , brak nieciągłości |
Wszystkie cztery „minimalne" reprezentacje (Eulera, axis-angle, wektor rotacji, kwaternion) to różne sposoby parametryzowania rozmaitości . Wektor rotacji ma szczególne znaczenie — jest wykładniczą mapą algebry Liego:
Tu i to macierzowe wykładnicze i logarytm. Wzór Rodriguesa to jest po prostu rozwinięcie szeregu Taylora dla exp na macierzach antysymetrycznych. Ten związek pozwala uogólniać metody numeryczne (np. „średnia" rotacji = średnia ich logów + powrót do SO(3) przez exp). Temat dla osobnego wykładu — w robotyce wystarczy wiedzieć, że istnieje i że biblioteki typu scipy.spatial.transform czy Sophus (C++) udostępniają te operacje gotowe.
Po tym module powinno być znacznie jaśniejsze, dlaczego w module 3 (jakobianowych) używamy logarytmu SO(3) jako twist error, a w module 1 (analitycznym) — bezpośrednio elementów macierzy R. Każda decyzja o reprezentacji ma swoje uzasadnienie. Praktyczna wskazówka na koniec: jeśli pracujesz nad kontrolerem robota, silnikiem 3D albo systemem AR/VR — zacznij od zaimplementowania klasy Rotation ze wszystkimi pięcioma reprezentacjami (jak scipy.spatial.transform.Rotation albo three.js Quaternion) i konsekwentnie używaj tylko jednej wewnętrznej, konwertując na granicy.