单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)
建模
牛頓法
有空再寫
拉格朗日方程法
首先我們先確定廣義坐標(biāo),并同時計算出來擺桿的轉(zhuǎn)動慣量
接著列拉格朗日方程
計算動能(轉(zhuǎn)動動能)
?計算勢能(取鉸鏈處為零勢能高度):
?計算L
計算拉格朗日方程中的中間量?
?將上述的中間量帶入拉格朗日方程,得到動力學(xué)模型:
變換一下形式:
?當(dāng)角度較小時
我們可以假設(shè)角度比較小,因為控制一般都是在平衡點附近。
這時,然后得出下面的狀態(tài)空間方程。
當(dāng)角度較大時
經(jīng)常情況下角度沒有那么小,這個時候我們就不能假設(shè),所以就得到非線性的控制系統(tǒng)。
所以這個時候我們這樣操作,將這個二階微分方程轉(zhuǎn)化成一階微分方程組,這樣就可以用matlab的ode45微分方程求解器求取數(shù)值解,求得的數(shù)值解即為系統(tǒng)狀態(tài)?y。然后得到系統(tǒng)狀態(tài)之后,控制器基于當(dāng)前狀態(tài)計算輸入,再施加給執(zhí)行器進(jìn)行控制。
?matlab仿真
?我們先把微分方程求解器做出來:
直接把g=9.8,l=1和u=0帶入式子;
[t,y] = ode45(@odeBai,[0 10],[1;0]); plot(t,y(:,1),'-o',t,y(:,2),'-o');function dy = odeBai(t,y)dy = zeros(2,1);dy(1) = y(2);dy(2) = -3 * 9.8 / ( 2 * 1 )*sin(y(1))+0; end從圖片也可能看出規(guī)律:
這下,我們就求出來了位置(角度)時間曲線和速度(角速度)時間曲線。
然后,我們做一個控制器,把輸入加上去。
控制器代碼:
總程序代碼:
clear all; clc;[t,y] = ode45(@odeBai,[0 10],[1;0]); plot(t,y(:,1),'-o',t,y(:,2),'-o');function dy = odeBai(t,y)dy = zeros(2,1);tau = PIDController(t,y);dy(1) = y(2);dy(2) = -3 * 9.8 / ( 2 * 1 )*sin(y(1)) + 3 * tau /(1*1*1); endfunction tau=PIDController(t,y) % 目標(biāo)狀態(tài) y1_desire = pi/4; y2_desire = 0; % 控制增益 Kp = 1000; Kd = 500; % 控制力矩 tau = Kp*(y1_desire-y(1))+Kd*(y2_desire-y(2)); end仿真圖像如下:可以彈道藍(lán)線逐漸逼近pi/4即45度的位置,而橙線從較大的值趨于0,即速度最終為0.?
代碼:
clear all; clc;global m l g m = 1; l = 1; g = 9.8;[t,y] = ode45(@odeBai,[0 10],[-1;0]); figure(1); plot(t,y(:,1),'-o',t,y(:,2),'-o');figure(2); x0=0; y0=0;v = VideoWriter('Pen.avi'); open(v);for k=1:200:size(t)x1=l*cos(y(k,1));y1=l*sin(y(k,1));link1_x=[0,x1];link1_y=[0,y1];line(link1_x,link1_y,'linewidth',2,'color','b')axis equalaxis([-1.55 1.55 -1.55 0.55])grid on;hold on;plot(x0,y0,'o','linewidth',2,'color','r');frame = getframe(gcf);writeVideo(v,frame);clf; end close(v);function dy = odeBai(t,y)dy = zeros(2,1);tau = PIDController(t,y);dy(1) = y(2);dy(2) = -3 * 9.8 / ( 2 * 1 )*sin(y(1)) + 3 * tau /(1*1*1); endfunction tau=PIDController(t,y) % 目標(biāo)狀態(tài) y1_desire = -pi/4; y2_desire = 0; % 控制增益 Kp = 1000; Kd = 500; % 控制力矩 tau = Kp*(y1_desire-y(1))+Kd*(y2_desire-y(2)); end參考鏈接
1.matlab動力學(xué)建模與simscape驗證(代碼) - 嗶哩嗶哩
總結(jié)
以上是生活随笔為你收集整理的单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS如何让DIV的宽度随内容的变化
- 下一篇: WordPress 数据库结构及表字段作