
【滑模控制】【四轴飞行器】滑模控制应用于四轴飞行器在其中一个推进器故障时的稳定[发动机失效情况下无人机的控制与稳定]Quad3DOF(Matlab代码实现)
滑模控制应用于四轴飞行器在其中一个推进器故障时的稳定[发动机失效情况下无人机的控制与稳定]研究文档该算法的总体目标是为四轴飞行器建立一个辅助控制系统,该系统能在其中一个推进器发生故障时发挥作用,旨在防止物质损坏并确保设备操作区域内的安全。此外,由于该算法在滑模控制系统中融入了数学模型,因此可用于四轴飞行器的模拟。该算法已在试验台上进行了验证,并分析了多种故障场景。
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
滑模控制应用于四轴飞行器在其中一个推进器故障时的稳定[发动机失效情况下无人机的控制与稳定]研究文档
该算法的总体目标是为四轴飞行器建立一个辅助控制系统,该系统能在其中一个推进器发生故障时发挥作用,旨在防止物质损坏并确保设备操作区域内的安全。此外,由于该算法在滑模控制系统中融入了数学模型,因此可用于四轴飞行器的模拟。该算法已在试验台上进行了验证,并分析了多种故障场景。
一、引言
四轴飞行器作为一种先进的无人机系统,在航拍、监测、运输等领域具有广泛应用。然而,当其中一个推进器发生故障时,飞行器的稳定性和安全性将受到严重影响。因此,研究一种有效的控制算法,以在推进器故障情况下保持四轴飞行器的稳定,具有重要的实际意义和应用价值。滑模控制作为一种非线性控制方法,具有强鲁棒性和抗干扰能力,适用于处理此类复杂问题。
二、滑模控制原理
滑模控制(Sliding Mode Control, SMC)是一种特殊的非线性控制策略,其特点在于系统的“结构”可以在动态过程中根据系统当前的状态(如偏差及其各阶导数等)有目的地不断变化。通过切换函数实现控制器的结构切换,使系统按照预定的“滑动模态”状态轨迹运动。滑模控制对系统的不确定性和外界干扰具有很强的鲁棒性,特别适用于处理非线性系统和复杂动态过程。
三、四轴飞行器数学模型
为了设计滑模控制器,首先需要建立四轴飞行器的数学模型。该模型应包含飞行器的位置、速度、姿态等状态变量,以及推进器产生的力和力矩等输入变量。通过动力学分析和运动学方程,可以推导出四轴飞行器的状态空间模型,为滑模控制器的设计提供基础。
四、滑模控制器设计
- 确定滑模面:滑模面代表了系统的理想动态特性,是设计滑模控制器的关键。对于四轴飞行器,可以选择位置误差、速度误差和姿态误差等作为滑模面变量。
- 设计切换函数:切换函数用于实现控制器的结构切换,使系统状态在滑模面上运动。对于四轴飞行器,可以根据滑模面变量设计切换函数,并确定切换条件。
- 设计控制律:控制律是滑模控制器的核心部分,用于根据系统状态和切换函数调整控制输入。对于四轴飞行器,可以设计基于滑模面的控制律,使系统状态在滑模面上保持稳定。
五、推进器故障情况下的控制策略
当四轴飞行器的一个推进器发生故障时,其力和力矩将发生变化,导致飞行器失去平衡。为了保持飞行器的稳定,需要设计一种辅助控制系统。该系统可以基于滑模控制原理,通过调整其他正常工作的推进器的力和力矩来补偿故障推进器的影响。
六、仿真与实验验证
为了验证所设计的滑模控制器在推进器故障情况下的有效性,需要进行仿真和实验验证。仿真实验可以基于四轴飞行器的数学模型和滑模控制器进行,通过模拟不同的故障场景来评估控制器的性能。实验验证则需要在试验台上进行,通过实际测试来验证控制器的稳定性和可靠性。
七、结果与分析
通过仿真和实验验证,可以得到以下结论:
- 所设计的滑模控制器在推进器故障情况下能够有效地保持四轴飞行器的稳定。
- 控制器对系统的不确定性和外界干扰具有很强的鲁棒性,能够应对多种复杂情况。
- 通过调整滑模面和切换函数的设计参数,可以进一步优化控制器的性能。
八、结论与展望
本研究针对四轴飞行器在推进器故障情况下的稳定控制问题,提出了一种基于滑模控制的辅助控制系统。通过仿真和实验验证,证明了该控制器的有效性和鲁棒性。未来,将进一步研究优化控制器的设计参数和提高控制器的实时性能,以满足实际应用的需求。
📚2 运行结果
运行视频:
通过网盘分享的文件:Quad3DOF.mp4
链接: https://pan.baidu.com/s/1NkIYhn-4WBR9J5xS5GB9Qg提取码: pucj
--来自百度网盘超级会员v6的分享
部分代码:
%%%%%%%%%%%%%%%%%%%%%%%% plotResponse %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function plotResponse(praData,pidData,smcData,k)
figure(k)
set(gcf, 'Position', [10, 50, 1200, 600])
%Sinal passado para os motores
t = tiledlayout(4,3,'TileSpacing','compact');
nexttile
hold on;
plot(praData.dados(1:end,2),praData.dados(1:end,15),'k');%Signal M1
plot(pidData.dados(1:end,2),pidData.dados(1:end,15),'r');%Signal M1
plot(smcData.dados(1:end,2),smcData.dados(1:end,15),'b');%Signal M1
grid
xlabel('Tempo (s)');
ylabel('S_{M1}');
nexttile
hold on;
plot(praData.dados(1:end,2),praData.dados(1:end,3),'k');%phi Signal
plot(pidData.dados(1:end,2),pidData.dados(1:end,3),'r');%phi Signal
plot(smcData.dados(1:end,2),smcData.dados(1:end,3),'b');%phi Signal
grid
xlabel('Tempo (s)');
nexttile
hold on;
plot(praData.dados(1:end,2),praData.dados(1:end,9),'k');%delta phi
plot(pidData.dados(1:end,2),pidData.dados(1:end,9),'r');%delta phi
plot(smcData.dados(1:end,2),smcData.dados(1:end,9),'b');%delta phi
grid
xlabel('Tempo (s)');
ylabel('Delta_{\phi}');
nexttile
hold on;
plot(praData.dados(1:end,2),praData.dados(1:end,16),'k');%Signal M2
plot(pidData.dados(1:end,2),pidData.dados(1:end,16),'r');%Signal M2
plot(smcData.dados(1:end,2),smcData.dados(1:end,16),'b');%Signal M2
grid
xlabel('Tempo (s)');
ylabel('S_{M2}');
nexttile
hold on;
plot(praData.dados(1:end,2),praData.dados(1:end,4),'k');%theta Signal
plot(pidData.dados(1:end,2),pidData.dados(1:end,4),'r');%theta Signal
plot(smcData.dados(1:end,2),smcData.dados(1:end,4),'b');%theta Signal
grid
xlabel('Tempo (s)');
nexttile
hold on;
plot(praData.dados(1:end,2),praData.dados(1:end,10),'k');%delta theta
plot(pidData.dados(1:end,2),pidData.dados(1:end,10),'r');%delta theta
plot(smcData.dados(1:end,2),smcData.dados(1:end,10),'b');%delta theta
grid
xlabel('Tempo (s)');
ylabel('Delta_{\theta}');
nexttile
hold on;
plot(praData.dados(1:end,2),praData.dados(1:end,17),'k');%Signal M3
plot(pidData.dados(1:end,2),pidData.dados(1:end,17),'r');%Signal M3
plot(smcData.dados(1:end,2),smcData.dados(1:end,17),'b');%Signal M3
grid
xlabel('Tempo (s)');
ylabel('S_{M3}');
limitesG=[min(Sim.ci,Sim.desiredAngFi(:,end))*(180/pi)-10 max(Sim.ci,Sim.desiredAngFi(:,end))*(180/pi)+10];
limitesG(3,:)=limitesG(3,:)+[-30 20];
yR(:,1:2)=repmat(limitesG(:,1),1,2);
yR(:,3:4)=repmat(limitesG(:,2),1,2);
AngI=axes('Position',[.05 .78 .28 .17]);
set(AngI,'box', 'on');
set(AngI,'xlim',[0 Sim.Time],'ylim',limitesG(1,:));
hold on;
RSI=fill(xRS,yR(1,:),Khaki,'LineStyle',"none",'FaceAlpha',0.5);
RCI=fill(xRC,yR(1,:),SpringGreen,'LineStyle',"none",'FaceAlpha',0.5);
RFI=fill(xRF,yR(1,:),FireBrick,'LineStyle',"none",'FaceAlpha',0.5);
RCAI=fill(xRCA,yR(1,:),DarkTurquoise,'LineStyle',"none",'FaceAlpha',0.5);
AngIpi=plot(0,0,'Color',[0.5450,0.2705,0.0745], 'LineWidth',1.4);
AngIpii=plot(0,0,'r', 'LineWidth',1.0);
AngIpiii=plot(0,0,'b', 'LineWidth',0.7);
legend('','','','','PID Exp','PID Sim','SMC Sim');
legend('boxoff')
xlabel('Time [s]')
ylabel('Angle \phi [^o]')
grid;
AngII=axes('Position',[.7 .78 .28 .17]);
set(AngII,'box', 'on');
set(AngII,'xlim',[0 Sim.Time],'ylim',limitesG(2,:));
hold on;
RSII=fill(xRS,yR(2,:),Khaki,'LineStyle',"none",'FaceAlpha',0.5);
RCII=fill(xRC,yR(2,:),SpringGreen,'LineStyle',"none",'FaceAlpha',0.5);
RFII=fill(xRF,yR(2,:),FireBrick,'LineStyle',"none",'FaceAlpha',0.5);
RCAII=fill(xRCA,yR(2,:),DarkTurquoise,'LineStyle',"none",'FaceAlpha',0.5);
AngIIpi=plot(0,0,'Color',[0,0.39,0], 'LineWidth',1.4);
AngIIpii=plot(0,0,'r', 'LineWidth',1.0);
AngIIpiii=plot(0,0,'b', 'LineWidth',0.7);
legend('','','','','PID Exp','PID Sim','SMC Sim');
legend('boxoff')
xlabel('Time [s]')
ylabel('Angle \theta [^o]')
grid;
AngIII=axes('Position',[.05 .09 .28 .17]);
set(AngIII,'box', 'on');
set(AngIII,'xlim',[0 Sim.Time],'ylim',limitesG(3,:));
hold on;
RSIII=fill(xRS,yR(3,:),Khaki,'LineStyle',"none",'FaceAlpha',0.5);
RCIII=fill(xRC,yR(3,:),SpringGreen,'LineStyle',"none",'FaceAlpha',0.5);
RFIII=fill(xRF,yR(3,:),FireBrick,'LineStyle',"none",'FaceAlpha',0.5);
RCAIII=fill(xRCA,yR(3,:),DarkTurquoise,'LineStyle',"none",'FaceAlpha',0.5);
AngIIIpi=plot(0,0,'Color',[0.5,0,0.5], 'LineWidth',1.4);
AngIIIpii=plot(0,0,'r', 'LineWidth',1.0);
AngIIIpiii=plot(0,0,'b', 'LineWidth',0.7);
legend('','','','','PID Exp','PID Sim','SMC Sim');
legend('boxoff')
xlabel('Time [s]')
ylabel('Angle \psi [^o]')
grid;
vmp4 = VideoWriter('Quad3DOF','MPEG-4'); % create a video
open(vmp4);
movi=1;
for i=2:1:size(praData.dados,1)
movi=movi+1;
if movi==3
movi=1;
Sim.XYZ(:,i)=[0;0;0];
PlotterUpdate(Quad,Sim,smcData.dados(i,3:5)*pi/180,i);
vals=num2str(floor(praData.dados(i,2)));
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)
[1]胡琦逸.四旋翼飞行器的姿态估计与优化控制研究[D].杭州电子科技大学,2014.
[2]尤元,李闻先.四旋翼无人机设计与滑模控制仿真[J].现代电子技术, 2015, 38(15):5.DOI:10.3969/j.issn.1004-373X.2015.15.024.
🌈4 Matlab代码、数据下载
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取
更多推荐
所有评论(0)