Laboratorul 7

Inverse kinematics cu algoritmul Fabrik

Forward And Backward Reaching Inverse Kinematics (FABRIK)

  • abordare iterativa care rezolvă problema IK
  • determină parametrii articulatiilor astfel incat un end effector al structurii articulate sa ajunga intr-o pozitie dorita (target)

Structura articulata

  • Legăturile reprezintă obiectele rigide din care este alcătuită structura, ex. oasele.
  • Punctele de joncțiune reprezintă articulațiile prin care sunt conectate obiectele rigide
  • Structura ierarhică se reprezintă printr-un arbore, în care:
    • nodurile reprezintă legăturile
    • arcele reprezintă joncțiunile
  • Lanț = secvență de legături și joncțiuni
  • End effector = joncțiune fără copii (capătul unui nod frunză)

Algoritm

  • Date de intrare:
    • pozițiile joncțiunilor $p_i$ cu $i = 0 .. n-1$
    • poziția dorită (target) $t$
    • distanțele dintre fiecare două joncțiuni (lungimea fiecărei legături): $d_i = |p_{i+1}-p_i|$ cu $i = 0 .. n-2$
    • dacă $|p_0 - t | > d_0 + d_1 + ... + d_{n-2}$ (target-ul nu poate fi atins) atunci
      • se găsește vectorul $(t - p_0)$ și se determină poziția relativă a fiecărei joncțiuni de-a lungul vectorului (se întinde întreg lanțul în direcția punctului țintă)
      • altfel (target-ul poate fi atins)
        • se calculează distanța dintre end effector și target $diff = |p_{n-1} - t |$
        • cat timp $(diff > prag)$
          • executa iteratia forward
          • executa iteratia backward

Iterațiile forward si backward

  • Mutam end-effectorul la $t$, i.e., $p_{n-1}=t$
  • Pentru fiecare din punctele anterioare $p_i$, $i = n-2 ... 0$:
    • Găsește vectorul $(p_{i+1} - p_i)$ și noua poziție $p_i$ ca pozitia relativa a acelei jonctiuni de-a lungul acestui vector
  • Acum, rădăcina $p_0$ ar fi deplasata fata de pozitia initiala b
  • Seteaza $p_0 = b$
  • Pentru fiecare din urmatoarele puncte $p_i$, $i = 1 .. n-1$:
    • Gaseste vectorul $(p_i - p_{i+1})$, si noua pozitie, $p_{i+1}$ ca pozitia relativa a acelei jonctiuni de-a lungul acestui vector
  • Actualizeaza noua diferenta $diff = |p_{n-1} - t |$
vdvac/lab7.txt · Last modified: 2026/05/14 18:22 by anca.morar
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0