MATLAB强化学习控制飞行器的姿态和位置,reward一直不升,姿态也不跟踪我的给定值且发散

如题,我用MATLAB的RL工具箱+Simulink搭建了一个飞行器的姿态、位置控制仿真系统。最近看了一些论文用RL实现了飞行器端到端的直接控制,即RL Agent输出的action直接作为飞行器的四个输入(推力、升降舵偏角、副翼、方向舵偏角),因此我想复现一下。

飞机模型是根据硕士论文里的DATCOM获取到的气动系数搭建的,飞机状态由发动机推力和三个操纵舵面直接控制。我通过matlab给三个姿态角、高度、线速度、攻角等都设定了一个目标值(常数),想让它跟踪给定值,但是状态完全没法跟踪,甚至发散很离谱(姿态角几千度,角速度几百)。我不知道是哪一步骤出现了问题,不知道是模型本身有问题,还是控制方法的问题导致控制不住。

我设计的奖励函数是分阶段的:①如果姿态误差值和角速度误差值,下一步比上一步的误差小,给一个r1=30;②每一步的姿态误差和角速度误差的值都给一个负的惩罚;③当所有的姿态误差和角速度误差加起来都小于3°的时候,给一个正的奖励r3=5;当加起来小于1.5°的时候给一个正奖励r3=20;当加起来小于0.5°的时候给一个正奖励r3=80;当加起来小于0.3°的时候给一个正奖励r3=150;④当攻角alpha>20°时给一个负的惩罚r4=-70,当姿态角大于45°时给一个负的惩罚r4=-50.

状态空间:高度的跟踪误差,三个方向的速度的跟踪误差,欧拉姿态角的跟踪误差,三个角速度,攻角。攻角跟踪误差,侧滑角。

动作空间:推力、升降舵偏角、副翼、方向舵偏角。

isdone的设计:只有当所有的姿态误差和角速度误差加起来都小于1°的时,才能退出当前片段的训练,否则就只能走满最大步数而退出。

采样时间Ts=0.1,仿真时间Tf=50s,每个片段500步。

以下展示一下把飞行器模型简化为纵向模型的结果,整个仿真里只有飞机模型由完整的12状态简化为只研究纵向运动,奖励函数的设计与上述类似,状态空间也类似,动作空间只有推力和升降舵偏角。飞机状态方程如下:

以下是训练过程的Q0,esipode reward和average reward的展示,奖励一直都很低,训练了2000个片段都没有上升的趋势。 

补充一张后100个片段的esipode reward和average reward的曲线图,可以看到一直在波动并且没有提升的趋势。

以下分别是攻角alpha,俯仰角theta,俯仰角速率q的曲线图,单位都是°或者°/s 

 

以下是高度h和速度V的曲线图。高度初始值-1000想要跟踪到-2000,但高度一直都在-1000左右波动。速度初始值40m/s想让它跟踪到80m/s,但也还是在50左右波动。

大神们有没有会的呀,求求大家帮帮忙了,我已经卡在这里好久 没有进展了,拜托拜托救救孩子吧!!先谢谢各位大神了!! 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值