KineLab kinematika ramene
Otevřít interaktivní verzi →

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

2. Transformační matice 4×4

Rotace sama o sobě nestačí. Kloub robotu není jen pootočený vůči předchozímu — je taky jinde. Potřebujeme tedy nosit rotaci a posun najednou, a to tak, aby se dvě takové věci daly složit prostým součinem.

Trik s jedničkou navíc

Kdybychom psali zvlášť rotaci a zvlášť posun, vyšlo by skládání takhle:

pA = RAB pB + tAB

Což je správně, ale ošklivé: skládání tří rámců za sebou už je nepřehledná směs součinů a součtů. Řešení je přidat souřadnicím čtvrtou složku rovnou 1 a rozšířit matici na 4×4:

T = ⎡ R    p ⎤
⎣ 0 0 0   1 ⎦
     ⎡ pA
⎣ 1 ⎦
= T · ⎡ pB
⎣ 1 ⎦

Ta jednička je celé kouzlo. Vynásobením se poslední řádek postará o to, že se posun přičte, kdežto rotace se vynásobí — a navenek je to jeden součin matic. Skládání rámců je pak jen násobení, přesně jako u samotných rotací.

pxyzbod v Brámec A (svět)rámec B
0.740-0.643-0.1980.600.6210.766-0.1660.300.2590.0000.9660.400001
Levý horní blok 3×3 je rotace, pravý sloupec posun, spodní řádek je vždycky 0 0 0 1. Bod (0,55 · 0,25 · 0,20) v rámci B leží ve světě na (0.81, 0.80, 0.74) — nejdřív se otočí, pak posune.
Rámec B posunutý a pootočený vůči světu, a jeden bod, který v něm leží. Táhni posun a sleduj pravý sloupec matice; táhni otočení a sleduj levý blok 3×3. Ty dvě části spolu nesouvisí — proto se dá matice číst po kusech.

Co znamená který blok

ČástCo jeCo dělá
Levý horní 3×3rotace Rotáčí — sloupce jsou obrazy os
Pravý sloupecposun pkde leží počátek rámce B ve světě
Spodní řádek0 0 0 1drží tu jedničku, aby se posun přičetl

Spodní řádek je vždycky 0 0 0 1. Kdyby tam bylo něco jiného, není to transformace tuhého tělesa — takové matice existují (perspektiva v grafice), ale robot je nepoužívá.

Inverze, kterou nesmíš počítat obecně

Otočit vztah, tedy „jak vypadá A z pohledu B", znamená invertovat T. Obecná inverze matice 4×4 by fungovala, ale je pomalá a numericky zbytečně nepřesná. U tuhé transformace se dá napsat rovnou:

T−1 = ⎡ RT   −RTp ⎤
⎣ 0 0 0    1 ⎦

Rotace se transponuje (viz RotLab, kap. 2) a posun se otočí a obrátí znaménko. Tři řádky kódu místo eliminace — a přesně tak to nástroj počítá.

Skládání a proč na pořadí záleží

Dvě transformace za sebou jsou součin, a indexy se krátí stejně jako u rotací:

TA←C = TA←B · TB←C

Jenže matice nekomutují. Následující obrázek to netvrdí — spočítá to.

xyzA · BxyzB · Ajiné — 120.0°
Nastav oba úhly na 90° a rozdíl je 120°. Nastav jeden z nich na 0 a rozdíl spadne na nulu — rotace kolem téže osy komutují, obecné rotace ne. Tohle je nejčastější chyba v celém předmětu.
Dvě otočení o 90°, jednou v pořadí A·B a jednou B·A. Výsledky se liší o 120°. Stáhni jeden z úhlů na nulu a rozdíl zmizí — rotace kolem téže osy komutují, obecné ne. Tohle je nejčastější chyba v celém předmětu a stojí za to si na ni sáhnout.
Praktická rada, která se vyplácí. Pojmenuj proměnnou tak, aby v ní byl směr: T_svet_nastroj, ne T. Když se pak píše součin, indexy se buď vykrátí, nebo je vidět, že je něco obráceně — a to je jednosekundová kontrola místo hodiny hledání.

Vzorce v této kapitole

T — homogenní transformace 4×4
T = [R p; 0 0 0 1]; [p_A;1] = T·[p_B;1] [—] rigid-body kinematics
T⁻¹ — inverze tuhé transformace
T⁻¹ = [Rᵀ −Rᵀp; 0 0 0 1] — nikdy obecná inverze 4×4 [—] derived
T_A←C — skládání transformací
T_A←C = T_A←B · T_B←C; A·B ≠ B·A obecně [—] composition