RotLab orientace v prostoru
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.

8. Interpolace orientace — SLERP

Jak se plynule dostat z jedné orientace do druhé? Vypadá to jako triviální otázka a je to místo, kde naivní kód selže nejviditelněji.

090180270360po složkách — 358°SLERP — 2°parametr tušlý úhel [°]
Interpolace z yaw −179° do yaw +179°. Jsou to dvě orientace vzdálené 2°, ale interpolace úhlů po složkách neví, že je souřadnice periodická, a poctivě to objede přes 358° — v testech je to změřených 179násobek. SLERP jede po nejkratší cestě, protože pracuje s orientací, ne s jejími souřadnicemi.
xyzSLERP — nejkratší cestouxyzpo složkách — objede to
Ujetý úhel: SLERP · po složkách 358°179× delší. Nech yaw na −179° a +179°: jsou to dvě orientace vzdálené 2°, ale interpolace úhlů neví, že je ta souřadnice periodická.
Táhni t a sleduj oba rámce zároveň. Při výchozím nastavení (yaw −179° → +179°) jsou to dvě orientace vzdálené 2°, ale interpolace po složkách objede 358°. Přenastav koncové yawy tak, aby přes ±180° nepřecházely, a rozdíl skoro zmizí.

Proč ne po složkách Eulerových úhlů

Protože úhly jsou periodické souřadnice zakřiveného prostoru a lineární interpolace o tom neví. Dva problémy, oba reálné:

  • Přetečení. Z yaw −179° do +179° jsou dvě orientace vzdálené 2°. Interpolace po složkách to objede přes 358°. V testech změřeno jako 179násobek.
  • Gimbal lock. Blízko singularity mění malý pohyb tělesa úhly obrovsky, takže cesta v úhlech nemá s cestou v prostoru nic společného.

SLERP

Kvaterniony jednotkové délky leží na kouli ve čtyřech rozměrech, a „přímka“ mezi dvěma body na kouli je oblouk hlavní kružnice. SLERP po něm jede rovnoměrně:

slerp(q0, q1, t) = sin((1−t)Ω)sin Ω q0 + sin(tΩ)sin Ω q1Ω = úhel mezi nimi

Dvě věci, které dělá dobře a naivní kód ne:

  • Konstantní úhlová rychlost. V testech změřeno: rozptyl délek kroků pod 10⁻⁹. To je přesně to, co chceš od pohybu robotu.
  • Nejkratší cesta. Když je skalární součin q0·q1 záporný, otočí se znaménko jednoho z nich — díky dvojitému pokrytí je to zadarmo a bez toho by rameno objelo delší oblouk.

NLERP

Prostá lineární interpolace složek s následnou normalizací. Skončí správně a je levná, ale nejede rovnoměrně — uprostřed zrychlí. Pro grafiku to stačí, pro pohyb stroje zpravidla ne. Nástroj obojí kreslí vedle sebe, ať je ten rozdíl vidět.

Vzorce v této kapitole

slerp — sférická lineární interpolace
slerp = (sin((1−t)Ω)·q₀ + sin(tΩ)·q₁)/sin Ω; při q₀·q₁ < 0 otoč znaménko [—] Shoemake
d(R₀,R₁) — geodetická vzdálenost orientací
d = úhel rotace R₀ᵀR₁ [rad] SO(3) metric