
说明:
全文共四个参考:
- 终极参考,程序+仿真图+结果,但是缺少原理和文字建模过程。
- 参考0和1重在文字部分,模型建立怎么叙述,但无实际程序。
- 参考2重在程序部分,实际的matlab程序部分,直接上机调试。
- 每个大参考分别给了几个小参考,以供选择。
具体看个部分内容前先全部游览下。
终极参考:
https://wenku.baidu.com/view/df64a8ece009581b6bd9eb2f.html


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

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

关键图截取:




参考二 完整程序 ,自己修改数据和数学符号,配合参考一 文字叙述模块,整个问题就解决了。
下面给了两个参考程序,第二个参考程序易懂,标注清楚。你都跑一下,看看效果。
程序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 !
