Professional Documents
Culture Documents
DINÁMICA INVERSA
PRESENTADO POR: JHON FREDDY RODRIGUEZ LEÓN
PRESENTADO A: DR. ALEJANDRO ALFREDO LOZANO GUZMÁN
UNIDAD DE APRENDIZAJE CINEMÁTICA Y DINÁMICA DE MAQUINARIA
INSTITUTO POLITÉCNICO NACIONAL
11 DE NOVIEMBRE DEL 2016
Condiciones iniciales:
t=0seg;
q1(0)= π/18 rad; q˙1(0)=0 rad/s;
q2(0)= π/6 rad; q˙2(0)=0 rad/s;
q1 f =π/6 rad q2f =π/3 rad.
INTERFACE:
Código:
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Outputs from this function are returned to the command line.
function varargout = jhoninversa_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
load fa1
load fa2
load fa3
load fa4
load fa5
load fa6
load fa7
load fa8
load fa9
load fa10
syms t L1 L2 m1 m2 m3 gx
q1 = sym('q1(t)');
q2 = sym('q2(t)');
LL1=fa1; %eslabon L1
LL2=fa2; %eslabon L2
MM1=fa3; %masa L1
MM2=fa4; %masa L2
%condiciones iniciales
c1 = cos(q1); s1 = sin(q1);
c2 = cos(q2); s2 = sin(q2);
xB = L1*c1; yB = L1*s1;
rB = [xB yB 0];
rC1 = rB/2; vC1 = diff(rC1,t);
xD = xB + L2*c2; yD = yB + L2*s2;
rD = [xD yD 0];
rC2 = (rB + rD)/2; vC2 = diff(rC2,t);
omega1 = [0 0 diff(q1,t)];
omega2 = [0 0 diff(q2,t)];
IA = m1*L1^2/3; IC2 = m2*L2^2/12;
T1 = IA*omega1*omega1.'/2;
T2 = m2*vC2*vC2.'/2 + IC2*omega2*omega2.'/2;
T = expand(T1 + T2);
%deriv(f,g(t)) differentiates f with respect to g(t)
Tdq1 = deriv(T, diff(q1,t));
Tdq2 = deriv(T, diff(q2,t));
Tt1 = diff(Tdq1, t); Tt2 = diff(Tdq2, t);
Tq1 = deriv(T, q1); Tq2 = deriv(T, q2);
LHS1 = Tt1 - Tq1; LHS2 = Tt2 - Tq2;
rC1_1 = deriv(rC1, q1); rC2_1 = deriv(rC2, q1);
rC1_2 = deriv(rC1, q2); rC2_2 = deriv(rC2, q2);
w1_1 = deriv(omega1, diff(q1,t));
w2_1 = deriv(omega2, diff(q1,t));
w1_2 = deriv(omega1, diff(q2,t));
w2_2 = deriv(omega2, diff(q2,t));
G1 = [0 -m1*gx 0]; G2 = [0 -m2*gx 0];
T12 = [0 0 T12z];
Q1=rC1_1*G1.'+w1_1*T01.'+w1_1*(-T12.')+rC2_1*G2.'+w2_1*T12.';
Q2=rC1_2*G1.'+w1_2*T01.'+w1_2*(-T12.')+rC2_2*G2.'+w2_2*T12.';
Lagrange1 = LHS1-Q1; Lagrange2 = LHS2-Q2;
data = {L1, L2, m1, m2, gx};
datn = {LL1 , LL2 , MM1 , MM2 , GG};
Lagr1 = subs(Lagrange1, data, datn);
Lagr2 = subs(Lagrange2, data, datn);
% solve for T01z T12z
sol = solve(Lagr1,Lagr2,'T01z, T12z');
T01zc = sol.T01z;
T12zc = sol.T12z;
% INVERSE DYNAMICS
q1n=q1s+(q1f-q1s)/Tp*(t-Tp/(2*pi)*sin(2*pi/Tp*t));
q2n=q2s+(q2f-q2s)/Tp*(t-Tp/(2*pi)*sin(2*pi/Tp*t));
dq1n = diff(q1n,t);
dq2n = diff(q2n,t);
ddq1n = diff(dq1n,t);
ddq2n = diff(dq2n,t);
ql={diff(q1,t,2),diff(q2,t,2),diff(q1,t),diff(q2,t),q1,q2};
qn={ddq1n, ddq2n, dq1n, dq2n, q1n, q2n};
% directa
time = 0:1:Tp;
q_1t = subs(q1n,'t',time);
q_2t = subs(q2n,'t',time);
%grafico inversa
axes(handles.axes3);
ezplot(T01zt,[0,Tp]),xlabel('t (s)'), ylabel('T01z (N m)'),title('Grafico
Inversa T01z '), grid
axes(handles.axes4);
ezplot(T12zt,[0,Tp]),xlabel('t (s)'), ylabel('T12z (N m)'),title('Grafico
Inversa T12z'), grid
clear;
clear global;
res1=findobj(gcbf,'tag','edit1');
res2=findobj(gcbf,'tag','edit2');
res3=findobj(gcbf,'tag','edit3');
res4=findobj(gcbf,'tag','edit4');
res5=findobj(gcbf,'tag','edit5');
res6=findobj(gcbf,'tag','edit6');
res7=findobj(gcbf,'tag','edit7');
res8=findobj(gcbf,'tag','edit8');
res9=findobj(gcbf,'tag','edit9');
res10=findobj(gcbf,'tag','edit10');
limpia = '';
set (res1,'string' , limpia);
set (res2,'string' , limpia);
set (res3,'string' , limpia);
set (res4,'string' , limpia);
set (res5,'string' , limpia);
set (res6,'string' , limpia);
set (res7,'string' , limpia);
set (res8,'string' , limpia);
set (res9,'string' , limpia);
set (res10,'string' , limpia);