from Cinemática directa con variables simbólicas by Gabriel Pool
Se parte de los parámetros DH y se obtiene la matriz cinemática

param_DH.m
% Obtencin de la matriz Cinemtica a partir de los parmetros DH
% Diseado por: Ing. Gabriel Pool

close all;
clear all;

i = 2;          % Apuntador del vector, empezar con 2 para obtener 0-1 T
                % Matlab no acepta el vector a(0), genera errores de compilacin
syms a alfa d teta L1 L2 L3 t1 t2 t3 pi

a(1) = 0;       % Equivalente a a(0)= dist Z0 => Z1 sobre X0
a(2) = L1;       % Equivalente a a(1)
a(3) = L2;       % Equivalente a a(2)
a(4) = L3;       % Equivalente a a(3)
a(5) = 0;       % Equivalente a a(4)

alfa(1) = 0;    % Equivalente a alfa(0) = Angulo Z0 => Z1 sobre X0
alfa(2) = 0;    % Equivalente a alfa(1)
alfa(3) = 0;    % Equivalente a alfa(2)
alfa(4) = 0;    % Equivalente a alfa(3)
alfa(5) = 0;    % Equivalente a alfa(4)

d(2) = 0;       % Equivalente a d(1)= dist X0 => X1 sobre Z1
d(3) = 0;       % Equivalente a d(2)
d(4) = 0;       % Equivalente a d(3)
d(5) = 0;       % Equivalente a d(4)
d(6) = 0;       % Equivalente a d(5)

teta(2) = t1;    % Equivalente a teta(1) = = Angulo X0 => X1 sobre Z1
teta(3) = t2;    % Equivalente a teta(2)
teta(4) = t3;    % Equivalente a teta(3)
teta(5) = 0;    % Equivalente a teta(4)
teta(6) = 0;    % Equivalente a teta(5)

T = [sym(cos (teta(i))),                   sym(-sin (teta(i))),                 0,                     a(i-1);
     sym(sin (teta(i))* cos (alfa(i-1))),  sym(cos (teta(i)) * cos(alfa(i-1))), sym(-sin (alfa(i-1))), sym(-d(i) * sin (alfa(i-1)));
     sym(sin (teta(i)) * sin (alfa(i-1))), sym(cos (teta(i)) * sin(alfa(i-1))), sym(cos (alfa(i-1))),  sym(d(i) * cos (alfa(i-1)));
     0,                                    0,                                   0,                     1]

R = T;
i = i + 1;

T = [sym(cos (teta(i))),                   sym(-sin (teta(i))),                 0,                     a(i-1);
     sym(sin (teta(i))* cos (alfa(i-1))),  sym(cos (teta(i)) * cos(alfa(i-1))), sym(-sin (alfa(i-1))), sym(-d(i) * sin (alfa(i-1)));
     sym(sin (teta(i)) * sin (alfa(i-1))), sym(cos (teta(i)) * sin(alfa(i-1))), sym(cos (alfa(i-1))),  sym(d(i) * cos (alfa(i-1)));
     0,                                    0,                                   0,                     1]

S = T;
i = i + 1;

T = [sym(cos (teta(i))),                   sym(-sin (teta(i))),                 0,                     a(i-1);
     sym(sin (teta(i))* cos (alfa(i-1))),  sym(cos (teta(i)) * cos(alfa(i-1))), sym(-sin (alfa(i-1))), sym(-d(i) * sin (alfa(i-1)));
     sym(sin (teta(i)) * sin (alfa(i-1))), sym(cos (teta(i)) * sin(alfa(i-1))), sym(cos (alfa(i-1))),  sym(d(i) * cos (alfa(i-1)));
     0,                                    0,                                   0,                     1]

Q = T;

% W = R * S * Q;
% W = simple (W); % Simplifica a su mnima expresin la matriz W
% display (W); % Muestra el resultado

% En caso de tener menos eslabones comente lo siguiente y descomente las tres lneas anteriores:
i = i + 1;

T = [sym(cos (teta(i))),                   sym(-sin (teta(i))),                 0,                     a(i-1);
     sym(sin (teta(i))* cos (alfa(i-1))),  sym(cos (teta(i)) * cos(alfa(i-1))), sym(-sin (alfa(i-1))), sym(-d(i) * sin (alfa(i-1)));
     sym(sin (teta(i)) * sin (alfa(i-1))), sym(cos (teta(i)) * sin(alfa(i-1))), sym(cos (alfa(i-1))),  sym(d(i) * cos (alfa(i-1)));
     0,                                    0,                                   0,                     1]

W = R * S * Q * T;
W = simple (W); % Simplifica a su mnima expresin la matriz W
display (W); % Muestra el resultado

Contact us at files@mathworks.com