Dogfight 2(空战沙盒)
使用HARFANG 3D 2框架在Python 3中创建的空战沙盒。
目录
游戏特点:
- VR(支持任何兼容SteamVR的头戴设备)
- 海洋/地形着色器
- 天空穹顶着色器
- 云朵
- 自动驾驶(起飞、着陆、战斗)
- 网络模式
源代码和图形资源可用于学习目的。然而,你可以自由地复刻这个仓库,扩展游戏或发布任何基于它的内容。
如何运行Dogfight沙盒
使用官方发布版本
- 下载最新发布版本(dogfight-sandbox-hg2-win64.7z)
- 解压缩
- 运行start.bat
- 使用"右"和"左"键选择场景
- 如果你想使用键盘控制飞机,按"空格键"
- 按下游戏手柄或摇杆的"开始"按钮,取决于你想使用的设备
- 如果你按下游戏手柄上的"开始/开火"按钮,沙盒会自动将这个控制器设定为飞机的输入设备(详细的键盘输入请参见下面的飞机键盘控制)
使用克隆的仓库
- :警告: 如果你想从克隆的仓库运行沙盒,你需要按照
source\
和Agent\
文件夹中的requirements.txt
文件安装所需的依赖。- 或者运行
0-install-requirements.bat
- 或者运行
- 打开命令行,进入
source
文件夹(cd source
),然后运行python main.py
- 或者运行
start.bat
或1-start.bat
- 或者,在VSCode中按
CTRL-F5
- 或者运行
关于VR模式
- VR仅在Windows机器上使用DirectX后端工作(在config.json文件中设置
"OpenGL": false
) - 所有视图都可在VR中使用(外部、内部)。当使用驾驶舱视图时(数字键盘上的
3
),按F11
校准头部位置 - 需要SteamVR(至少1.22.x版本)
- 已在以下头戴设备上成功测试:
- LENOVO VR Explorer
- HTC Vive Pro
- Meta Quest 2(Oculus Link模式)
录制器API概览
- 选择你想要录制的任务。
- 按"F9"键打开录制界面:
添加用户
:你可以添加一个用户。每个用户都有自己的记录列表。用户
:使用这个下拉框选择用户。项目
:可录制项目的列表。开始录制
:录制模拟。录制帧率
:录制频率(每秒帧数)。记录
:选择要回放的记录。进入回放模式
:回放器。
回放
- 选择你想要回放的用户和记录。
- 按
开始播放
项目被创建。你可以暂停回放,并移动时间轴光标。 显示选中项目
:在选中项目上显示一个瞄准点,以在3D视图中识别该项目。上一帧
,下一帧
:逐帧向后/向前。你也可以按键盘上的"-"、"+"键。
事件
命中(导弹、机枪、撞击)会被记录,并在回放时显示为圆圈: 黄色圆圈:事件发生前 红色圆圈:事件发生后 圆圈的最大尺寸取决于碰撞的威力。
网络模式概述
"网络"模式允许你从第三方机器控制飞机。
启动
-
在服务器机器上:
- 启动DogFight SandBox(start.bat文件)
- 选择网络模式任务
- 注意屏幕左上角的服务器IP和端口号
-
在客户端机器上:
- 确保安装了Python 3版本
- 复制
network_client_example
目录的内容 - 用文本编辑器打开
client_sample.py
文件 - 在"df.connect()"函数中输入服务器ID
- 运行
client_sample.py
文件
飞机键盘命令
命令 | 按键 |
---|---|
增加推力 | Home |
减小推力 | End |
增加刹车 | B |
减小刹车 | N |
增加襟翼 | C |
减小襟翼 | V |
左滚 | 左方向键 |
右滚 | 右方向键 |
俯冲 | 上方向键 |
拉起 | 下方向键 |
左偏航 | Delete |
右偏航 | PageDown |
切换加力燃烧 | 空格 |
下一个目标 | T |
切换起落架 | G |
激活AI | I |
激活自动驾驶 | A |
切换简易操控模式 | E |
开火机枪 | Enter |
发射导弹 | F1 |
增加生命值 | P |
减少生命值 | M |
重新装弹 | F5 |
开启/关闭HUD | H |
通用视图命令
命令 | 按键 |
---|---|
滚动摄像机轮播(飞机,第一人称射击) | 1 |
增加视场角 | PageUp |
减小视场角 | Insert |
飞机视角命令
命令 | 按键 |
---|---|
后视图 | 2 |
前视图 | 8 |
左视图 | 4 |
右视图 | 6 |
卫星视图 | 5 |
战术视图 | 7 |
追踪视图 | 9 |
驾驶舱视图 | 3 |
第一人称射击摄像机视角命令
命令 | 按键 |
---|---|
头部方向 | 鼠标左键 + 鼠标移动 |
前进 | 上, Z |
后退 | 下, S |
左移 | 左, Q |
右移 | 右, D |
快速移动1 | 左Shift + 移动 |
快速移动2 | 左Ctrl + 移动 |
快速移动3 | 右Ctrl + 移动 |
支持的控制设备
- 键盘
- Xbox游戏手柄或任何兼容型号
- 罗技"Attack 3"游戏杆
如何配置输入设备
有两种类型的命令配置文件。
- sources/scripts/devices_config.json
- 包含控制设备的信息
- sources/scripts/XXX_inputs_mapping.json
- 这些文件包含不同车辆或系统的命令参数。
设备配置
devices_config.json
文件包含设备的输入参数。
"轴"类型的输入
"GA_LeftX": {
"type": "axis",
"name": "左摇杆水平",
"reset": "true",
"invert": "false",
"id": 0,
"min": -1,
"max": 1,
"zero": -0.0156,
"zero_epsilon": 0.01
}
"按钮"类型的输入
"GB_Start": {
"type": "button",
"id": 7,
"name": "开始"
},
GA_LeftX
或GB_Start
:在XXX_inputs_mapping.json
文件中使用的输入ID。type
:"axis"或"button"name
:输入名称,用于显示reset
:如果轴在释放时返回到其"零"位置,则为Trueinvert
:如果要反转命令(返回值* -1),则为Trueid
:轴的内部ID(整数)min
,max
:轴的限制值范围zero
:轴处于"复位"位置时的返回值。zero_epsilon
:如果零值不稳定,定义一个误差范围。
输入映射文件
XXX_inputs_mapping.json
文件包含系统命令的输入映射:
- 飞机用户命令:当用户控制飞机时。
- 飞机自动驾驶用户命令:当自动驾驶激活时。
- 飞机人工智能命令:当人工智能控制飞机时,唯一的用户命令是人工智能停用。
- 导弹发射器用户命令:当用户控制导弹发射器时(目前仅限导弹瞄准和发射!)
对于键盘,输入ID与HARFANG3D Keys枚举相同
贡献者
- 代码、设计、音乐/音效:
- Eric Kernin
- 3D图形:
- Jean-Marie Lamarche
- Bruno Lequitte
- 技术与设计顾问:
- Muhammet Aksoy
- Pr. Emre Koyuncu
- Michel Nault
- Muhammed Murat Özbek
- Thomas Simonnet
截图
出版物、引用和研究项目
📎 Harfang3D空战沙盒:用于战斗机自定义控制任务的强化学习研究平台
(Muhammed Murat Özbek, Süleyman Yıldırım, Muhammet Aksoy, Eric Kernin, Emre Koyuncu)
arxiv.org上的Harfang3D空战沙盒:强化学习研究平台
如何引用此出版物:
@misc{2210.07282,
Author = {Muhammed Murat Özbek, Süleyman Yıldırım, Muhammet Aksoy, Eric Kernin and Emre Koyuncu},
Title = {Harfang3D Dog-Fight Sandbox: A Reinforcement Learning Research Platform for the Customized Control Tasks of Fighter Aircrafts},
publisher = {arXiv},
doi = {10.48550/ARXIV.2210.07282},
Year = {2022},
Eprint = {arXiv:2210.07282},
}
🧠 无人战斗机的高度模仿强化学习
使用HARFANG 3D 2框架用Python 3创建的空对空战斗沙盒。该项目为空战模拟提供了丰富的环境,并已在先进的研究项目中得到应用,包括中国一所领先大学开发的最新无人战斗飞行器(UCAV)强化学习策略。要了解更多关于这种创新方法的信息,请查看GitHub上的HIRL4UCAV项目。