m一级倒立摆的动态模拟和零极点配置控制器matlab仿真

简介: m一级倒立摆的动态模拟和零极点配置控制器matlab仿真

1.算法仿真效果
matlab2022a仿真结果如下:

49171640f78a7503e0500c31c400582a_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

2.算法涉及理论知识概要
倒立摆是一个开环不稳定的强非线性系统,其控制策略与杂技运动员顶杆平衡表演的技巧有异曲同工之处,目的在于使得摆杆处于临界稳定状态,是进行控制理论研究的典型实验平台。20世纪50年代,麻省理工学院的控制论专家根据火箭助推器原理设计出了第一套倒立摆实验设备,开启了最初的相关研究工作。倒立摆的种类丰富多样,按照其结构可将其分为:直线倒立摆、环形倒立摆以及平面倒立摆等,按照摆杆级数又可将其分为:一级、二级甚至三级等。

   倒立摆系统是是一个具有高阶次、不稳定、多变量、非线性和强藕合特性的不稳定系统。在控制过程中,为了简化直线一级倒立摆系统分析,在建立实际数学模型过程中,忽略了空气阻力和各种摩擦之后,将直线一级倒立摆系统直接抽象成小车和匀质杆组成的系统,如图1所示。

a92a66f35853b9de889fbae5eeac5eab_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

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/ dt2sin=F (3)

对摆杆垂直方向上的合力进行分析,可得如下方程:

P-mg=m*d2 (l cos)/dt2

即:P-mg=- ml(d/ dt)2 cos- m l d2/ dt2sin (4)

系统力矩平衡方程如下:

-Pl sin-Nl 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.系统传递函数模型:
4da0c96d538e9ee2be9942a608210a7a_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

3.MATLAB核心程序

```for i=1:TT
z1 =(A-BKs)(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,'ro',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','r',...
'MarkerFaceColor',[0.9,0.9,0.0]);
hold on
%轨道
plot([-40,40],[-4,-4],'k','linewidth',20);
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],'g','linewidth',3); 
hold off

xlabel('小车位移');
ylabel('高度');
axis([-30 30 -5 15])
Y = [Y,(x1+x2)/2];
axes(handles.axes2);
plot(Y,'r','linewidth',2);
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

% --- Executes on button press in pushbutton8.
function pushbutton8_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%参数
global R1;
global I1;
global R2;
global I2;
global R3;
global I3;
global R4;
global I4;
global M;
global k;
global V;
global dt;
global l;
global 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);
if I1 > 0
fprintf(fid,'05、零极点配置:');fprintf(fid,'%2.2f',R1); fprintf(fid,'+i'); fprintf(fid,'%2.2f\n',abs(I1));
else
fprintf(fid,'05、零极点配置:');fprintf(fid,'%2.2f',R1); fprintf(fid,'-i
'); fprintf(fid,'%2.2f\n',abs(I1));
end
if I2 > 0
fprintf(fid,' ');fprintf(fid,'%2.2f',R2); fprintf(fid,'+i'); fprintf(fid,'%2.2f\n',abs(I2));
else
fprintf(fid,' ');fprintf(fid,'%2.2f',R2); fprintf(fid,'-i
'); fprintf(fid,'%2.2f\n',abs(I2));
end
if I3 > 0
fprintf(fid,' ');fprintf(fid,'%2.2f',R3); fprintf(fid,'+i'); fprintf(fid,'%2.2f\n',abs(I3));
else
fprintf(fid,' ');fprintf(fid,'%2.2f',R3); fprintf(fid,'-i
'); fprintf(fid,'%2.2f\n',abs(I3));
end
if I4 > 0
fprintf(fid,' ');fprintf(fid,'%2.2f',R4); fprintf(fid,'+i'); fprintf(fid,'%2.2f\n',abs(I4));
else
fprintf(fid,' ');fprintf(fid,'%2.2f',R4); fprintf(fid,'-i
'); fprintf(fid,'%2.2f\n',abs(I4));
end
fprintf(fid,'06、模拟时间: ');fprintf(fid,'%2.2f\n\n',TT);

fprintf(fid,'试验结果: \n');

fclose(fid);
```

相关文章
|
2月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
131 0
|
2月前
|
5G
基于IEEE 802.11a标准的物理层MATLAB仿真
基于IEEE 802.11a标准的物理层MATLAB仿真
193 0
|
2月前
|
算法
基于MATLAB/Simulink平台搭建同步电机、异步电机和双馈风机仿真模型
基于MATLAB/Simulink平台搭建同步电机、异步电机和双馈风机仿真模型
|
2月前
|
编解码 运维 算法
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
176 12
|
2月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
2月前
|
开发框架 算法 .NET
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
简介:本文介绍基于ADMM的MIMO信号检测算法,结合无穷范数优化与交替方向乘子法,降低计算复杂度并提升检测性能。涵盖MATLAB 2024b实现效果图、核心代码及详细注释,并对比ML、MMSE、ZF、OCD_MMSE与LAMA等算法。重点分析LAMA基于消息传递的低复杂度优势,适用于大规模MIMO系统,为通信系统检测提供理论支持与实践方案。(238字)
|
3月前
|
机器学习/深度学习 存储 算法
【水下机器人建模】基于QLearning自适应强化学习PID控制器在AUV中的应用研究(Matlab代码实现)
【水下机器人建模】基于QLearning自适应强化学习PID控制器在AUV中的应用研究(Matlab代码实现)
328 0
|
2月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
268 0
|
2月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
132 0
|
2月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
117 0

热门文章

最新文章