基于matlab的一级倒立摆直线运动稳定性控制仿真
Posted fpga和matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于matlab的一级倒立摆直线运动稳定性控制仿真相关的知识,希望对你有一定的参考价值。
目录
一、理论基础
倒立摆系统是是一个具有高阶次、不稳定、多变量、非线性和强藕合特性的不稳定系统。在控制过程中,为了简化直线一级倒立摆系统分析,在建立实际数学模型过程中,忽略了空气阻力和各种摩擦之后,将直线一级倒立摆系统直接抽象成小车和匀质杆组成的系统,如图1所示。
M 小车质量
m 摆杆质量
b 小车摩擦系数
l 摆杆转动轴心到杆质心的长度
I 摆杆惯量
F 加在小车上的力
x 小车位置
其中,N——小车与摆杆相互作用力的水平方向的分量,
P——小车与摆杆相互作用力的垂直方向的分量。
以下是应用牛顿法建立直线一级倒立摆系统的动力学方程过程:
通过受力分析可知,由小车水平方向所受的合力,可得如下方程:
由方程组(7)知该系统是明显的非线性系统。为便于控制器的设计,需要将系统在工作点(= 0)进行线性化处理。当摆杆与垂直向上方向之间的夹角与 1(单位为弧度)之比很小时,则可以进行近似处理:
二、MATLAB核心仿真
R1 = str2double(get(handles.edit5,'string'));
I1 = str2double(get(handles.edit6,'string'));
R2 = str2double(get(handles.edit7,'string'));
I2 = str2double(get(handles.edit8,'string'));
R3 = str2double(get(handles.edit9,'string'));
I3 = str2double(get(handles.edit10,'string'));
R4 = str2double(get(handles.edit11,'string'));
I4 = str2double(get(handles.edit12,'string'));
M = str2double(get(handles.edit13,'string'));
CC1 = R1 + sqrt(-1)*I1;
CC2 = R2 + sqrt(-1)*I2;
CC3 = R3 + sqrt(-1)*I3;
CC4 = R4 + sqrt(-1)*I4;
k = str2double(get(handles.edit1,'string'));
V = str2double(get(handles.edit2,'string'));
dt = 0.01*V;
l = str2double(get(handles.edit3,'string'));
% M = 2.0;
m = 0.1;
g = 9.81;
TT = str2double(get(handles.edit4,'string'));
%系统初始值
zf = [0 0 0 0]';
z = [0 0 2 0]';
r = 0.2;
%创建倒立摆系统
c1 = M*l;
c2 = m*l;
c3 = m*g;
c4 =(M+m)*g;
%倒立摆的四个矩阵,具体可以看理论文档上的说明
A = [0 1 0 0;c4/c1 0 0 0;0 0 0 1;-c3/M 0 0 0];
B = [0 -1/c1 0 1/M]';
C = [1 0 0 0;0 0 1 0];
D = [0 0]';
%配置极点
cpl =[CC1 CC2 CC3 CC4];
Ks = place(A,B,cpl);
Y = [];
for i=1:TT
z1 =(A-B*Ks)*(z-zf);
z = z + z1*dt;
y(:,i) = z;
%动画
x1 = z(3)-k/2+z(4)*dt*i;x2=z(3)+k/2+z(4)*dt*i;
y1 =-4;
y2 =-2.5;
x4 =(x1+x2)/2+l*sin(z(1));
y4 = y2+l*cos(z(1));
t = 0:pi/100:2*pi;
%倒立摆上的球体
x3 = x4+r*cos(t);
y3 = y4+r*sin(t);
axes(handles.axes1);
plot(x3,y3,'r.');
hold on
%轨道
plot([-40,40],[-4,-4],'k','linewidth',2);
hold on
%模拟小车
plot([x1,x2],[y1,y1],'b','linewidth',2);
hold on
plot([x2,x2],[y1,y2],'b','linewidth',2);
hold on
plot([x1,x2],[y2,y2],'b','linewidth',2);
hold on
plot([x1,x1],[y1,y2],'b','linewidth',2);
hold on
%倒立摆
plot([(x1+x2)/2,x4],[y2,y4],'m','linewidth',2);
hold off
xlabel('小车位移');
ylabel('高度');
axis([-30 30 -5 15])
Y = [Y,(x1+x2)/2];
axes(handles.axes2);
plot(Y);
axis([0,TT,-15,15]);
xlabel('时间');
ylabel('小车位移');
pause(0.001);
if (i==1)
pause(0.01);
end
if (abs(z(1)-zf(1))<=0.001)&(abs(z(3)-zf(3))<=0.002)
break;
end
end
三、仿真结论分析
运行后,matlab启动GUI操作界面:
四、参考文献
[1]邢景虎, 陈其工, 江明. 基于LQR的直线一级倒立摆最优控制系统研究[J]. 工业仪表与自动化装置, 2007(6):3.A08-45
以上是关于基于matlab的一级倒立摆直线运动稳定性控制仿真的主要内容,如果未能解决你的问题,请参考以下文章
运动学基于matlab GUI平衡车一阶倒立摆仿真含Matlab源码 1258期