Desejo simular o comportamento de um sistema semelhante ao pêndulo duplo. O sistema é um manipulador de robôs de 2 graus de liberdade que não é acionado e, portanto, se comportará principalmente como um pêndulo duplo afetado pela gravidade. A única diferença principal com um pêndulo duplo é que ele é composto por dois corpos rígidos com propriedades de massa e inércia em seus centros de massa.
Basicamente, programei ode45
no Matlab para resolver um sistema de ODEs do seguinte tipo:
onde é o ângulo do primeiro corpo em relação à horizontal, é a velocidade angular do primeiro corpo; é o ângulo do segundo corpo em relação ao primeiro corpo e é a velocidade angular do segundo corpo. Todos os coeficientes são especificados no código a seguir, nas funções e que eu criei.rhs
fMass
clear all
opts= odeset('Mass',@fMass,'MStateDependence','strong','MassSingular','no','OutputFcn',@odeplot);
sol = ode45(@(t,x) rhs(t,x),[0 5],[pi/2 0 0 0],opts);
function F=rhs(t,x)
m=[1 1];
l=0.5;
a=[0.25 0.25];
g=9.81;
c1=cos(x(1));
s2=sin(x(3));
c12=cos(x(1)+x(3));
n1=m(2)*a(2)*l;
V1=-n1*s2*x(4)^2-2*n1*s2*x(2)*x(4);
V2=n1*s2*x(2)^2;
G1=m(1)*a(1)*g*c1+m(2)*g*(l*c1+a(2)*c12);
G2=m(2)*g*a(2)*c12;
F(1)=x(2);
F(2)=-V1-G1;
F(3)=x(4);
F(4)=-V2-G2;
F=F';
end
function M=fMass(t,x)
m=[1 1];
l=0.5;
Izz=[0.11 0.11];
a=[0.25 0.25];
c2=cos(x(3));
n1=m(2)*a(2)*l;
M11=m(1)*a(1)^2+Izz(1)+m(2)*(a(2)^2+l^2)+2*n1*c2+Izz(2);
M12=m(2)*a(2)^2+n1*c2+Izz(2);
M22=m(2)*a(2)^2+Izz(2);
M=[1 0 0 0;0 M11 0 M12;0 0 1 0;0 M12 0 M22];
end
Observe como eu defino a condição inicial de (ângulo do primeiro corpo em relação à horizontal) para que o sistema inicie na posição completamente vertical. Dessa forma, como apenas a gravidade está atuando, o resultado óbvio é que o sistema não deve se mover de nenhuma maneira a partir dessa posição.
NOTA: em todos os gráficos abaixo, plotei as soluções e com relação ao tempo.
ODE45
Quando executo a simulação por 6 segundos ode45
, obtenho a solução esperada sem problemas, o sistema permanece onde está e não se move:
No entanto, quando executo a simulação por 10 segundos, o sistema começa a se mover de maneira irracional:
ODE23
Em seguida, executei a simulação ode23
para ver se o problema persistia. Acabo com o mesmo comportamento, só que desta vez a divergência começa 1 segundo depois:
ODE15s
Em seguida, executei a simulação ode15s
para verificar se o problema persistia e não, o sistema parece estar estável mesmo durante 100 segundos:
Por outro lado, ode15s
é apenas de primeira ordem e observe que existem apenas algumas etapas de integração. Por isso, executei outra simulação ode15s
durante 10 segundos, mas com um MaxStep
tamanho de para aumentar a precisão e, infelizmente, isso leva ao mesmo resultado que com ambos e .ode45
ode23
Normalmente, o resultado óbvio dessas simulações seria que o sistema permanecesse em sua posição inicial, pois nada o perturba. Por que esta divergência está ocorrendo? Tem algo a ver com o fato de que esse tipo de sistema é de natureza caótica? Esse é um comportamento normal para ode
funções no Matlab?
x1
e x3
. (Insira um comentário seco sobre gráficos sem legendas ou descrições.) Tente plotar os logaritmos de (os valores absolutos de) x2
e x4
.