【固定翼飞机】基于最优控制的固定翼飞机着陆控制器设计研究(Matlab代码实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码及文章


💥1 概述

文献来源:

摘要
飞机控制中最困难的任务之一是实现安全舒适的着陆。事故统计数据表明,超过45%的通用航空事故发生在飞行的进场和着陆阶段。进一步分析显示,超过90%的事故是由飞行员引起的。失控也是其中33%事故的主要因素。在许多情况下,事故发生是因为未能在目标着陆时间内着陆。在假设飞机的横向和纵向动力学是解耦的,并且横向控制器负责处理飞机偏离跑道中心线的情况下,在本项目中,我们设计了一个固定翼飞机的纵向控制器,以跟踪期望的着陆轨迹。

介绍
飞机着陆过程由五个不同的阶段组成:基本腿、滑行坡度、抬头、着陆和着陆后滚动。在这五个阶段中,滑行坡度阶段和抬头阶段是最重要的[1]。在本项目中,我们设计了一个跟踪控制器,指导飞机实现平稳舒适的着陆。本项目考虑了着陆的抬头阶段。我们在本项目中使用的系统模型取自[1]。在该论文中,考虑了飞机的运动模型。为了得出系统模型,我们做出了以下假设:风扰动被假定为零,偏离平衡飞行状态为零,滑行路径角被假定为小,因此可以进行小角度近似,飞机速度恒定,纵向运动由副翼偏转控制,横向运动被忽略。详细文章见第4部分。

📚2 运行结果

 

主函数代码:

Parameters % Load the given parameters
 %sinit  = zeros(10,1); % S(tf) = C'PC, where C is eye(4). And P=[0.9 0 0 0;0 0.01 0 0;0 0 1 0;0 0 0 1]
 s0 = [0.9 0 0 0 0.042 0 0 1 0 1];
 v0 = [0,0.000142,0,0]';
 
 %First solve for S using the DRE 
 [t1,s] = ode45(@DRE_S,[-Tf:0.01: 0],s0);
 sf = flipud(s);
 
 %calculate K using K = inv(R)*B'*S(t)
 for i =1:length(s)
     Kf(i,:)= (1/r)*B'*[sf(i,1) sf(i,2) sf(i,3) sf(i,4);
                        sf(i,2) sf(i,5) sf(i,6) sf(i,7);
                        sf(i,3) sf(i,6) sf(i,8) sf(i,9);
                        sf(i,4) sf(i,7) sf(i,9) sf(i,10)];
 end
 
 %solve for V using the DRE 
 [t2,v] = ode45(@(t,v) DRE_V(t,v,Kf,t1),[-Tf:0.01: 0],v0);

 
%closed loop simulation
 tt = -flipud(t2);
 vf = flipud(v);
 %calucalte xdot
 [tx, x] = ode45(@(t,x) Xstates(t,x,tt,vf,tt,Kf),[0:0.01:Tf],x0);
 
 %calculate control input
  for i=1:length(x)
     u(i) = -Kf(i,:)*x(i,:)' + (1/r)*B'*vf(i,:)';
  end
  
plot(tx,u,'LineWidth',1.2 )
grid on 
title('elevator defelection angle')

reference = desired_trajectory(Tf);

subplot(2,2,1)
plot(tx,x(:,1),'LineWidth',1.2 )
hold on 
plot(tx,reference(1,:),'LineWidth',1.2 )
grid on 
legend('simulated','reference')
title('altitude')

subplot(2,2,2)
plot(tx,x(:,2),'LineWidth',1.2 )
hold on 
plot(tx,reference(2,:),'LineWidth',1.2 )
grid on 
legend('simulated','reference')
title('rate of descent')

subplot(2,2,3)
plot(tx,x(:,3),'LineWidth',1.2 )
hold on 
plot(tx,reference(3,:),'LineWidth',1.2 )
grid on 
legend('simulated','reference')
title('pitch angle')

subplot(2,2,4)
plot(tx,x(:,4),'LineWidth',1.2 )
hold on 
plot(tx,reference(4,:),'LineWidth',1.2 )
grid on 
legend('simulated','reference')
title('pitch rate')

 

plot(tx,u,'LineWidth',1.2 )
grid on 
title('elevator defelection angle')


%%
subplot(2,2,1)
plot(tx,Kf(:,1),'LineWidth',1.2 )
grid on 
title('altitude gain')

subplot(2,2,2)
plot(tx,Kf(:,2),'LineWidth',1.2 )
grid on 
title('rate of descent gain')

subplot(2,2,3)
plot(tx,Kf(:,3),'LineWidth',1.2 )
grid on 
title('pitch angle gain')

subplot(2,2,4)
plot(tx,Kf(:,4),'LineWidth',1.2 )
grid on 
title('pitch rate gain')

%%
subplot(2,2,1)
e1 = x(:,1)-reference(1,:)';
plot(tx,e1,'LineWidth',1.2 )
grid on 
title('error on altitude')


subplot(2,2,2)
e2 = x(:,2)-reference(2,:)';
plot(tx,e2,'LineWidth',1.2 )
grid on 
title('error on rate of descent')


subplot(2,2,3)
e3 = x(:,3)-reference(3,:)';
plot(tx,e3,'LineWidth',1.2 )
grid on 
title('error on pitch angle')

subplot(2,2,4)
e4 = x(:,4)-reference(4,:)';
plot(tx,e4,'LineWidth',1.2 )
grid on 
title('error on pitch rate')

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

🌈4 Matlab代码及文章

  • 25
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值