Modelagem de Pêndulos Acoplados em MATLAB

Introdução

Os sistemas de pêndulos acoplados, também conhecidos como pêndulos duplos, representam uma excelente porta de entrada para o estudo de dinâmica não linear, caos determinístico e simulações numéricas. Além de terem aplicações em engenharia mecânica e aeroespacial, eles são fundamentais para a compreensão de fenômenos complexos em sistemas dinâmicos.

Neste artigo, você aprenderá como modelar um pêndulo duplo em MATLAB, utilizando o toolbox simbólico para extrair os pontos de equilíbrio, linearizar o sistema e, por fim, integrar numericamente as equações diferenciais com o solver ode45.

1. Sistema de Equações Diferenciais do Pêndulo Duplo

Vamos considerar o sistema clássico de dois pêndulos conectados, com massas m_1 e m_2, comprimentos L_1​ e L_2​, sujeitos à gravidade -g. Os ângulos \theta_1​ e \theta_2​ são medidos da vertical para cada haste, com sentido positivo horário.

As equações diferenciais não lineares que governam o movimento são:

    \[A =\frac{-g(2m_1 + m_2)\sin(\theta_1)-m_2g\sin(\theta_1 - 2\theta_2)}{L_1 \left( 2m_1 + m_2 - m_2 \cos(2\theta_1 - 2\theta_2) \right)}\]

    \[B =\frac{-2\sin(\theta_1 - \theta_2)m_2 \left( \dot{\theta}_2^2 L_2 + \dot{\theta}_1^2 L_1 \cos(\theta_1 - \theta_2) \right)}{L_1 \left( 2m_1 + m_2 - m_2 \cos(2\theta_1 - 2\theta_2) \right)}\]

    \[\ddot{\theta}_1 = A + B\]

    \[\ddot{\theta}_2 =\frac{2 \sin(\theta_1 - \theta_2) \left(\dot{\theta}_1^2 L_1 (m_1 + m_2)+ g(m_1 + m_2)\cos(\theta_1)+ \dot{\theta}_2^2 L_2 m_2 \cos(\theta_1 - \theta_2)\right)}{L_2 \left( 2m_1 + m_2 - m_2 \cos(2\theta_1 - 2\theta_2) \right)}\]

2. Pontos de Equilíbrio e Linearização Simbólica no MATLAB

Com o Symbolic Math Toolbox, podemos encontrar os pontos de equilíbrio do sistema e realizar a linearização ao redor desses pontos.

Pontos de equilíbrio

Usando o MATLAB:

syms theta1 theta2 dtheta1 dtheta2 ddtheta1 ddtheta2 real
syms m1 m2 L1 L2 g real

% Equações do pêndulo duplo (não lineares)

delta = theta1 - theta2;

eq1 = ddtheta1 == ...
    (-g*(2*m1 + m2)*sin(theta1) ...
    - m2*g*sin(theta1 - 2*theta2) ...
    - 2*sin(delta)*m2*(dtheta2^2*L2 + dtheta1^2*L1*cos(delta))) ...
    / (L1*(2*m1 + m2 - m2*cos(2*delta)));

eq2 = ddtheta2 == ...
    (2*sin(delta)*(dtheta1^2*L1*(m1 + m2) ...
    + g*(m1 + m2)*cos(theta1) ...
    + dtheta2^2*L2*m2*cos(delta))) ...
    / (L2*(2*m1 + m2 - m2*cos(2*delta)));

% Encontrar os pontos de equilíbrio com velocidades e acelerações nulas
% (condição: sistema em repouso e sem movimento angular)
eq1_rhs = rhs(eq1);
eq2_rhs = rhs(eq2);

sol = solve([eq1_rhs == 0, eq2_rhs == 0, dtheta1 == 0, dtheta2 == 0], [theta1, theta2]);
disp(sol)

Um dos principais pontos de equilíbrio é:

  • \theta_1 = 0, \theta_2 = 0 (ambos os pêndulos na posição vertical para baixo).

Linearização

Expandimos a equação ao redor do ponto de equilíbrio utilizando série de Taylor de primeira ordem (aproximação linear):

A = jacobian([dtheta1; dtheta2; eq1; eq2], [theta1; theta2; dtheta1; dtheta2]);
A_eq = subs(A, {theta1, theta2, dtheta1, dtheta2}, {0, 0, 0, 0});

Assim, obtemos o sistema linearizado:

    \[\dot{x} = A x\]

Com x = [\theta_1, \theta_2, \dot{\theta}_1, \dot{\theta}_2]^T

3. Integração com ode45 no MATLAB

Agora, vamos integrar numericamente o sistema original sem ser linearizado para os seguintes parâmetros:

  • m1=m2=1kg
  • L1​=L2​=0.5m
  • \theta_1(0) = \frac{\pi}{6}, \quad \theta_2(0) = 0
  • \dot{\theta}_1(0) = \dot{\theta}_2(0) = 0

Código MATLAB:

function dtheta = pendulo_duplo(t, theta)
    % Parâmetros do sistema
    m1 = 1; m2 = 1;
    L1 = 0.5; L2 = 0.5;
    g = 9.81;

    % Estados do sistema
    theta1 = theta(1);
    theta2 = theta(2);
    dtheta1 = theta(3);
    dtheta2 = theta(4);

    delta = theta1 - theta2;

    % Denominador comum
    denom = 2*m1 + m2 - m2*cos(2*delta);

    % Equações diferenciais completas (não linearizadas)
    ddtheta1 = ( ...
        -g*(2*m1 + m2)*sin(theta1) ...
        - m2*g*sin(theta1 - 2*theta2) ...
        - 2*sin(delta)*m2*(dtheta2^2*L2 + dtheta1^2*L1*cos(delta)) ...
        ) / (L1*denom);

    ddtheta2 = ( ...
        2*sin(delta)*( ...
            dtheta1^2*L1*(m1 + m2) ...
            + g*(m1 + m2)*cos(theta1) ...
            + dtheta2^2*L2*m2*cos(delta) ...
        ) ...
        ) / (L2*denom);

    % Sistema de primeira ordem
    dtheta = [dtheta1; dtheta2; ddtheta1; ddtheta2];
end

% Script de simulação
% Condições iniciais: [theta1; theta2; dtheta1; dtheta2]
theta0 = [pi/6; 0; 0; 0];
tspan = [0 10];

% Integração com ode45
[t, theta] = ode45(@pendulo_duplo, tspan, theta0);

% Plotagem dos resultados
figure
plot(t, theta(:,1), 'r', 'LineWidth', 1.5)
hold on
plot(t, theta(:,2), 'b', 'LineWidth', 1.5)
legend('\theta_1(t)', '\theta_2(t)')
xlabel('Tempo (s)')
ylabel('Ângulo (rad)')
title('Resposta temporal dos pêndulos acoplados (não linear)')
grid on

Conclusão

Neste artigo, você aprendeu como modelar, linearizar e simular numericamente o comportamento de um pêndulo duplo usando MATLAB. A análise mostrou como sistemas mecânicos aparentemente simples podem apresentar comportamentos complexos e sensíveis às condições iniciais, destacando a riqueza da dinâmica não linear.

Posts Similares

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *