9. Konvence — Hamilton versus JPL
Tahle kapitola nemá žádný nový vzorec. Přesto je to ta, která ušetří nejvíc času, protože skoro každá chyba v rotacích je neshoda konvencí.
Dvě různá násobení kvaternionů
V oběhu jsou dvě, a liší se pořadím:
(p ⊗ q)JPL = (q ⊗ p)Hamiltonověřeno v testech
| Hamilton | JPL / Shuster | |
|---|---|---|
| Kdo to používá | ROS, Eigen, Ceres, většina robotiky | letectví a kosmonautika, část literatury o filtrech |
| i·j | +k | −k |
| Skládání | zleva doprava jako matice | obráceně |
Proč se to hledá tak špatně: skalární část je u obou
konvencí stejná a liší se jen vektorová. Součin tedy vypadá skoro správně, norma sedí,
nic nespadne — jen se to točí opačně a zjistí se to až na hardwaru. V testech je to naschvál
zvlášť: skalární část se shoduje na 10⁻¹⁵, vektorová se liší o řády.
Ostatní volby, které se musí říct nahlas
- Pořadí složek při ukládání. ROS ukládá (x, y, z, w), Eigen (w, x, y, z). Tenhle nástroj používá (w, x, y, z). Přehodit to znamená tichou katastrofu.
- Aktivní vs. pasivní (kapitola 3). Liší se transpozicí.
- Vnitřní vs. vnější Eulerovy úhly a která ze dvanácti sekvencí (kapitola 5).
- Směr transformace: RA←B, nebo RB←A?
Shusterův přehled z roku 1993 tenhle zmatek klasifikuje jako čtyři nezávislé binární volby. Čtyři binární volby jsou šestnáct kombinací, z nichž dvě se běžně používají — a to je celý ten problém v jedné větě.
Praktické pravidlo. Napiš konvenci do komentáře u každé funkce,
která vrací orientaci, a do názvu proměnné směr transformace (
R_world_tool, ne
R). Zní to pedantsky, dokud to poprvé neušetří odpoledne.