Está en la página 1de 9

Modelado y simulación de un sistema de péndulo doble mediante

Euler-Lagrange y MATLAB
M.C. Jairo Caı́n Sánchez Estrada

Resumen
En este trabajo se desarrolla el procedimiento mediante el enfoque de Euler-Lagrange para la obtención del
modelo del péndulo doble. Las ecuaciones obtenidas del modelo se solucionan numéricamente con el método de
integración de Runge-Kutta, método que es implementado en MATLAB mediante la función ODE45.

1. Configuración del péndulo doble


Un péndulo doble o doble péndulo es un sistema compuesto por dos péndulos, con el segundo colgando del extremo
del primero.

Figura 1: Configuración del péndulo doble.

Para el modelado se considerará la configuración del péndulo que se muestra en la figura (1). Este es un sistema
de dos grados de libertad en el cual se desprecian tanto la fricciones como las masas de las cuerdas que sujetan a las
masas. Los angulos θ1 y θ2 , que estan con respecto al eje y de las ordenadas, son las coordenadas generalizadas del
sistema. El punto donde se sostiene la cuerda de la primer masa será el punto de energı́a potencial cero y se supondrá
que las lineas de acción del campo gravitatorio son paralelas al eje y de las ordenadas.

2. Modelado Euler-Lagrange
2.1. Posición y velocidades del sistema
A partir de consideraciones trigonométricas del esquema de la figura (1) se escriben las expresiones de las posiciones
x1 , y1 , x2 , y2 en términos de los ángulos θ1 y θ2 paras las masas m1 y m2 respectivamente:

x1 =l1 sin (θ1 (t)) (1)


x2 =l1 sin (θ1 (t)) + l2 sin (θ2 (t)) (2)
y1 = − l1 cos (θ1 (t)) (3)
y2 = − l1 cos (θ1 (t)) − l2 cos (θ2 (t)) (4)

1
Derivando con respecto al tiempo se obtiene:
 
d
ẋ1 =l1 θ1 (t) cos (θ1 (t)) (5)
dt
   
d d
ẋ2 =l1 θ1 (t) cos (θ1 (t)) + l2 θ2 (t) cos (θ2 (t)) (6)
dt dt
 
d
ẏ1 =l1 θ1 (t) sin (θ1 (t)) (7)
dt
   
d d
ẏ2 =l1 θ1 (t) sin (θ1 (t)) + l2 θ2 (t) sin (θ2 (t)) (8)
dt dt

las cuales representan las velocidades en el eje x y y de las masas m1 y m2 . La velocidad tangencial esta dada por:

v 2 = ẋ2 + ẏ 2 (9)

por lo tanto las velocidades tangenciales v1 y v2 de las masas corresponden a:


 2
d
v12 = θ1 (t) l1 2 (10)
dt
    2  2
d d d 2 d
2
v2 =2 θ2 (t) θ1 (t) l1 l2 cos (θ1 (t) − θ2 (t)) + θ2 (t) l2 + θ1 (t) l1 2 (11)
dt dt dt dt

2.2. Energı́a cinética y potencial del sistema


La energı́a cinética T de una particula es aquella energı́a que posee debido a su movimiento y esta dada por:
1
T = mv 2 (12)
2
mientras que la energı́a cinética de un sistema es la suma de todas las energı́as cinéticas de sus particulas. Por lo
tanto, la energı́a cinética del péndulo doble esta dada por la sumatoria de la energı́a cinética de la masa m1 y m2 :
 2
1 d
TT = m1 θ1 (t) l1 2
2 dt
    2  2 !
1 d d d 2 d
+ m2 2 θ2 (t) θ1 (t) l1 l2 cos (θ1 (t) − θ2 (t)) + θ2 (t) l2 + θ1 (t) l1 2 (13)
2 dt dt dt dt

La energı́a potencial esta asociada a la localización de un cuerpo dentro de un campo de fuerzas (gravitatoria,
electrostática, etc.) o a la existencia de un campo de fuerzas en el interior de un cuerpo (energı́a elástica). En el caso
del sistema del doble péndulo, este solo tiene energı́a potencial debido al campo gravitatorio. La energı́a potencial
gravitacional esta dada por:
U = mgh (14)
donde h es la altura con respecto al punto de energı́a potencial cero. La energı́a potencial de la masa m1 y m2 estan
dadas por:

U1 = − m1 gl1 cos (θ1 (t)) (15)


U2 =m2 g (−l1 cos (θ1 (t)) − l2 cos (θ2 (t))) (16)

y la energı́a potencial del sistema es la suma de las energı́as potenciales de cada particula. Por lo tanto, la energı́a
potencial total del doble péndulo es:

UT = − m1 gl1 cos (θ1 (t)) + m2 g (−l1 cos (θ1 (t)) − l2 cos (θ2 (t))) . (17)

2
2.3. Ecuaciones de movimiento de Lagrange
La ecuación de Euler-Lagrange obtenida a partir de la teorı́a de variaciones:
 
d ∂L ∂L
− =0 (18)
dt ∂ q̇ ∂q

modela un sistema en el cual la energı́a aparece solamente como energı́a cinética y potencial, a tales sistemas se les
conoce como sistemas conservativos. En la ecuación (18) L representa el lagrangiano del sistema definido como:

L=T −U (19)

El lagrangiano en forma general es una función de qi , q̇i (i = 1, 2, · · · , n) y del tiempo t, o bien

L = L(qi , q̇i , t) i = 1, 2, · · · , n (20)

donde qi representa las n coordenadas generalizadas y q̇i sus primeras derivadas. El lagrangiano del sistema de doble
péndulo esta dado por:
  
d d
L= θ1 (t) θ2 (t) cos (θ1 (t) − θ2 (t)) l1 l2 m2
dt dt
 2
1 2 d
+ l1 (m1 + m2 ) θ1 (t)
2 dt
 2
1 d
+ θ2 (t) l2 2 m2 + (l1 (m1 + m2 ) cos (θ1 (t)) + cos (θ2 (t)) l2 m2 ) g (21)
2 dt

Por lo tanto para encontrar las ecuaciones de movimiento del sistema se deben obtener:
 
d ∂L ∂L
− =0 (22)
dt ∂ θ˙1 ∂θ1
 
d ∂L ∂L
− =0 (23)
dt ∂ θ˙2 ∂θ2
Las ecuaciones de Lagrange serán entonces:
2
d2
  
d
l2 m2 θ2 (t) cos (θ1 (t) − θ2 (t)) + l2 m2 θ2 (t) sin (θ1 (t) − θ2 (t))
dt2 dt
d2
 
+ (m1 + m2 ) g sin (θ1 (t)) + l1 2 θ1 (t) = 0 (24)
dt
(25)
2
d2
  
d
−l1 θ1 (t) sin (θ1 (t) − θ2 (t)) + l1 θ 1 (t) cos (θ1 (t) − θ2 (t))
dt dt2
 2 
d
+l2 θ 2 (t) + g sin (θ2 (t)) = 0 (26)
dt2

3. Simulación del sistema de péndulo doble


3.1. Simulación en MATLAB
Para poder simular el comportamiento del sistema es necesario tener representado al sistema en espacios de estados.
Para mayor facilidad primero se representa al sistema de forma matricial:

(m1 + m2 )l1 l2 m2 cos(θ1 − θ2 ) θ¨1 −l2 m2 θ˙2 sin(θ1 − θ2 ) θ˙1


     
0 (m1 + m2 )g sin(θ1 )
= − (27)
l1 cos(θ1 − θ2 ) l2 θ¨2 l1 θ˙1 sin(θ1 − θ2 ) 0 θ˙2 g sin(θ2 )

3
Renombrando a la primer matriz de la ecuación (27) como M , a la segunda matriz como C y a la tercera como G,
entonces el sistema se puede reescribir como:
M θ̈ = C θ̇ − G (28)
Por lo tanto si se elige el cambio de variable:

x1 = θ 1
x2 = θ˙1
x3 = θ 2
x4 = θ˙2 (29)

el sistema queda representado en espacios de estados de la siguiente forma:

ẋ1 = x2
ẋ3 = x4
   
x˙2 x
= M −1 C 2 − G (30)
x˙4 x4

de esta manera es posible utilizar la función ode45 de matlab para integrar la ecuación diferencial. Los resultados de
la simulación del sistema para los valores de las constantes: m1 = 5kg, m2 = 5kg, l1 = 1m, l2 = 1m, g = 9,81 sm2 y
condiciones iniciales: θ1 = 60◦ , θ2 = 90◦ , θ̇1 = 0, θ̇2 = 0 se muestran en las figuras (2), (3), (4) y (5).

3.2. Código de la simulación en MATLAB


Los siguientes archivos muestran el código que implementa la integración númerica de las ecuaciones diferenciales
que modelan el sistema, ası́ como el calculo de las energias cinéticas y potenciales del sistema. También se visualiza
una representación arcaica del movimiento del pendulo.

Archivo principal que manda llamar a la función ode45, encargada de la integracion númerica ”Main.m”.

1 clc
2 clear all
3 close all
4
5 global T
6 %Periodo
7 angulosoltado=90;
8 T=7;
9 %tiempo
10 t=0:0.1:T;
11
12 Opciones=1;
13 %size(t);
14
15
16 [tPend,yPend]=ode23tb(@PendDynamics,[0 T],[angulosoltado*pi/180 0 pi/2 0]);
17 Mostrar Resultados(tPend,yPend.',Opciones)

Archivo que se encarga de mostrar graficamente los estados y energias del sistema ”Mostrar Resultados.m”.

1 function Mostrar Resultados(t,yout,Opciones)


2
3 global T
4 global t
5 global Pendulo
6 global Pointq1 Pointq2
7 global Pointdq1 Pointdq2

4
8 global Pointkm1 Pointkm2
9 global Pointvm1 Pointvm2
10 global km1 km2 vm1 vm2
11 global x1 x2 y1 y2
12 global q1 dq1 q2 dq2
13 global i
14 global EditT
15 global SliderT
16
17 global Play
18
19 MainFigure=figure('Name','Simulacion Dinamica Pendulo', 'units', 'normalized',...
20 'position',[0.1 0.05 0.8 0.85]);
21
22 Animacion=subplot('position',[.05 0.73 0.25 0.25]);
23
24 g=9.81;
25 tau1=0;
26 tau2=0;
27 m1=5;
28 m2=5;
29 l1=1;
30 l2=l1;
31
32 q1=yout(1,:);
33 dq1=yout(2,:);
34 q2=yout(3,:);
35 dq2=yout(4,:);
36
37 x1=l1*sin(q1);
38 y1=−l1*cos(q1);
39 x2=l1*sin(q1)+l2*(sin(q2));
40 y2=−l1*cos(q1)−l2*(cos(q2));
41
42
43 km1=0.5*m1*l1*l1*dq1.*dq1;
44 km2=0.5*m2*((l2*l2*dq2.*dq2)+(l1*l1*dq1.*dq1)+(2*l1*l2*cos(q1−q2).*dq2.*dq1));
45
46 vm1=m1*g*l1*(1−cos(q1));
47 vm2=m2*g*(l1*(1−cos(q1))+l2*(1−cos(q2)) );
48
49
50 Pendulo=plot([0 x1(1),x1(1) x2(1)],[0 y1(1),y1(1) y2(1)],'−ob',...
51 'MarkerFaceColor','m','linewidth',1,'MarkerSize',5);
52 grid on;
53 axis([−5 5 −5 5]);
54 axis square;
55 xlabel('x');
56 ylabel('y');
57
58 subplot('position',[0.05 0.55 0.4 0.1])
59 Plotq1=plot(t,q1);
60 hold on
61 Pointq1=plot(t(1),q1(1),'o','MarkerFaceColor','r','MarkerEdgeColor','k');
62 xlabel('t');
63 ylabel('q1');
64
65 subplot('position',[0.05 0.39 0.4 0.1])
66 Plotdq1=plot(t,dq1);
67 hold on
68 Pointdq1=plot(t(1),dq1(1),'o','MarkerFaceColor','r','MarkerEdgeColor','k');
69 xlabel('t');
70 ylabel('dq1');
71
72 subplot('position',[0.05 0.23 0.4 0.1])
73 Plotq2=plot(t,q2);
74 hold on
75 Pointq2=plot(t(1),q2(1),'o','MarkerFaceColor','r','MarkerEdgeColor','k');
76 xlabel('t');
77 ylabel('q2');

5
78
79 subplot('position',[0.05 0.07 0.4 0.1])
80 Plotdq2=plot(t,dq2);
81 hold on
82 Pointdq2=plot(t(1),dq2(1),'o','MarkerFaceColor','r','MarkerEdgeColor','k');
83 xlabel('t');
84 ylabel('dq2');
85
86
87 subplot('position',[0.55 0.55 0.4 0.1])
88 Plotkm1=plot(t,km1);
89 hold on
90 Pointkm1=plot(t(1),km1(1),'o','MarkerFaceColor','r','MarkerEdgeColor','k');
91 xlabel('t');
92 ylabel('km1');
93
94 subplot('position',[0.55 0.39 0.4 0.1])
95 Plotvm1=plot(t,vm1);
96 hold on
97 Pointvm1=plot(t(1),vm1(1),'o','MarkerFaceColor','r','MarkerEdgeColor','k');
98 xlabel('t');
99 ylabel('vm1');
100
101 subplot('position',[0.55 0.23 0.4 0.1])
102 Plotkm2=plot(t,km2);
103 hold on
104 Pointkm2=plot(t(1),km2(1),'o','MarkerFaceColor','r','MarkerEdgeColor','k');
105 xlabel('t');
106 ylabel('km2');
107
108 subplot('position',[0.55 0.07 0.4 0.1])
109 Plotvm2=plot(t,vm2);
110 hold on
111 Pointvm2=plot(t(1),vm2(1),'o','MarkerFaceColor','r','MarkerEdgeColor','k');
112 xlabel('t');
113 ylabel('vm2');
114
115
116
117 SliderT=uicontrol('units','normalized','position',[0.30 0.9 0.65 0.02],...
118 'style','slider','min',0,'max',(max(t)),'value',0,'callback','plot i(gcbo)');
119 EditT=uicontrol('units','normalized','position',[0.60 0.8 0.1 0.05],...
120 'style','edit','string','0');
121
122 Play=1;
123 for i=1:length(t)−1
124 plot pendulo(i)
125 if not(Play)
126 break;
127 end
128 end

Archivo que contiene el modelo de la dinámica del sistema ”PendDynamics.m”.

1 function dy=PendDynamics(t,y)
2
3 g=9.81;
4 tau1=0;
5 tau2=0;
6 m1=5;
7 m2=5;
8 l1=1;
9 l2=1;
10
11 m11=(m1+m2)*l1;

6
12 m12=l2*m2*cos(y(1)−y(3));
13 m21=l1*cos(y(1)−y(3));
14 m22=l2;
15
16 M=[m11 m12; m21 m22];
17
18 c1=0;
19 c2=m2*l2*y(4)*sin(y(1)−y(3));
20 c3=−l1*y(2)*sin(y(1)−y(3));
21 c4=0;
22
23 C=[c1 c2; c3 c4];
24
25 g1=(m1+m2)*g*sin(y(1));
26 g2=g*sin(y(3));
27
28 G=[g1;g2];
29
30 dq=[y(2);y(4)];
31
32 tau=[tau1;tau2];
33
34 ddq=M\(tau−C*dq−G);
35
36 dy=zeros(4,1);
37
38 dy(1)=y(2);
39 dy(2)=ddq(1);
40 dy(3)=y(4);
41 dy(4)=ddq(2);

Archivo que actualiza las graficas ”plot i.m”.

1 function plot i(SliderVar)


2 global t
3 % global Pendulo
4 % global Pointq1
5 % global Pointdq1
6 % global x y
7 % global q1 dq1
8 % global EditT
9 % global SliderT
10 global i
11 global Play
12 disp('HERE');
13
14 Play=0;
15 t Slider=get(SliderVar,'Value');
16 i=find(t≥t Slider);
17 i=i(1);
18 plot pendulo(i);

Archivo que actualiza las graficas ”plot pendulo.m”.

1 function plot pendulo(i)


2 global t
3 global Pendulo
4 global Pointq1 Pointq2
5 global Pointdq1 Pointdq2
6 global Pointkm1 Pointkm2
7 global Pointvm1 Pointvm2

7
8 global x1 y1 x2 y2
9 global q1 dq1 q2 dq2
10 global km1 km2 vm1 vm2
11 global EditT
12 global SliderT
13
14 TStep=t(2)−t(1);
15 set(Pendulo,'XData',[0 x1(i), x1(i) x2(i) ],'YData',[0 y1(i), y1(i) y2(i)]);
16 set(Pointq1,'XData',t(i),'YData',q1(i));
17 set(Pointdq1,'XData',t(i),'YData',dq1(i));
18 set(Pointq2,'XData',t(i),'YData',q2(i));
19 set(Pointdq2,'XData',t(i),'YData',dq2(i));
20 set(Pointkm1,'XData',t(i),'YData',km1(i));
21 set(Pointvm1,'XData',t(i),'YData',vm1(i));
22 set(Pointkm2,'XData',t(i),'YData',km2(i));
23 set(Pointvm2,'XData',t(i),'YData',vm2(i));
24
25 %set(SliderT,'Value',i*TStep);
26 %set(EditT,'String',num2str(i*TStep));
27
28 set(SliderT,'Value',t(i));
29 set(EditT,'String',num2str(t(i)));
30 drawnow;
31 pause(0.002);

(a) (b)

Figura 2: Posiciones angulares obtenidas de la simulación de la dinámica del péndulo doble.

8
(a) (b)

Figura 3: velocidades angulares obtenidas de la simulación de la dinámica del péndulo doble.

(a) (b)

Figura 4: Energias potenciales obtenidas de la simulación de la dinámica del péndulo doble.

(a) (b)

Figura 5: Energias cinéticas obtenidas de la simulación de la dinámica del péndulo doble.

También podría gustarte