Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Materiales y equipamientos
_ Computador o Smartphone.
_ Gnu-Octave instalado o acceso https://octave-online.net/.
_ Cuaderno de apuntes.
_ Python (opcional).
Procedimientos
1. Encontrar la solución numérica del sistema péndulo invertido (no lineal, figura 1) y
visualizar respuestas de las cuatro variables de estado en función de diferentes
condiciones iniciales. Mostrar por lo menos 2 casos (ayuda: puede usar la función
ODE45 de Gnu-Octave).
Fx = m𝑥𝑐𝑔
Reemplazamos la ecuación de Xcg
𝐹𝑥 = 𝑚𝑥̈ + 𝑚𝑙𝑎̈
𝑚𝑙 𝑚 cos 𝜃 𝜃̈ (mg)senθ
[ ][ ] = [ ]
𝑚𝑙 cos 𝜃 𝑀 + 𝑚 ẍ u(t) + mℓ𝜃 2̇ sen𝜃
𝑚 1
𝑥̈ = − 𝑔𝜃 + 𝑢(𝑡)
𝑀 𝑀
(M + m) 1
𝜃̈ = − 𝑔𝜃 − 𝑢(𝑡)
Mℓ Mℓ
𝜃(𝑠) −1 1
= ∗
𝑈(𝑠) 𝑀ℓ 𝑠 2 − 𝑔 (𝑀 + 𝑚)
𝑀ℓ
x1 = θ, x2 = 𝜃̇, x3 = x, x4 = ẋ
(𝑀 + 𝑚) 1
𝑥̇ 2 = 𝑔𝑥1 − 𝑢(𝑡)
𝑀ℓ 𝑀ℓ
(𝑚 ) 1
𝑥̇ 4 = − 𝑔𝑥1 + 𝑢(𝑡)
𝑀ℓ 𝑀
Ingresando los datos en el octave
function GA()
to=0; % start time
tf=5; % end time
t=linspace(to,tf,100);
yo(1)=1; % initial condition
yo(2)=0;
yo(3)=0.01;
yo(4)=0;
[t,ydot] = ode45(@(t,y)nonlinear(t,y),t,yo);
subplot(2,2,1);
plot(t,ydot(:,1))
title('x');
subplot(2,2,2);
plot(t,ydot(:,2))
title('xdot');
subplot(2,2,3);
plot(t,ydot(:,3))
title('teta');
subplot(2,2,4);
plot(t,ydot(:,4))
title('tetadot');
2. Repetir lo anterior con método de integración numérica Runge Kutta, codificado por
usted mismo. Este método debe ser genérico; o sea, una función parecida a ODE45
que permita resolver cualquier sistema multivariable y no lineal (ver _gura 2 para
representación en diagrama de bloque).
function Yn=intentoNERV()
clear
clc
yo(1)=1; % initial condition
yo(2)=0;
yo(3)=0.01;
yo(4)=0;
pvi = yo';
h = 0.05;
Yn = [pvi(1); pvi(2); pvi(3); pvi(4)];
to=0;
tf=5;
for x = to:h:tf-h
[pvi] = rk4(@(t,y)nonlinear(x,y),x,pvi,h);
Yn = [Yn(1,:) pvi(1);
Yn(2,:) pvi(2);
Yn(3,:) pvi(3);
Yn(4,:) pvi(4)];
endfor
t=to:h:tf;
Yn=Yn';
subplot(2,2,1);
plot(t,Yn(:,1))
title('x');
subplot(2,2,2);
plot(t,Yn(:,2))
title('xdot');
subplot(2,2,3);
plot(t,Yn(:,3))
title('teta');
subplot(2,2,4);
plot(t,Yn(:,4))
title('tetadot');
endfunction
3. Linealizar el modelo de péndulo y obtener controladores PIDs para controlar la posición del
carro y en ángulo del péndulo (ver _gura 3 para representación en diagrama de bloques).
clear
clc
M = 2;
m = 0.1;
l = 0.32;
g = 9.81;
s = tf('s');
P_pend = (-1)/(M*l*s^2-(M+m)*g)
Kp = -80;
Ki = -15;
Kd = -20;
C = pid(Kp,Ki,Kd);
T = feedback(P_pend,C);
t=0:0.01:1;
subplot(2,1,1)
impulse(T,t)
title({'Response of Pendulum Position to an Impulse Disturbance';'under PID Control: Kp = -
80, Ki = -15, Kd = -20'});
t = 0:0.01:1;
subplot(2,1,2)
impulse(T2, t);
title({'Respuesta del carro a un impulso con control PID'});
%T3 = feedback(1,P_pend*C)*feedback(1,P_cart*C2);
%t = 0:0.01:10;
%impulse(T3, t);
%title({'Response of Cart Position to an Impulse Disturbance';'under PID Control: Kp = 100,
Ki = 1, Kd = 20'});