飞机游戏六 空战环境 6.1 DBRML 6.1.5 动作空间设置
飞机游戏六 空战环境 6.1 DBRML 6.1.5 动作空间设置
动作空间
1 连续动作空间
空间范围
# 飞机的动作空间
self.action_space = Box(
low=np.array([
0, # 推力
-1, # Pitch 俯仰角
-1, # Roll 翻滚角
-1, # Yaw 偏航角
]),
high=np.array([
1,
1,
1,
1,
]),
)
def sendAction(
self,
action
):
"""
设置动作,只调节飞机的推力,和偏航控制
:param action:
:param actionType:
:return:
"""
df.set_plane_thrust(self.Plane_ID_ally, float(action[0]))
df.set_plane_pitch(self.Plane_ID_ally, float(action[1]))
df.set_plane_roll(self.Plane_ID_ally, float(action[2]))
df.set_plane_yaw(self.Plane_ID_ally, float(action[3]))
2 离散动作库
空间范围
# 飞机的动作空间
self.action_space = Discrete(5)
0 五种动作
为了简化动作空间,本文选取了5个空中作战的基本机动动作,分别为:爬升、俯冲、向左转弯、向右转弯和维持当前动作,分别用up、down、turnleft、turnright、stay表示,以此来构建离散的动作空间,则红方战机的动作空间表示为up down turn left turn right stay,同样地,蓝方战机的动作空间表示为up down turnleft turnright stay。
动作编号 | 动作名称 | 俯仰pitch | 偏航yaw | 滚转roll | 推力 pitch |
---|---|---|---|---|---|
0 | 维持当前动作 | 0 | 0 | 0 | 1 |
1 | 爬升 | -1 | 0 | 0 | 1 |
2 | 俯冲 | 1 | 0 | 0 | 1 |
3 | 向左转弯 | 0 | 1 | 0 | 1 |
4 | 向右转弯 | 0 | -1 | 0 | 1 |
代码:
def sendAction(
self,
action
): # 设定动作 离散动作空间 动作编号 动作名称 控制量 俯仰 偏航 滚转 推力
#0 维持当前动作 0 0 0 1
#1 爬升 -1 0 0 1
#2 俯冲 1 0 0 1
#3 向左转弯 0 1 0 1
#4 向右转弯 0 -1 0 1
if action == 0:
df.set_plane_pitch(self.Plane_ID_ally_0, float(0))
df.set_plane_yaw(self.Plane_ID_ally_0, float(0))
df.set_plane_roll(self.Plane_ID_ally_0, float(0))
df.set_plane_thrust(self.Plane_ID_ally_0, float(0))
elif action == 1:
df.set_plane_pitch(self.Plane_ID_ally_0, float(-1))
df.set_plane_yaw(self.Plane_ID_ally_0, float(0))
df.set_plane_roll(self.Plane_ID_ally_0, float(0))
df.set_plane_thrust(self.Plane_ID_ally_0, float(1))
elif action == 2:
df.set_plane_pitch(self.Plane_ID_ally_0, float(1))
df.set_plane_yaw(self.Plane_ID_ally_0, float(0))
df.set_plane_roll(self.Plane_ID_ally_0, float(0))
df.set_plane_thrust(self.Plane_ID_ally_0, float(1))
elif action == 3:
df.set_plane_pitch(self.Plane_ID_ally_0, float(0))
df.set_plane_yaw(self.Plane_ID_ally_0, float(1))
df.set_plane_roll(self.Plane_ID_ally_0, float(0))
df.set_plane_thrust(self.Plane_ID_ally_0, float(1))
elif action == 4:
df.set_plane_pitch(self.Plane_ID_ally_0, float(0))
df.set_plane_yaw(self.Plane_ID_ally_0, float(-1))
df.set_plane_roll(self.Plane_ID_ally_0, float(0))
df.set_plane_thrust(self.Plane_ID_ally_0, float(1))
1 七种基本动作
固定翼无人机可以选择的战术机动动作大致分为两个层面,第一个层面是空中机动战术动作,如高低强势回旋、筋斗、眼镜蛇、滚转等,另一个层面是由美国NASA提出的基本空战机动集合(Basic Fight Maneuvering,BFM),包括飞行器的定常飞行、减速飞行、加速飞行、左转弯、右转弯、向上拉起和向下俯冲。 本文主要研究的是如何提高无人机的自主格斗机动决策能力,无需考虑过于高级的战术策略,所以本文中选择基本空战机动动作作为UCAV可以选择的动作集。
对于以上七种机动动作,我们选用无人机的切向过载,法向过载和滚转角来进行动作编码,即使用三元组[,,]x zN N来表示仿真中每个时刻下UCAV采取的动作。考虑无人机可承受的物理极限,切向过载的取值范围为[-2,2],法向过载的取值范围为[-5,5]。在实际每种机动动作中设定均采用最大过载,切向过载取值为-2,0或者2,法向过载选择为-5,1或5。滚转角取值为/3,0或者−/3。表3-1展示了七种不同的机动动作指令对应的编码方式。
动作编号 | 动作名称 | 俯仰 | 偏航 | 滚转 | 推力 |
---|---|---|---|---|---|
0 | 定常飞行 | 0 | 0 | 0 | 0.5 |
1 | 加速飞行 | 0 | 0 | 0 | 1 |
2 | 减速飞行 | 0 | 0 | 0 | 0 |
3 | 向左转弯 | 0 | 1 | 0 | 1 |
4 | 向右转弯 | 0 | -1 | 0 | 1 |
5 | 向上拉起 | -1 | 0 | 0 | 1 |
6 | 向下俯冲 | 1 | 0 | 0 | 1 |
2 15种基本动作
机动动作库
动作编号 | 动作名称 | 俯仰pitch | 偏航yaw | 滚转roll | 推力 pitch |
---|---|---|---|---|---|
a1 | 匀速向前 | ||||
a2 | 加速向前 | ||||
a3 | 减速向前 | ||||
a4 | 水平左转 | ||||
a5 | 倾侧左转 | ||||
a6 | 减速左转 | ||||
a7 | 水平右转 | ||||
a8 | 倾侧右转 | ||||
a9 | 减速右转 | ||||
a10 | 匀速上升 | ||||
a11 | 加速上升 | ||||
a12 | 减速上升 | ||||
a13 | 匀速下降 | ||||
a14 | 加速下降 | ||||
a15 | 减速下降 |
该机动动作库包含了前进、向左、向右、上升、下降五个机动方向以及匀速、减速、加速三个机动速度上的设定。
本文来自博客园,作者:{珇逖},转载请注明原文链接:https://www.cnblogs.com/zuti666/p/17249611.html