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:
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:
⎣ 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í.
Co znamená který blok
| Část | Co je | Co dělá |
|---|---|---|
| Levý horní 3×3 | rotace R | otáčí — sloupce jsou obrazy os |
| Pravý sloupec | posun p | kde leží počátek rámce B ve světě |
| Spodní řádek | 0 0 0 1 | drží 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:
⎣ 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í:
Jenže matice nekomutují. Následující obrázek to netvrdí — spočítá to.
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í.