倒立摆PID控制及MATLAB仿真


 说明:

 全文共四个参考:

  • 终极参考,程序+仿真图+结果,但是缺少原理和文字建模过程。
  • 参考0和1重在文字部分,模型建立怎么叙述,但无实际程序。
  • 参考2重在程序部分,实际的matlab程序部分,直接上机调试。
  • 每个大参考分别给了几个小参考,以供选择。

具体看个部分内容前先全部游览下。

 

终极参考:

https://wenku.baidu.com/view/df64a8ece009581b6bd9eb2f.html

 

 

参考0   这是个题目,但是直接告诉你数学模型了,具体分析看参考1中的论文

参考一  重在借鉴论文各部分叙述,但无实际程序,不用担心,程序请看参考二。

1 倒立摆PID控制及MATLAB仿真 

关键图:

2 基于MATLAB的倒立摆控制及参数优化 

关键图截取:

 

 

 

 

 

 

 参考二  完整程序 ,自己修改数据和数学符号,配合参考一 文字叙述模块,整个问题就解决了。

下面给了两个参考程序,第二个参考程序易懂,标注清楚。你都跑一下,看看效果。

  程序1 http://ask.wenku1.com/question/%E5%80%92%E7%AB%8B%E6%91%86%E5%BB%BA%E6%A8%A1.htm

%主程序:

clear all
close all
global A B C D

g=9.8;%重力加速度
M=1.0;%小车质量
m=0.1;%杆的质量
L=0.5;%杆长度的一半
Fc=0.0005;%小车相对导轨的摩擦系数
Fp=0.000002;%杆相对于小车的摩擦系数

I=1/12*m*L^2;
l=1/2*L;
t1=m*(M+m)*g*l/[(M+m)*I+M*m*l^2];
t2=-m^2*g*l^2/[(m+M)*I+M*m*l^2];
t3=-m*l/[(M+m)*I+M*m*l^2];
t4=(I+m*l^2)/[(m+M)*I+M*m*l^2];

A=[0 1 0 0;
t1 0 0 0;
0 0 0 1;
t2 0 0 0];

B=[0;t3;0;t4];

C=[1 0 0 0;
0 0 1 0];

D=[0;0];

Q=[100 0 0 0;
0 10 0 0;
0 0 1 0;
0 0 0 1];

R=[0.1];
K=lqr(A,B,Q,R);

e1_1=0;
e2_1=0;
e3_1=0;
e3_1=0;

u_1=0;
xk=[-10/57.3,0,0.20,0];

ts=0.02;

for k=1:1:1000
time(k)=k*ts;
Tspan=[0 ts];

para=u_1;
[t,x]=ode45('daolibai_PID_Controller_SubFunction',Tspan,xk,[],para);
xk=x(length(x),:);

r1(k)=0.0;
r2(k)=0.0;
r3(k)=0.0;
r4(k)=0.0;

x1(k)=xk(1);
x2(k)=xk(2);
x3(k)=xk(3);
x4(k)=xk(4);

e1(k)=r1(k)-x1(k);
e2(k)=r2(k)-x2(k);
e3(k)=r3(k)-x3(k);
e4(k)=r4(k)-x4(k);

S=1;
if S==1
u(k)=K(1)*e1(k)+K(2)*e2(k)+K(3)*e3(k)+K(4)*e4(k);
elseif S==2
de1(k)=e1(k)-e1_1;
u1(k)=-50*e1(k)-10*de1(k);
de2(k)=e2(k)-e2_1;
u2(k)=-10*e2(k)-10*de2(k);
de3(k)=e3(k)-e3_1;
u3(k)=-10*e3(k)-10*de3(k);
de4(k)=e4(k)-e4_1;
u4(k)=-10*e4(k)-10*de4(k);
u(k)=u1(k)+u2(k)+u3(k)+u4(k);
end

if u(k)>=10
u(k)=10;
elseif u(k)<=-10
u(k)=-10;
end
e1_1=e1(k);
e2_1=e2(k);
e3_1=e3(k);
e4_1=e4(k);
u_1=u(k);
end

figure(1);
subplot(411);
plot(time,r1,'k',time,x1,'k');
xlabel('time(s)');ylabel('Angle');
subplot(412);
plot(time,r2,'k',time,x2,'k');
xlabel('time(s)');ylabel('Angle rate');
subplot(413);
plot(time,r3,'k',time,x3,'k');
xlabel('time(s)');ylabel('Car Position');
subplot(414);
plot(time,r4,'k',time,x4,'k');
xlabel('time(s)');ylabel('Car rate');

figure(5);
plot(time,u,'k');
xlabel('time(s)');ylabel('Force');

%子程序
function dx=dym(t,x,flag,para)
global A B C D
u=para;
dx=zeros(4,1);
dx=A*x+B*u;
%刚学,望多多交流,多多批评指正

0

 程序2 http://www.verysource.com/code/6426077_1/untitled202.m.html

clear;
M = 1.096;
m = 0.109;
b = 0.1;
f=0;
I= 0.0034;
g = 9.8;
l = 0.25;
D = I*(M+m)+M*m*l^2; %denominator for the A and B matricies
A = [0      1              0           0;
    0  -(I+m*l^2)*b/D (m^2*g*l^2)/D    -m*l*f/D;
    0      0              0           1;
    0   -(m*l*b)/D    m*g*l*(M+m)/D  -(m+M)*f/D]
B = [     0; 
     -(I+m*l^2)/D;
          0;
        -m*l/D];
C = [1 0 0 0;
     0 0 1 0];
D = [0;
     0];
disp('The rank of controllability matrix')
rc=rank(ctrb(A,B))
% p=[-2-3*i,-2+3*i,-20,-21];
p=[-20,-21,-2-3*i,-2+3*i];

k=place(A,B,p)

Cn=[1 0 0 0 ];
Nbar=rscale(A,B,Cn,0,k)
t0=0;
tspan=0.006;
R=1;
y0=[0 0 0.1 0];
n=1000;
F=R*Nbar-k*y0';
for i=1:n
    tf=t0+tspan;
    [t,y]=ode45(@xprime10,[t0 tf],y0',[],F);
    t0=tf;
    y1=y(end,1);
    y2=y(end,2);
    y3=y(end,3);
    y4=y(end,4);
    y0=[y1 y2 y3 y4];
    F=R*Nbar-k*y0';
    h(i,1)=y1;
    h(i,2)=y2;
    h(i,3)=y3;
    h(i,4)=y4;
    h(i,5)=F;
end 
     T=0.006:0.006:6;
     figure(1)
     plot(T,h(:,1),':b')
     legend('小车位移')
     grid
     figure (2)
     plot(T,h(:,3),'-r')
     legend('摆杆摆角')
     grid
     figure(3)
     plot(T,h(:,5),'--g')
     legend('F')
     grid

 程序3 有网友说Matlab自带一个例程,我电脑没安装matlab,你去找找。

 

在matlab模糊控制工具箱里有演示动画

 

 总结:

   在学习的时候,老师布置的作业,肯定是别人做过的部分,所以只要挖,你总能找到。

   祝你 goodluck !

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM