Podstawy matematyczne
SE(3), grupy Liego, FK/IK Pandy, jakobian, manipulowalność Yoshikawy, dynamika, singularności, topologia C-space.
TL;DR
Ten moduł ustala warsztat matematyczny dla całego kursu: jak reprezentować pozę robota, jak liczyć jak ona zależy od konfiguracji, gdzie kończą się sensowne reprezentacje (singularności, gimbal lock) i jaką topologię ma C-space dla redundantnego manipulatora. Wszystkie kolejne moduły (planowanie, optymalizacja, MPC) operują na obiektach zdefiniowanych tutaj.
Co już zakładamy: rachunek macierzowy, podstawy układów dynamicznych, intuicje z analizy. Czego nauczymy się tu w kontekście Pandy: SO(3) i SE(3) jako grupy Liego, jakobian , wskaźnik Yoshikawy, singularności i topologia (ze stoperami, więc właściwie podzbiór ze ścianami).
Słownik podstawowych pojęć
Pięć terminów, które wracają w każdym kolejnym module. Jeśli już wiesz, czym jest manifold i , możesz to pominąć.
Algebra Liego , = przestrzeń styczna w identyczności = elementy „infinitezymalne" (prędkości kątowe, twisty). Połączenie: (formuła Rodriguesa).
Reprezentacje rotacji w
Cztery równoważne sposoby zapisu jednej rotacji. Każdy ma inny zestaw zalet i pułapek. Praktycznie: kwaterniony do reprezentacji wewnętrznej (interpolacja SLERP, brak singularności), macierze do mnożenia transformacji, axis-angle do interpretacji geometrycznej i wykładni , kąty Eulera tylko do UI (gdy potrzebny intuicyjny opis dla człowieka — z ostrzeżeniem o gimbal lock).
Cztery reprezentacje tej samej rotacji
SO(3) jako manifold
to grupa rotacji 3D — formalnie zbiór macierzy 3×3 spełniających dwa warunki:
Wymiar manifoldu: 3 (9 elementów 6 niezależnych więzów ortogonalności). Tangent space w identyczności: = macierze skośnie-symetryczne 3×3, izomorficzne z przez mapę „hat" . To podstawa do liczenia prędkości kątowych i całkowania ruchu.
exp / log map
Rodrigues: , gdzie kąt, jednostkowa oś rotacji. To exp map z do . W kursie wykorzystamy ją w CHOMP/TrajOpt (moduł 07) — tam całkujemy ruch w tangent space.
Gimbal lock kątów Eulera
Włącz preset gimbal: β=90° we widgecie powyżej. Przy pierwsza i trzecia oś rotacji nakładają się — tracimy jeden stopień swobody. Skutki: pochodne i stają się liniowo zależne. Dlatego sterowanie i planowanie operuje na kwaternionach lub axis-angle, nigdy na czystych kątach Eulera.
Interpolacja orientacji: SLERP
Naiwne interpolowanie kwaternionów liniowo (LERP) i normalizacja daje punkt na 3-sferze, ale nie po geodezyjnej — prędkość kątowa nie jest stała. SLERP (Shoemake 1985) interpoluje po łuku największego koła, dając stałą prędkość kątową. Krytyczne dla animacji i trajektorii TCP w robotyce.
SLERP vs LERP — interpolacja orientacji 3D (Shoemake 1985)
Formuła SLERP
Geometrycznie: to dwa punkty na 3-sferze . SLERP daje geodezyjną ścieżkę między nimi — najkrótszy łuk po sferze. LERP zaś interpoluje liniowo w a po renormalizacji rzutuje na sferę — daje punkt sferze, ale po cięciwie akordu, nie po łuku.
: pełna poza w przestrzeni
Poza robota (lub jego końcówki) to element — pół-bezpośredni iloczyn rotacji i translacji. Macierzowa reprezentacja jednorodna (4×4):
Tangent space (twist) : para — prędkość kątowa i liniowa. Jakobian mapuje :
Dla Pandy , więc — redundancja. ma więcej kolumn niż wierszy → nieskończenie wiele rozwiązań dla zadanego . Wykorzystanie tej redundancji to temat modułu 11.
Parametry DH — od ramienia do macierzy
Denavit-Hartenberg (1955) — uniwersalna konwencja zapisu kinematyki manipulatora seryjnego (łańcucha kinematycznego bez gałęzi). Idea: każde ogniwo opisujemy czterema liczbami zamiast pełną macierzą 4×4. Z 7 ogniw Pandy: 28 liczb, nie 7×16=112.
Cztery parametry DH
Dla każdego przegubu :
- — długość ogniwa poprzedniego, czyli długość wspólnej normalnej między osiami i . Mierzymy wzdłuż osi .
- — kąt skręcenia osi między ogniwami; obrót wokół .
- — offset wzdłuż osi , gdzie ogniwo łączy się z poprzednim.
- — kąt przegubu; dla przegubu rewolutnego ten parametr jest zmienną konfiguracyjną .
Konwencja (Modified DH, Craig): osie układa się wzdłuż osi obrotu i-tego przegubu (dla rewolutnych) lub osi przesuwu (dla pryzmatycznych). Osie wzdłuż wspólnej normalnej z (lub dowolne jeśli osie są równoległe).
Macierz pojedynczego przejścia
Złożenie 4 elementarnych transformacji w ścisłym porządku:
Po rozwinięciu mamy konkretną macierz 4×4:
gdzie , . Implementacja w src/lib/panda/fk.ts (dhTransform) — 16 obliczanych pól, 8 wywołań sin/cos.
Tabela DH Pandy (Modified DH, Franka FCI)
| Przegub i | a_{i-1} [m] | α_{i-1} [rad] | d_i [m] | θ_i | Co opisuje |
|---|---|---|---|---|---|
| 1 | 0 | 0 | 0.333 | q₁ | Bark (shoulder yaw) — pionowa kolumna 33.3 cm |
| 2 | 0 | −π/2 | 0 | q₂ | Shoulder pitch — skręć oś o −90°, oś rotacji teraz pozioma |
| 3 | 0 | π/2 | 0.316 | q₃ | Upper arm — długość ramienia 31.6 cm |
| 4 | 0.0825 | π/2 | 0 | q₄ | Elbow — offset 8.25 cm wzdłuż x (charakterystyczny dla Pandy) |
| 5 | −0.0825 | −π/2 | 0.384 | q₅ | Forearm — długość 38.4 cm; ujemne a kompensuje offset z 4 |
| 6 | 0 | π/2 | 0 | q₆ | Wrist pitch (przed twist) |
| 7 | 0.088 | π/2 | 0 | q₇ | Gripper twist — ostatni przegub przed flange |
| flange | 0 | 0 | 0.107 | 0 | Statyczne (bez przegubu): 10.7 cm offsetu do TCP |
Suma długości: 0.333 + 0.316 + 0.384 + 0.107 + offsety (0.0825 + 0.088) ≈ 1.19 m. To maksymalny reach Pandy. Workspace (osiągalna pozycja TCP) to kula o promieniu ~0.85 m wokół bazy (z wycięciami przy krawędziach z powodu joint limits).
Wizualizacja DH frames — gdzie żyje każdy układ
DH frames na Pandzie — gdzie żyje każdy układ
Forward kinematics — composition łańcucha
FK to złożenie 7 macierzy DH plus statyczna transformacja flange:
Implementacja w TS — kanoniczna pętla src/lib/panda/fk.ts:
let T = I4;
for (let i = 0; i < 7; i++) {
T = mat4mul(T, dhTransform(PANDA_DH[i], q[i]));
frames.push(T); // zapamiętaj dla jakobianu / wizualizacji
}
T = mat4mul(T, flangeOffset); // statyczne 10.7 cmWynik dla q_home: m. Smoke test w lib/panda/__smoke.ts sprawdza to per build.
Złożoność: O(n) mnożeń macierzy, czyli ~7×16 float operations = ~112 mnożeń + sin/cos w każdym kroku. Czas wykonania w przeglądarce: ~5 μs per ewaluacja FK. Pandy 1 kHz control loop < 0.5% budżetu czasowego.
Inverse kinematics — metody numeryczne
Dla zadanego pose znajdź takie, że . Pandzie 7-DOF brak postaci zamkniętej (nie spełnia warunku Piepera — ostatnie 3 osie nie przecinają się w jednym punkcie). Dla takich robotów używamy numeryki.
Newton-Raphson na pose error
Niech = 6-wektor błędu (twist od bieżącej do docelowej pozy). Linearyzacja: . Krok Newtona:
Iteruj aż . Konwergencja kwadratowa w pobliżu rozwiązania, ale wrażliwa na singularności i lokalne minima.
Damped Least Squares (DLS)
W pobliżu singularności wybucha. Fix: z . Patrz moduł 11 dla szczegółów.
TRAC-IK (Beeson & Ames 2015)
Hybryda: dwie metody równolegle: SQP (KDL standard) + twist-aware DLS. Bierze pierwsze udane. Threshold: 95% success rate na typowych zadaniach Pandy, vs 70% klasycznego KDL.
IKFast (Diankov 2010)
Generowanie analitycznej IK przez Gröbner basis dla konkretnego robota. Dla 6-DOF: zamknięta postać do 16 rozwiązań. Dla 7-DOF wymaga ustalenia 1 parametru redundancji (np. zawsze , lub elbow angle = const).
Pełne wyprowadzenie analityczne IK (Puma560, 6-DOF, warunek Piepera) w siostrzanym projekcie ik-platform — środek nadgarstka, q₁ z geometrii, q₂q₃ z prawa kosinusów, q₄q₅q₆ z macierzy rotacji, 8 rodzin rozwiązań.
Jakobian i wskaźnik manipulowalności (Yoshikawy)
Jakobian geometryczny opisuje wzajemność prędkości joints i prędkości TCP (linear + kątowej). Manipulowalność mówi jak dobrze robot jest „przygotowany" w danej konfiguracji — czyli jak duże prędkości TCP może osiągać dla jednostkowych prędkości joints.
Druga równość: to wartości szczególne , więc = iloczyn długości półosi elipsoidy manipulowalności. Mała oznacza, że jedna z osi jest prawie zerowa — niemal-singularność. dokładnie wtedy, gdy traci rank.
W demo poniżej widzisz elipsoidę manipulowalności (część liniowa, 3×3) w pozycji TCP. Suwakami joints obserwuj jak zmienia się jej kształt — przy konfiguracjach „rozprostowanego ramienia" elipsoida się spłaszcza.
Trzy warianty Jakobianu — spatial, body, hybrid
W papersachi bibliotekach robotyki spotkasz różne definicje „jakobianu". Najczęstsze nieporozumienie w implementacji: liczę spatialJacobian, a wzór wymaga body. Trzy warianty, wszystkie 6×n:
1. Spatial Jacobian
Definiowany tak, że dla twistu w world frame:
gdzie = prędkość liniowa frame'u końcówki wyrażona w world ALE z punktem zaczepienia w origin world (interpretacja „extended twist"). Kolumna i-ta : gdzie = oś joint i, = pose frame'u i w world. To jakobian używany w klasycznych pochodnych algebra Liego (Murray-Li-Sastry).
2. Body Jacobian
Twist wyrażony w body frame (frame'ie końcówki):
= prędkość liniowa w reprezentacji body. Naturalne dla zadań w przestrzeni narzędzia (force-feedback, peg-in-hole — chcemy prędkość „przy końcówce"). Związek z spatial: .
3. Geometric / hybrid Jacobian
Najczęściej w praktyce. Prędkość liniowa końcówki w world, prędkość kątowa w world. NIE jest „prawdziwym" twistem (mieszamy reprezentacje), ale jest najwygodniejszy obliczeniowo:
Kolumna i-ta dla przegubu rewolutnego:
To jest jakobian, który implementuję w lib/panda/jacobian.ts— używany w CHOMP, TrajOpt, MPC, redundancji. Wszystkie wartości w world frame, łatwo wizualizować i komponować z target velocity.
Konwersje między wariantami
Mając (najprostszy do obliczenia), pozostałe wyznaczamy przez transformację adjoint:
gdzie , = macierz skośnie-symetryczna z . Adjoint mapuje twisty między frame'ami.
Praktyczna reguła wyboru
- Sterowanie w przestrzeni zadania (OSC, CBF, tracking pose) — geometric : chcę „idź w +x w world".
- Force feedback / contact tasks — body : siła mierzona przy końcówce.
- Lie-theoretic analysis (CHOMP geodesics, exp coords) — spatial : kompozycja z exp/log naturalna.
- MoveIt2, Pinocchio — domyślnie geometric, ale z funkcjami konwersji.
Pułapka — manipulability i numeric stability
Wskaźnik manipulowalności zależy od wyboru wariantu jakobianu. Na singularności wszystkie są równoważnie 0, ale w pobliżu wartości się różnią (kierunki głównych osi elipsoidy w różnych frame'ach). Implementacje typowo używają geometric, ale warto być świadomym przy porównaniu z literaturą.
Singularności
Singularność = konfiguracja taka, że . W tej konfiguracji jakobian nie jest pełnego rzędu: istnieje kierunek w przestrzeni prędkości TCP, którego nie da się osiągnąć żadną prędkością joints (a fakt że Panda jest 7-DOF nie pomaga, bo redundancja jest w joints, nie w task space).
Klasyfikacja: brzegowe (TCP na granicy osiągalności — ramię całkowicie rozprostowane) i wewnętrzne (specjalne wewnętrzne konfiguracje, jak wyrównane osie sąsiednich joints).
Pokażemy mechanizm na klasycznym 2-link arm (RR planarny), gdzie singularność wyraża się jednym wzorem:
Singularne: (ramię rozprostowane) i (złożone). Suwakami zobacz jak przechodzi przez 0.
2-link arm — singularności (det J → 0)
Bieżący = 0.8000
Topologia przestrzeni konfiguracyjnej
nie jest zwykłym — kąty obrotowe są cyrkulane (), więc każdy joint to , nie odcinek. Skutki praktyczne:
- Metryka w C-space nie jest euklidesowa — odległość między a to , nie . To wpływa na każdy planer (A*, RRT, CHOMP) — używa się
angle wraplub pracuje na cosinusach. - Topologia drasycznie inna od euklidesa. Np. RRT* na torusie zachowuje się inaczej niż na płaszczyźnie (ścieżki mogą „okrążać" świat).
- Dla Pandy z limitami joints (np. rad, nie pełne ) niektóre joints są quasi-cyrkulane — okrąg ze „ścianami". Topologicznie bliżej do odcinka.
C-space 2-link = torus 𝕊¹ × 𝕊¹
Wynik: .
q₂ — pozycja wokół przekroju.
Dla pełnej Pandy z 7 joints C-space to (przy nieograniczonym joint 1) z limit-walls — niewizualizowalne bezpośrednio, ale intuicja torusa (sklejenie krawędzi) uogólnia się.
Dynamika — szybkie podsumowanie
Równanie ruchu manipulatora w postaci Lagrange'a:
gdzie macierz mas, człony Coriolisa i odśrodkowe, grawitacja, momenty napędowe, zewnętrzne siły.
Algorytm rekursywny RNEA (Recursive Newton-Euler) liczy z w czasie liniowym względem liczby joints. Implementacja: Pinocchio.
Pełna pochodna i implementacja w ik-platform/modules/9-dynamics — tu, w module planowania, dynamika pojawi się dopiero w modułach 10 (MPC dynamiczne) i 13 (kontakt). Do tego momentu pracujemy kinematycznie.
Ściąga
Reprezentacje rotacji — kiedy czego użyć
- Macierz 3×3: do mnożenia transformacji (efektywna numerycznie). Pamięć: 9 floats.
- Kwaternion: do interpolacji (SLERP), nie ma gimbal lock, stabilność numeryczna. Pamięć: 4 floats z więzem .
- Axis-angle / wektor obrotu : do (planowanie w tangent space). 3 floats.
- Euler XYZ: nigdy wewnętrznie. Wyłącznie do UI gdy potrzebny intuicyjny zapis dla człowieka.
Jakobian i singularności
Pandy , redundancja = 1. Singularność ⇔ rank < 6 ⇔ .
SE(3)
Dynamika
Referencje do dalszej lektury
- Lynch & Park, Modern Robotics: Mechanics, Planning, and Control (Cambridge 2017) — kanoniczny podręcznik z Lie groups jako centralnym narzędziem. Rozdziały 2 (configuration space), 3 (SE(3)), 5 (kinematyka), 8 (dynamika). wykłady + ćwiczenia online.
- Murray, Li & Sastry, A Mathematical Introduction to Robotic Manipulation (CRC 1994) — głębsza analiza Lie groups w robotyce. Dostępna online bezpłatnie.
- Yoshikawa, „Manipulability of Robotic Mechanisms" (IJRR 1985) — pierwotny paper definiujący wskaźnik .
- Diebel, „Representing attitude: Euler angles, unit quaternions, and rotation vectors" (Stanford 2006) — pełen przegląd konwersji ze wzorami numerycznie stabilnymi.
- Pinocchio — biblioteka C++/Python do FK, IK, dynamiki, jakobianów, manifoldów Lie groups dla manipulatorów i floating-base. stack-of-tasks/pinocchio.
- Franka Robotics docs — parametry DH, limity: control_parameters.