UD04 · Notebook 4 — Cinemática de un manipulador¶
Requisitos
pip install roboticstoolbox-python spatialmath-python numpy matplotlib
En el aula se podrá usar además un simulador 3D (Webots o CoppeliaSim), según lo que decida el profesor y los equipos disponibles.
Objetivo: cargar un robot real (Panda de Franka o Puma 560), calcular su cinemática directa e inversa, generar una trayectoria y detectar singularidades.
Es una entrega evaluable: se corrige con la rúbrica de su tarea en Aules.
Requisitos¶
La siguiente celda instala lo necesario. En Colab tarda un par de minutos la primera vez.
%pip install roboticstoolbox-python spatialmath-python numpy matplotlib
Fase 1 — Carga el robot¶
Anota en el notebook: número de articulaciones, tipo de cada una y el nombre del modelo.
import numpy as np
import roboticstoolbox as rtb
import spatialmath.base as smb
# TU CÓDIGO: carga el robot Panda e imprimelo
robot = ...
print(robot)
✏️ Respuesta: ¿cuántas articulaciones tiene? ¿De qué tipo es cada una?
(escribe aquí)
Fase 2 — Cinemática directa (FK)¶
Verifica que la posición del efector coincide con la que predice el modelo.
q = np.array([0, -0.8, 0.8, 0, 0.8, 0, 0])
# TU CÓDIGO: calcula la pose con fkine y muestra posicion y orientacion
pose = ...
print("Posición del efector:", ...)
print("Orientación (Euler, grados):", ...)
✏️ Respuesta: ¿cuántas soluciones tiene la cinemática directa? ¿Por qué?
(escribe aquí)
Fase 3 — Cinemática inversa (IK)¶
Comprueba que al aplicar FK a la solución IK se recupera la pose original.
# TU CÓDIGO: resuelve la IK y verifica el resultado
sol = ...
print("Solución IK:", ...)
print("¿Converge?", ...)
print("Pose reconstruida:", ...)
✏️ Respuesta: la posición reconstruida coincide, pero los ángulos no tienen por qué ser los de partida. Explica por qué.
(escribe aquí)
Fase 4 — Genera una trayectoria¶
from roboticstoolbox import jtraj
q0 = robot.qr
q1 = np.array([0, -0.4, 1.2, 0, 0.8, 0, 0])
# TU CÓDIGO: genera la trayectoria y calcula las poses
traj = ...
poses = ...
print(poses[:3])
✏️ Respuesta: jtraj interpola en el espacio articular con un polinomio de 5.º grado. ¿Qué habría cambiado usando ctraj? ¿En qué caso real preferirías cada uno?
(escribe aquí)
Fase 5 — Detecta singularidades¶
¿En algún punto el rango baja de 6? Si es así, anota cuál y por qué ocurre.
# TU CÓDIGO: calcula el rango del jacobiano cada 10 pasos
for i in range(0, 50, 10):
J = ...
rango = ...
print(f"Paso {i:2d}: rango del jacobiano = {rango}")
✏️ Respuesta: ¿baja el rango de 6 en algún punto? Si baja, ¿en cuál y por qué? Y si no baja, ¿qué habría que cambiar en la trayectoria para provocar una singularidad?
(escribe aquí)
Fase 6 — Visualiza la trayectoria¶
import matplotlib.pyplot as plt
# TU CÓDIGO: extrae x, y, z de las poses y dibujalas en 3D
x, y, z = ..., ..., ...
ax = plt.figure().add_subplot(projection='3d')
ax.plot(x, y, z, label='Trayectoria')
ax.scatter(x[0], y[0], z[0], c='g', label='Inicio')
ax.scatter(x[-1], y[-1], z[-1], c='r', label='Fin')
ax.legend()
plt.show()
Cierre¶
✏️ Respuesta: en dos o tres frases, ¿qué relación hay entre lo que has hecho aquí y las técnicas de IA de las unidades anteriores (percepción, razonamiento, acción)?
(escribe aquí)
Entrega¶
Sube a la tarea N04 · Cinemática de un manipulador de Aules un único fichero .zip con:
- el notebook
.ipynbejecutado, con los cálculos, la trayectoria generada y las singularidades encontradas.
Antes de comprimirlo, ejecuta el notebook entero, de arriba abajo y sin errores.
Aules solo acepta un .zip en esta tarea: no subas los ficheros sueltos, comprímelos juntos. El plazo acaba a las 23:59 del día que marca la tarea; después la tarea se cierra y ya no admite entregas.
Qué tiene que verse en el notebook
Se valora que expliques lo que ocurre, no solo que la celda dé un resultado: una salida sin interpretar no demuestra que hayas entendido nada.
| Fase | Evidencia mínima |
|---|---|
| 1 | El robot cargado, con el número y el tipo de sus articulaciones |
| 2 | Posición y orientación del efector, y por qué la FK tiene una única solución |
| 3 | La solución de IK verificada con FK, y por qué los ángulos no coinciden con los de partida |
| 4 | La trayectoria generada y la diferencia entre jtraj y ctraj |
| 5 | El rango del jacobiano a lo largo de la trayectoria, y qué habría que cambiar para provocar una singularidad |
| 6 | El recorrido del efector dibujado en 3D, con inicio y fin marcados |
Soluciones
Las soluciones no se publican: se corrigen y comentan en clase.