1.算法模拟效果
matlab2022a仿真结果如下:
2.算法涉及理论知识概述
倒立摆是一个具有开环不稳定的强非线性系统。其控制策略类似于杂技演员在钢管上表演平衡动作的技巧。目的是使摆锤处于临界稳定状态。是控制理论研究的典型实验平台。 20世纪50年代,麻省理工学院的控制论专家根据火箭助推器原理设计了第一套倒立摆实验装置,并开始了初步的相关研究工作。倒立摆的种类很多,按结构可分为直线倒立摆、圆形倒立摆、平面倒立摆。
倒立摆系统是一个不稳定系统,具有高阶、不稳定、多变量、非线性、强耦合等特点。在控制过程中,为了简化线性一级倒立摆系统的分析,在建立实际数学模型的过程中,在忽略空气阻力和各种摩擦力后,直接将线性一级倒立摆系统抽象为一辆汽车和一根统一的杆。系统,如图1所示。
M 承载质量
m 摆质量
b 承载摩擦系数
l 摆杆旋转中心到杆质心的长度
I 摆的惯性
F是小车所受的力
x 轿厢位置
摆锤与垂直向上方向的夹角
摆锤与垂直向下方向的夹角(考虑摆锤初始位置为垂直向下)
其中,N——小车与摆锤相互作用力的水平分量,
P—— 小车和摆锤之间相互作用力的垂直分量。
以下是应用牛顿法建立直线倒立摆系统动力学方程过程:
通过受力分析,可以得到小车水平方向的合力为:
Md2x/dt2=F bdx/dt- N (1)=
由摆锤水平方向的合力可得:
N=m*d2/dt2(x+lsin)
即:N=md2x/dt2+mld2/dt2cos- m* l* d2/dt2*sin (2)
将式(2)代入式(1),可得系统第一个运动方程:
(M+m)d2x/dt2+bdx/dt + mld2/dt2cos- m l* d2/dt2*sin=F (3)
分析摆锤垂直方向的合力,可得:
P-mg=m*d2 (l cos)/dt2
即:P-mg=-ml(d/dt)2*cos-m*l*d2/dt2*sin (4)
系统的力矩平衡方程如下:
-Pl sin-N*l cos=I d2/dt2 (5)
结合式(4)和式(5),消去P和N,得到系统第二运动方程:
(I+ml2)d2/dt2+mgl sin=-ml d2x/dt2 cos (6)
因为=+,cos=-cos,sin=-sin,所以由式(3)和式(6)可得
系统的数学模型为以下方程:
(M+m)d2x/dt2+bdx/dt- mld2/dt2cos+ m* l* d2/dt2*sin=F (7)
(I+ml2)d2/dt2+mgl sin=-ml d2x/dt2 cos
由式组(7)可知,该系统是一个明显的非线性系统。为了便于控制器的设计,系统需要在工作点(=0)处进行线性化。当摆与垂直向上方向的夹角与1(弧度)之比较小时,可近似为:
cos=-1,sin=-,(d/dt)2=0。用u表示被控对象的输入力F,系统的数学模型经线性化后变为如下微分方程表达式:
(I+ml2)d2/dt2+mgl sin=-ml d2x/dt2 (8)
(M+m)d2x/dt2+bdx/dt-ml mld2/dt2=u (8)
1.系统传递函数模型:
3.MATLAB核心程序
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);
轴(handles.axes1);
绘图(x3,y3,'ro',
'线宽',1,
'标记大小',6,
'MarkerEdgeColor','r',
'MarkerFaceColor',[0.9,0.9,0.0]);
坚持,稍等
追踪
绘图([-40,40],[-4,-4],'k','线宽',20);
坚持,稍等
%仿真车
绘图([x1,x2],[y1,y1],'b','线宽',2);
坚持,稍等
绘图([x2,x2],[y1,y2],'b','线宽',2);
坚持,稍等
绘图([x1,x2],[y2,y2],'b','线宽',2);
坚持,稍等
绘图([x1,x1],[y1,y2],'b','线宽',2);
坚持,稍等
%倒立摆
绘图([(x1+x2)/2,x4],[y2,y4],'g','线宽',3);
推迟
xlabel('汽车排量');
ylabel('高度');
轴([-30 30 -5 15])
Y=[Y,(x1+x2)/2];
轴(handles.axes2);
绘图(Y,'r','线宽',2);
轴([0,TT,-15,15]);
xlabel('时间');
ylabel('汽车排量');
暂停(0.001);
如果(i==1)
暂停(0.01);
结尾
如果(abs(z(1)-zf(1))=0.001)(abs(z(3)-zf(3))=0.002)
休息;
结尾
结尾
% --- 在按下pushbutton8 中的按钮时执行。
函数pushbutton8_Callback(hObject,事件数据,句柄)
% hObject 到Pushbutton8 的句柄(参见GCBO)
% eventdata 保留- 将在MATLAB 的未来版本中定义
% 带有句柄和用户数据的句柄结构(参见GUIDATA)
范围
全局R1;
全局I1;
全局R2;
全局I2;
全球R3;
全局I3;
全球R4;
全局I4;
全球M;
全局k;
全局V;
全局数据传输;
全局l;
全球TT;
CC1=R1 + sqrt(-1)*I1;
CC2=R2 + sqrt(-1)*I2;
CC3=R3 + sqrt(-1)*I3;
CC4=R4 + sqrt(-1)*I4;
fid=fopen('双质量摆动系统虚拟测试软件测试报告.txt','wt');
fprintf(fid, '测试参数:\n');
fprintf(fid,'01,车宽:');fprintf(fid,'%2.2f\n',k);
fprintf(fid,'02,小车速度:');fprintf(fid,'%2.2f\n',V);
fprintf(fid,'03,倒立摆长度:');fprintf(fid,'%2.2f\n',l);
fprintf(fid,'04,球质量:');fprintf(fid,'%2.2f\n',M);
如果I1 0
fprintf(fid,'05,零极点配置:');fprintf(fid,'%2.2f',R1); fprintf(fid,'+i*'); fprintf(fid,'%2.2f\n',abs(I1));
别的
fprintf(fid,'05,零极点配置:');fprintf(fid,'%2.2f',R1); fprintf(fid,'-i*'); fprintf(fid,'%2.2f\n',abs(I1));
结尾
如果I2 0
fprintf(fid,' ');fprintf(fid,'%2.2f',R2); fprintf(fid,'+i*'); fprintf(fid,'%2.2f\n',abs(I2));
别的
fprintf(fid,' ');fprintf(fid,'%2.2f',R2); fprintf(fid,'-i*'); fprintf(fid,'%2.2f\n',abs(I2));
结尾
如果I3 0
fprintf(fid,' ');fprintf(fid,'%2.2f',R3); fprintf(fid,'+i*'); fprintf(fid,'%2.2f\n',abs(I3));
别的
fprintf(fid,' ');fprintf(fid,'%2.2f',R3); fprintf(fid,'-i*'); fprintf(fid,'%2.2f\n',abs(I3));
结尾
如果I4 0
fprintf(fid,' ');fprintf(fid,'%2.2f',R4); fprintf(fid,'+i*'); fprintf(fid,'%2.2f\n',abs(I4));
别的
fprintf(fid,' ');fprintf(fid,'%2.2f',R4); fprintf(fid,'-i*'); fprintf(fid,'%2.2f\n',abs(I4));
结尾
fprintf(fid,'06,模拟时间:');fprintf(fid,'%2.2f\n\n',TT);
fprintf(fid, '测试结果:\n');
fclose(fid);