如题,我用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左右波动。
大神们有没有会的呀,求求大家帮帮忙了,我已经卡在这里好久 没有进展了,拜托拜托救救孩子吧!!先谢谢各位大神了!!