单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)
建模
牛頓法
有空再寫(xiě)
拉格朗日方程法
首先我們先確定廣義坐標(biāo),并同時(shí)計(jì)算出來(lái)擺桿的轉(zhuǎn)動(dòng)慣量
接著列拉格朗日方程
計(jì)算動(dòng)能(轉(zhuǎn)動(dòng)動(dòng)能)
?計(jì)算勢(shì)能(取鉸鏈處為零勢(shì)能高度):
?計(jì)算L
計(jì)算拉格朗日方程中的中間量?
?將上述的中間量帶入拉格朗日方程,得到動(dòng)力學(xué)模型:
變換一下形式:
?當(dāng)角度較小時(shí)
我們可以假設(shè)角度比較小,因?yàn)榭刂埔话愣际窃谄胶恻c(diǎn)附近。
這時(shí),然后得出下面的狀態(tài)空間方程。
當(dāng)角度較大時(shí)
經(jīng)常情況下角度沒(méi)有那么小,這個(gè)時(shí)候我們就不能假設(shè),所以就得到非線(xiàn)性的控制系統(tǒng)。
所以這個(gè)時(shí)候我們這樣操作,將這個(gè)二階微分方程轉(zhuǎn)化成一階微分方程組,這樣就可以用matlab的ode45微分方程求解器求取數(shù)值解,求得的數(shù)值解即為系統(tǒng)狀態(tài)?y。然后得到系統(tǒng)狀態(tài)之后,控制器基于當(dāng)前狀態(tài)計(jì)算輸入,再施加給執(zhí)行器進(jìn)行控制。
?matlab仿真
?我們先把微分方程求解器做出來(lái):
直接把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ī)律:
這下,我們就求出來(lái)了位置(角度)時(shí)間曲線(xiàn)和速度(角速度)時(shí)間曲線(xiàn)。
然后,我們做一個(gè)控制器,把輸入加上去。
控制器代碼:
總程序代碼:
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)線(xiàn)逐漸逼近pi/4即45度的位置,而橙線(xiàn)從較大的值趨于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動(dòng)力學(xué)建模與simscape驗(yàn)證(代碼) - 嗶哩嗶哩
總結(jié)
以上是生活随笔為你收集整理的单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CSS如何让DIV的宽度随内容的变化
- 下一篇: 一维有限元法matlab,有限元matl