MATLAB을 사용하여 바퀴 형 도립 진자의 운동 방정식 도출
이 기사를 통해 MATLAB을 이용하여 복잡한 미분 방정식을 풀 수 있다는 것을 실감해 주시면 좋겠습니다.
전치
트랜지스터 기술 7월호 에 차륜형 도립 진자의 수학 모델의 상세한 도출이 쓰여져 있으므로, 이 기사에서는 도중식의 해설은 하지 않습니다. 7월호에는 수학이나 역학에 관한 정중한 해설이 많이 막혀 있으므로, 1권 가지고 두어 손해는 없다고 생각합니다. 사자. 웃음
바퀴 형 도립 진자의 각 파라미터
MATLAB에 도출해 주는 운동 방정식에 포함되는 「위치 에너지」와 「운동 에너지」에 대해서, 「진자」와 「바퀴」의 2개의 관점으로부터 도출해 갑니다.
바퀴 형 도립 진자의 물리량
〇바퀴(wheel)의 물리량
바퀴의 무게 중심 좌표를 $(x_w, y_w)$로 한다.
무게 중심 좌표
\left\{
\begin{array}{ll}
x_w = r_w(\theta_p + \theta_w) \\
y_w = 0
\end{array}
\right.
무게 중심 속도
\left\{
\begin{array}{ll}
\dot{x}_w = r_w(\dot{\theta}_p + \dot{\theta}_w) \\
\dot{y}_w = 0
\end{array}
\right.
병진 운동 에너지
K_{w1} = \frac{1}{2}m_w\dot{x}_w^2 +\frac{1}{2}m_w\dot{y}_w^2 \\
= \frac{1}{2}m_wr_w^2(\dot{\theta}_p + \dot{\theta}_w)^2
회전 운동 에너지
K_{w2} = \frac{1}{2}I_w(\dot{\theta}_p + \dot{\theta}_w)^2
위치 에너지
U_w = m_wgy_w = 0
〇진자(pendulum)의 물리량
진자의 무게 중심 좌표를 $(x_p, y_p)$로 한다.
무게 중심 좌표
\left\{
\begin{array}{ll}
x_p = x_w + r_psin(\theta_p) = r_w(\theta_p + \theta_w) + r_psin(\theta_p) \\
y_p = r_pcos(\theta_p)
\end{array}
\right.
무게 중심 속도
\left\{
\begin{array}{ll}
\dot{x}_p = r_w(\dot{\theta}_p + \dot{\theta}_w) + r_p\dot{\theta}_pcos(\theta_p) \\
\dot{y}_p = -r_p\dot{\theta}_psin(\theta_p)
\end{array}
\right.
병진 운동 에너지
K_{p1} = \frac{1}{2}m_p\dot{x}_p^2 + \frac{1}{2}m_p\dot{y}_p^2 \\
= \frac{1}{2}m_p\bigl(r_w(\dot{\theta}_p + \dot{\theta}_w) + r_p\dot{\theta}_pcos(\theta_p)\bigr)^2 + \frac{1}{2}m_p\bigl(-r_p\dot{\theta}_psin(\theta_p)\bigr)^2
회전 운동 에너지
K_{p2} = \frac{1}{2}I_p\dot{\theta}_p^2
위치 에너지
U_p = m_pgy_p = m_pgr_pcos(\theta_p)
라그랑주 운동 방정식의 도출
모델의 운동 에너지와 위치 에너지의 도출이 가능하면,
MATLAB/Symbolic Math Toolbox를 사용하여, 바퀴형 도립 진자의 라그랑주의 운동 방정식을 도출해 갑니다.
lagrange.m
clear; format compact %initialize
syms m_w r_w theta_w dtheta_w ddtheta_w I_w real % wheel
syms m_p r_p theta_p dtheta_p ddtheta_p I_p real % pendulum
syms theta_w dtheta_w ddtheta_w phi_p dphi_p ddphi_p real % radian
syms f_w g real % torque, gravity
q = [theta_w theta_p]';
dq = [dtheta_w dtheta_p]';
ddq = [ddtheta_w ddtheta_p]';
f = [f_w 0]';
%--------------------------------------------------------
x_w = r_w*(q(1) + q(2));
y_w = 0;
dx_w = diff(x_w, q(1))*dq(1) + diff(x_w, q(2))*dq(2);
dy_w = diff(x_w, q(1))*dq(1) + diff(y_w, q(2))*dq(2);
x_p = x_w + r_p*sin(q(2));
y_p = r_p*cos(q(2));
dx_p = diff(x_p, q(1))*dq(1) + diff(x_p, q(2))*dq(2);
dy_p = diff(x_p, q(1))*dq(1) + diff(y_p, q(2))*dq(2);
%--------------------------------------------------------
K_w1 = 0.5*m_w*dx_w^2 + 0.5*m_w*dy_w^2;
K_w2 = 0.5*I_w*(dq(1) + dq(2))^2;
U_w = m_w*g*y_w;
K_p1 = 0.5*m_p*dx_p^2 + 0.5*m_p*dy_p^2;
K_p2 = 0.5*I_p*dq(2)^2;
U_p = m_p*g*y_p;
L = (K_w1 + K_w2 + K_p1 + K_p2) - (U_w + U_p);
%--------------------------------------------------------
N = length(q);
for i = 1:N
dLq(i) = diff(L, dq(i));
temp = 0;
for j = 1:N
temp = temp + diff(dLq(i),dq(j))*ddq(j) + diff(dLq(i),q(j))*dq(j);
end
ddLq(i) = temp;
eq(i) = ddLq(i) - diff(L,q(i)) - f(i);
end
eq = simplify(eq')
m 파일을 실행하면 바퀴와 진자에 대한 라그랑주 운동 방정식을 도출할 수 있습니다.
출력 결과
>> lagrange
eq =
ddtheta_p*(I_w + m_w*r_w^2 + m_p*r_w*(r_w + r_p*cos(theta_p)) - m_p*r_p*r_w*sin(theta_p)) - dtheta_p*(dtheta_p*m_p*r_p*r_w*cos(theta_p) + dtheta_p*m_p*r_p*r_w*sin(theta_p)) - f_w + ddtheta_w*(I_w + 2*m_p*r_w^2 + 2*m_w*r_w^2)
I_p*ddtheta_p + I_w*ddtheta_p + I_w*ddtheta_w + ddtheta_p*m_p*r_p^2 + ddtheta_p*m_p*r_w^2 + ddtheta_w*m_p*r_w^2 + ddtheta_p*m_w*r_w^2 + ddtheta_w*m_w*r_w^2 - g*m_p*r_p*sin(theta_p) - dtheta_p^2*m_p*r_p*r_w*sin(theta_p) + 2*ddtheta_p*m_p*r_p*r_w*cos(theta_p) + ddtheta_w*m_p*r_p*r_w*cos(theta_p) - ddtheta_w*m_p*r_p*r_w*sin(theta_p)
MATLAB의 출력 결과는 수식으로 볼 수 없기 때문에 markdown의 수식 모드를 사용하여 성형했습니다.
위의 식이 바퀴, 아래의 식이 진자의 운동 방정식을 나타냅니다.
\ddot{\theta}_p(I_w + m_wr_w^2 + m_pr_w(r_w + r_pcos(\theta_p)) - m_pr_pr_wsin(\theta_p)) - \dot{\theta}_p(\dot{\theta}_pm_pr_pr_wcos(\theta_p) + \dot{\theta}_pm_pr_pr_wsin(\theta_p)) - f_w + \ddot{\theta}_w(I_w + 2m_pr_w^2 + 2m_wr_w^2) = 0\\
I_p\ddot{\theta}_p + I_w\ddot{\theta}_p + I_w\ddot{\theta}_w + \ddot{\theta}_pm_pr_p^2 + \ddot{\theta}_pm_pr_w^2 + \ddot{\theta}_wm_pr_w^2 + \ddot{\theta}_pm_wr_w^2 + \ddot{\theta}_wm_wr_w^2 - m_pgr_psin(\theta_p) - \dot{\theta}_p^2m_pr_pr_wsin(\theta_p) + 2\ddot{\theta}_pm_pr_pr_wcos(\theta_p) + \ddot{\theta}_wm_pr_pr_wcos(\theta_p) - \ddot{\theta}_wm_pr_pr_wsin(\theta_p) = 0
참고문헌
Reference
이 문제에 관하여(MATLAB을 사용하여 바퀴 형 도립 진자의 운동 방정식 도출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/qoopen0815/items/ebf1b0c5b4bd67c2ce8d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)