Toolkit de Examen de Robótica (GITI)

E.S.I. SEVILLA — GUÍA DE USO ULTRA-CONCISA
REFERENCIA DIRECTA DE FUNCIONES
Propósito: Resolver cualquier ejercicio de examen de forma sistemática con los scripts de la carpeta TOOLKIT_EXAMEN_ROBOTICA sin perder tiempo en derivaciones manuales.

1. Mapa de Funciones del Toolkit

Archivo ¿Qué hace? Sintaxis básica en 1 línea
dh_matrix.m Matriz DH estándar \(^{i-1}A_i\) A = dh_matrix(theta, d, a, alpha);
compactar_expresion.m Saca factor común y agrupa trig. x = compactar_expresion(x_raw, [cos(q1), sin(q1)]);
calcular_jacobiano_y_singularidades.m Calcula \(J\), \(\det(J)\) y singularidades [J, det_J, sing] = calcular_jacobiano_y_singularidades(X_op, q);
desacoplo_muneca_pci.m PCI planar por desacoplo de muñeca [xw, yw, q] = desacoplo_muneca_pci(x, y, phi, L3, 'RPR', L2);
calcular_inercia_com.m CoM, vector local \(s_{ii}\) y tensor Steiner [m, r_c, s_ii, I] = calcular_inercia_com(segmentos, O_i);
euler_lagrange_dinamica.m Deduce \(M(q)\), \(C(q,\dot{q})\), \(G(q)\) [M, C, G] = euler_lagrange_dinamica(K, U, q, qd);
sintonizar_pid.m Ganancias PID (\(\xi=1\), polo rápido) [Kp, Kd, Ki, Kp_i, Kd_i, Ki_i] = sintonizar_pid(J, wn, 1.0, Kt);
trayectoria_cubica.m Spline cúbico \(q(t)\), \(\dot{q}(t)\), \(\ddot{q}(t)\) [q, qd, qdd] = trayectoria_cubica(t0, tf, q0, qf, 0, 0, t);
trayectoria_trapezoidal.m Perfil velocidad trapezoidal [q, qd, qdd, ta] = trayectoria_trapezoidal(t0, tf, q0, qf, vmax, amax, t);
PLANTILLA_MAESTRA_EXAMEN.m Script todo-en-uno listo para examen Abrir, rellenar tabla DH y pulsar Ctrl+Enter

2. Recetario Paso a Paso según Pregunta de Examen

Caso A: Te piden "Parámetros D-H, Matriz Resultante y PCD"

syms q1 q2 q3 L1 L2 L3 real; PI = sym(pi); A1 = dh_matrix(q1 + PI/2, 0, 0, PI/2); A2 = dh_matrix(0, L2 + q2, 0, -PI/2); A3 = dh_matrix(q3 - PI/2, 0, L3, 0); T03 = simplify(A1 * A2 * A3); % Extraer PCD y compactar: x = compactar_expresion(T03(1,4), [cos(q1), sin(q1)]); y = compactar_expresion(T03(2,4), [sin(q1), cos(q1)]); z = simplify(T03(3,4)); phi = simplify(atan2(T03(2,1), T03(1,1))); % Orientacion del extremo % Comprobacion obligatoria HOME: T_HOME = simplify(subs(T03, [q1, q2, q3], [0, 0, 0]));

Caso B: Te piden "Jacobiano y Singularidades"

% 1. Definir vector operacional y articular X_op = [x; y; phi]; % o [x; y; z] si es 3D q_vec = [q1; q2; q3]; % 2. Llamada directa [J, det_J, sing] = calcular_jacobiano_y_singularidades(X_op, q_vec); % Si det(J) = -(L2 + q2) -> Singularidad en q2 = -L2 (muñeca coincide con la base)

Guía Rápida de Uso — Toolkit de Robótica

DINÁMICA, CONTROL Y TRAYECTORIAS

Caso C: Te piden "Problema Cinemático Inverso (PCI)"

% 1. Desacoplo de la muñeca (xw, yw): xw = x - L3*cos(phi); yw = y - L3*sin(phi); % 2. Resolver segun la cinematica del robot: % Si es R-P-R coaxial: q1 = atan2(yw, xw); q2 = sqrt(xw^2 + yw^2) - L2; q3 = phi - q1; % Si es R-R-R planar: % [xw, yw, q_sol] = desacoplo_muneca_pci(x, y, phi, L3, 'RRR', [L1, L2]);

Caso D: Te piden "Dinámica de Eslabón Compuesto / Newton-Euler (s_ii, CoM, Inercia)"

% Definir los tramos de la manivela/barra: seg(1).masa = rho * L2B/2; seg(1).com = [L2B/4; 0; 0]; seg(1).I_prop = ...; seg(2).masa = rho * L2A; seg(2).com = [L2B/2; L2A/2; 0]; seg(2).I_prop = ...; seg(3).masa = rho * L2B/2; seg(3).com = [3*L2B/4; L2A; 0]; seg(3).I_prop = ...; O_joint3 = [L2B; L2A; 0]; % Origen del sistema {S2} [m2, r_com, s22, I22] = calcular_inercia_com(seg, O_joint3); % s22 da el vector local exacto desde Joint 3 hasta el centro de masas C2.

Caso E: Te piden "Dinámica Euler-Lagrange / Ecuaciones de Movimiento"

syms q1 q2 qd1 qd2 real; % Introducir K(q, qd) y U(q): K = 0.5 * M11(q2) * qd1^2 + 0.5 * M22 * qd2^2; U = m2 * g * lc2 * sin(q2); [M, C, G] = euler_lagrange_dinamica(K, U, [q1; q2], [qd1; qd2]); % Despejar aceleraciones directas (para bloque Simulink ModeloDinamico_R.m): % qdd = M \ (tau - C*qd - B_m*qd - G);

Caso F: Te piden "Diseño / Sintonización de Controlador PID"

% Sintonizacion para planta J*s^2 con amortiguamiento critico (xi=1.0) y po = 4*wn: % [Kp, Kd, Ki, Kp_i, Kd_i, Ki_i] = sintonizar_pid(J_nom, wn, xi, Kt); [Kp, Kd, Ki, Kp_i, Kd_i, Ki_i] = sintonizar_pid(2.525, 3.0, 1.0, 10.0); % Si el motor entrega par directamente: usar [Kp, Kd, Ki] (N*m) % Si la señal de control es intensidad de corriente i (A): usar [Kp_i, Kd_i, Ki_i] (A) % Añadir feedforward de gravedad en eje 2: i2_total = i2_PID + (m2*g*lc2*cos(q2)) / Kt2

Caso G: Te piden "Generación de Trayectorias (Cúbica / Trapezoidal)"

% Trayectoria cubica entre q0 y qf en tiempo T (v0=vf=0): t = linspace(0, 2.0, 100); [q, qd, qdd, a_coef] = trayectoria_cubica(0, 2.0, 0, pi/2, 0, 0, t); % Trayectoria trapezoidal con vmax y amax: [q, qd, qdd, ta] = trayectoria_trapezoidal(0, 2.0, 0, pi/2, 1.2, 2.5, t);

3. Los 4 Comandos Clave que Salvan el Examen

Objetivo Comando de MATLAB Efecto
Evitar números gigantes con \(\pi\) PI = sym(pi); Mantiene expresiones exactas sin decimales infinitos.
Saber la orientación \(\phi\) sin dudar phi = atan2(T(2,1), T(1,1)); Extrae el ángulo exacto de rotación del extremo en el plano.
Factorizar y agrupar eslabones collect(x, [cos(q1), sin(q1)]) Convierte \(L_2\cos(q_1)+q_2\cos(q_1)\) en \((L_2+q_2)\cos(q_1)\).
Calcular el Jacobiano al instante J = jacobian([x; y; phi], [q1; q2; q3]) Calcula la matriz de derivadas parciales en 1 línea.
Carpeta: C:\Tercera_Convocatoria\Robotica\TOOLKIT_EXAMEN_ROBOTICA | Grado en Ingeniería de Tecnologías Industriales