Generación de trayectorias y control cinemático

BE3027 - Robótica Médica

¿Qué tenemos hasta ahora?

(usando una analogía de sistemas de control)

q\mathbf{q}
\mathbf{q}
K(q)BTE(q)\mathcal{K}\left(\mathbf{q}\right) \subseteq {^B}\mathbf{T}_E(\mathbf{q})
\mathcal{K}\left(\mathbf{q}\right) \subseteq {^B}\mathbf{T}_E(\mathbf{q})

cinemática directa

q˙\dot{\mathbf{q}}
\dot{\mathbf{q}}
BVE=J(q)q˙{^B}\mathcal{V}_E=\mathbf{J}(\mathbf{q})\dot{\mathbf{q}}
{^B}\mathcal{V}_E=\mathbf{J}(\mathbf{q})\dot{\mathbf{q}}

cinemática diferencial

q\mathbf{q}
\mathbf{q}
K(q)BTE(q)\mathcal{K}\left(\mathbf{q}\right) \subseteq {^B}\mathbf{T}_E(\mathbf{q})
\mathcal{K}\left(\mathbf{q}\right) \subseteq {^B}\mathbf{T}_E(\mathbf{q})

cinemática directa

q˙\dot{\mathbf{q}}
\dot{\mathbf{q}}
BVE=J(q)q˙{^B}\mathcal{V}_E=\mathbf{J}(\mathbf{q})\dot{\mathbf{q}}
{^B}\mathcal{V}_E=\mathbf{J}(\mathbf{q})\dot{\mathbf{q}}

cinemática diferencial

K(q)+J(q)\mathcal{K}\left(\mathbf{q}\right) + \mathbf{J}(\mathbf{q}) \sim función de transferencia

G(s)G(s)
G(s)
qf=K1(Td)\mathbf{q}_f=\mathcal{K}^{-1}\left(\mathbf{T}_d\right)
\mathbf{q}_f=\mathcal{K}^{-1}\left(\mathbf{T}_d\right)
Td=BTE(qd)\mathbf{T}_d={^B}\mathbf{T}_E(\mathbf{q}_d)
\mathbf{T}_d={^B}\mathbf{T}_E(\mathbf{q}_d)

tarea deseada

cinemática inversa

qf=K1(Td)\mathbf{q}_f=\mathcal{K}^{-1}\left(\mathbf{T}_d\right)
\mathbf{q}_f=\mathcal{K}^{-1}\left(\mathbf{T}_d\right)
Td=BTE(qd)\mathbf{T}_d={^B}\mathbf{T}_E(\mathbf{q}_d)
\mathbf{T}_d={^B}\mathbf{T}_E(\mathbf{q}_d)

tarea deseada

cinemática inversa

K1(Td)\mathcal{K}^{-1}\left(\mathbf{T}_d\right)\sim controlador

C(s)C(s)
C(s)
BTE(q){^B}\mathbf{T}_E(\mathbf{q})
{^B}\mathbf{T}_E(\mathbf{q})
 q(t)\ \mathbf{q}(t)
\ \mathbf{q}(t)
Td\mathbf{T}_d
\mathbf{T}_d
 qf\ \mathbf{q}_f
\ \mathbf{q}_f
 T0\ \mathbf{T}_0
\ \mathbf{T}_0
 q0\ \mathbf{q}_0
\ \mathbf{q}_0
BTE(q){^B}\mathbf{T}_E(\mathbf{q})
{^B}\mathbf{T}_E(\mathbf{q})
 q(t)\ \mathbf{q}(t)
\ \mathbf{q}(t)
Td\mathbf{T}_d
\mathbf{T}_d
 qf\ \mathbf{q}_f
\ \mathbf{q}_f
 T0\ \mathbf{T}_0
\ \mathbf{T}_0
 q0\ \mathbf{q}_0
\ \mathbf{q}_0

esto es en teoría lo que esperamos, sin embargo...

BTE(q){^B}\mathbf{T}_E(\mathbf{q})
{^B}\mathbf{T}_E(\mathbf{q})
 q(t)\ \mathbf{q}(t)
\ \mathbf{q}(t)
Td\mathbf{T}_d
\mathbf{T}_d
 qf\ \mathbf{q}_f
\ \mathbf{q}_f
 T0\ \mathbf{T}_0
\ \mathbf{T}_0
 q0\ \mathbf{q}_0
\ \mathbf{q}_0

la cinemática inversa sólo nos da esto

BTE(q){^B}\mathbf{T}_E(\mathbf{q})
{^B}\mathbf{T}_E(\mathbf{q})
 q(t)\ \mathbf{q}(t)
\ \mathbf{q}(t)
Td\mathbf{T}_d
\mathbf{T}_d
 qf\ \mathbf{q}_f
\ \mathbf{q}_f
 T0\ \mathbf{T}_0
\ \mathbf{T}_0
 q0\ \mathbf{q}_0
\ \mathbf{q}_0

¿Qué ocurre con este comportamiento?

El algoritmo de cinemática inversa

recordemos que el resultado de la cinemática inversa se obtiene mediante el algoritmo iterativo

qk+1=qk+J(qk)ek\mathbf{q}_{k+1}=\mathbf{q}_k+\mathbf{J}^\dagger\left(\mathbf{q}_k\right)\mathbf{e}_k
\mathbf{q}_{k+1}=\mathbf{q}_k+\mathbf{J}^\dagger\left(\mathbf{q}_k\right)\mathbf{e}_k

El algoritmo de cinemática inversa

recordemos que el resultado de la cinemática inversa se obtiene mediante el algoritmo iterativo

qk+1=qk+J(qk)ek\mathbf{q}_{k+1}=\mathbf{q}_k+\mathbf{J}^\dagger\left(\mathbf{q}_k\right)\mathbf{e}_k
\mathbf{q}_{k+1}=\mathbf{q}_k+\mathbf{J}^\dagger\left(\mathbf{q}_k\right)\mathbf{e}_k

entonces, si qkqf\mathbf{q}_k \to \mathbf{q}_f conforme aumentan las iteraciones, ¿Por qué no emplear los qk\mathbf{q}_k intermedios para el comportamiento transitorio?

porque el algoritmo NO converge como controlador, sino como método iterativo (discontinuo y "quebradizo")

este comportamiento predomina cuando la diferencia entre q0\mathbf{q}_0 y qf\mathbf{q}_f es considerable

sin embargo, el comportamiento se hace "más continuo" conforme disminuye la diferencia entre q0\mathbf{q}_0 y qf\mathbf{q}_f

Idea:

T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f

Idea: control cinemático

T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f
T1\mathbf{T}_1
\mathbf{T}_1
T2\mathbf{T}_2
\mathbf{T}_2
T3\mathbf{T}_3
\mathbf{T}_3
T4\mathbf{T}_4
\mathbf{T}_4
\cdots
\cdots
T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f

Idea: control cinemático

T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f
T1\mathbf{T}_1
\mathbf{T}_1
T2\mathbf{T}_2
\mathbf{T}_2
T3\mathbf{T}_3
\mathbf{T}_3
T4\mathbf{T}_4
\mathbf{T}_4
\cdots
\cdots
T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f
q1\mathbf{q}_1
\mathbf{q}_1
K1\mathcal{K}^{-1}
\mathcal{K}^{-1}
q4\mathbf{q}_4
\mathbf{q}_4
K1\mathcal{K}^{-1}
\mathcal{K}^{-1}

Idea: control cinemático

T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f
T1\mathbf{T}_1
\mathbf{T}_1
T2\mathbf{T}_2
\mathbf{T}_2
T3\mathbf{T}_3
\mathbf{T}_3
T4\mathbf{T}_4
\mathbf{T}_4
\cdots
\cdots
T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f

puede ser un recorrido o una trayectoria

(más adelante...)

Control cinemático (por capas)

control cinemático

K, J, K1\mathcal{K}, \ \mathbf{J}, \ \mathcal{K}^{-1}
\mathcal{K}, \ \mathbf{J}, \ \mathcal{K}^{-1}

Control cinemático (por capas)

control cinemático

K, J, K1\mathcal{K}, \ \mathbf{J}, \ \mathcal{K}^{-1}
\mathcal{K}, \ \mathbf{J}, \ \mathcal{K}^{-1}

(servo) actuador 1

q1,ref(t) oˊ q˙1,ref(t)q_{1,\mathrm{ref}}(t) \text{ ó } \dot{q}_{1,\mathrm{ref}}(t)
q_{1,\mathrm{ref}}(t) \text{ ó } \dot{q}_{1,\mathrm{ref}}(t)

Control cinemático (por capas)

control cinemático

K, J, K1\mathcal{K}, \ \mathbf{J}, \ \mathcal{K}^{-1}
\mathcal{K}, \ \mathbf{J}, \ \mathcal{K}^{-1}

(servo) actuador 1

(servo) actuador 2

\cdots
\cdots
q1,ref(t) oˊ q˙1,ref(t)q_{1,\mathrm{ref}}(t) \text{ ó } \dot{q}_{1,\mathrm{ref}}(t)
q_{1,\mathrm{ref}}(t) \text{ ó } \dot{q}_{1,\mathrm{ref}}(t)
q2,ref(t) oˊ q˙2,ref(t)q_{2,\mathrm{ref}}(t) \text{ ó } \dot{q}_{2,\mathrm{ref}}(t)
q_{2,\mathrm{ref}}(t) \text{ ó } \dot{q}_{2,\mathrm{ref}}(t)

Control cinemático (por capas)

planificación de movimiento o generación de trayectorias

control cinemático

K, J, K1\mathcal{K}, \ \mathbf{J}, \ \mathcal{K}^{-1}
\mathcal{K}, \ \mathbf{J}, \ \mathcal{K}^{-1}

(servo) actuador 1

(servo) actuador 2

\cdots
\cdots
q1,ref(t) oˊ q˙1,ref(t)q_{1,\mathrm{ref}}(t) \text{ ó } \dot{q}_{1,\mathrm{ref}}(t)
q_{1,\mathrm{ref}}(t) \text{ ó } \dot{q}_{1,\mathrm{ref}}(t)
q2,ref(t) oˊ q˙2,ref(t)q_{2,\mathrm{ref}}(t) \text{ ó } \dot{q}_{2,\mathrm{ref}}(t)
q_{2,\mathrm{ref}}(t) \text{ ó } \dot{q}_{2,\mathrm{ref}}(t)
qref(t) oˊ Tref(t)\mathbf{q}_{\mathrm{ref}}(t) \text{ ó } \mathbf{T}_{\mathrm{ref}}(t)
\mathbf{q}_{\mathrm{ref}}(t) \text{ ó } \mathbf{T}_{\mathrm{ref}}(t)

Control cinemático (por capas)

planificación de movimiento o generación de trayectorias

control cinemático

autónoma (AI)

manual o asistida

K, J, K1\mathcal{K}, \ \mathbf{J}, \ \mathcal{K}^{-1}
\mathcal{K}, \ \mathbf{J}, \ \mathcal{K}^{-1}

(servo) actuador 1

(servo) actuador 2

\cdots
\cdots
q1,ref(t) oˊ q˙1,ref(t)q_{1,\mathrm{ref}}(t) \text{ ó } \dot{q}_{1,\mathrm{ref}}(t)
q_{1,\mathrm{ref}}(t) \text{ ó } \dot{q}_{1,\mathrm{ref}}(t)
q2,ref(t) oˊ q˙2,ref(t)q_{2,\mathrm{ref}}(t) \text{ ó } \dot{q}_{2,\mathrm{ref}}(t)
q_{2,\mathrm{ref}}(t) \text{ ó } \dot{q}_{2,\mathrm{ref}}(t)
qref(t) oˊ Tref(t)\mathbf{q}_{\mathrm{ref}}(t) \text{ ó } \mathbf{T}_{\mathrm{ref}}(t)
\mathbf{q}_{\mathrm{ref}}(t) \text{ ó } \mathbf{T}_{\mathrm{ref}}(t)

Recorridos vs trayectorias

Trayectoria = recorrido + especificación de tiempo

Recorridos vs trayectorias

Trayectoria = recorrido + especificación de tiempo

conjunto de puntos ordenados en el espacio, ya sea C\mathcal{C} o T\mathcal{T}, que el manipulador debe seguir (puramente geométrico)

Recorridos vs trayectorias

Trayectoria = recorrido + especificación de tiempo

conjunto de puntos ordenados en el espacio, ya sea C\mathcal{C} o T\mathcal{T}, que el manipulador debe seguir (puramente geométrico)

qué tan rápido ejecutará el robot el recorrido

(acorde a los límites de los actuadores)

Recorridos vs trayectorias

Trayectoria = recorrido + especificación de tiempo

conjunto de puntos ordenados en el espacio, ya sea C\mathcal{C} o T\mathcal{T}, que el manipulador debe seguir (puramente geométrico)

qué tan rápido ejecutará el robot el recorrido

(acorde a los límites de los actuadores)

velocidades

aceleraciones

Recorridos vs trayectorias

Trayectoria = recorrido + especificación de tiempo

conjunto de puntos ordenados en el espacio, ya sea C\mathcal{C} o T\mathcal{T}, que el manipulador debe seguir (puramente geométrico)

qué tan rápido ejecutará el robot el recorrido

(acorde a los límites de los actuadores)

velocidades

aceleraciones

dependiendo qué nos interese, tendremos distintas formas de generarlas

T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f

caso 1: sólo nos interesan las poses de inicio y final

(trayectoria | recorrido punto a punto)

T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f

caso 1: sólo nos interesan las poses de inicio y final

(trayectoria | recorrido punto a punto)

K1q0\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_0
\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_0
K1qf\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_f
\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_f
T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f

caso 1: sólo nos interesan las poses de inicio y final

(trayectoria | recorrido punto a punto)

K1q0\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_0
\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_0
K1qf\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_f
\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_f

interpolación en C\mathcal{C}

la evolución de la configuración es suave pero no nos interesa lo que hace

T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f

caso 1: sólo nos interesan las poses de inicio y final

(trayectoria | recorrido punto a punto)

K1q0\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_0
\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_0
K1qf\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_f
\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_f
qtraj = jtraj(q0, qf, spec)
  • número de segmentos
  • vector de tiempo
  • velocidad inicial y final
T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f

caso 2: nos interesan todas las poses del movimiento

(trayectoria | recorrido continuo)

T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f

caso 2: nos interesan todas las poses del movimiento

(trayectoria | recorrido continuo)

T1\mathbf{T}_1
\mathbf{T}_1
T\mathbf{T}_\cdots
\mathbf{T}_\cdots

interpolación en T\mathcal{T}

Ttraj = ctraj(T0, Tf, spec)
T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f

caso 2: nos interesan todas las poses del movimiento

(trayectoria | recorrido continuo)

T1\mathbf{T}_1
\mathbf{T}_1
T\mathbf{T}_\cdots
\mathbf{T}_\cdots
  • número de segmentos
  • vector de [0,1][0,1] generado con algún esquema de interpolación
Ttraj = ctraj(T0, Tf, spec)
T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f

caso 2: nos interesan todas las poses del movimiento

(trayectoria | recorrido continuo)

K1q0\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_0
\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_0
K1qf\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_f
\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_f

IMPORTANTE:

debe regresarse al espacio C\mathcal{C} antes de mandarse a los servos

T1\mathbf{T}_1
\mathbf{T}_1
T\mathbf{T}_\cdots
\mathbf{T}_\cdots
K1q1\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_1
\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_1
K1q\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_\cdots
\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_\cdots
qtraj = robot.ikine(Ttraj, ...);
T0\mathbf{T}_0
\mathbf{T}_0
Tf\mathbf{T}_f
\mathbf{T}_f

caso 2: nos interesan todas las poses del movimiento

(trayectoria | recorrido continuo)

K1q0\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_0
\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_0
K1qf\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_f
\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_f

IMPORTANTE:

debe regresarse al espacio C\mathcal{C} antes de mandarse a los servos

T1\mathbf{T}_1
\mathbf{T}_1
T\mathbf{T}_\cdots
\mathbf{T}_\cdots
K1q1\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_1
\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_1
K1q\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_\cdots
\xrightarrow{\mathcal{K}^{-1}} \mathbf{q}_\cdots

>> be3027_clase8_ejemplos_trayectorias.m

BE3027 - Lecture 8 (2024)

By Miguel Enrique Zea Arenales

BE3027 - Lecture 8 (2024)

  • 213