# HongJun
## 介绍
鸿钧:一个基于虚幻引擎和 AirSim 的仿真系统,让用户以简单轻松的配置方式搭建定制化的无人机作战环境。
本项目是鸿钧的 python 控制器,其通过 Socket 协议与由基于虚幻引擎和 AirSim 的仿真系统——鸿钧建立通讯,并控制其中仿真的无人机,进行飞行和战斗任务。用户可以使用 Python 语言编写无人机的飞行任务程序,完成无人机的编队飞行、攻击战斗、集群对抗等任务。
本团队在 AirSim 的基础上拓展出了攻击、战斗系统,可以对无人机的作战环境进行模拟,本项目可作为集群智能的训练平台,适用于无人机集群对抗、轰炸敌方目标单位等任务的人工智能训练。
**该项目已被清华大学猛狮无人驾驶实验室和南京航空航天大学无人机实验室的研究生团队采用,并于人工智能仿真训练,并发表相关科研论文**
**本项目与HongJun的模拟器端项目是配套使用的,模拟器端项目链接:[HongJun模拟器](https://github.com/CGandGameEngineLearner/HongJunSimulator)**
## 注意事项
本项目必须使用**Python 3.8.10**版本
配置开发环境前务必查看requirements.txt,并使用它来配置依赖库
**如果您在使用此项目时遇到难以解决的问题,或者需要在此基础上订制新的功能、资产等,可以编辑邮件并发送到`lifesize1@qq.com`,进行付费咨询。**
> 关于付费咨询的说明:
> 由于本项目作者是一个还没毕业正式工作的贫困生,空闲时间少,前来咨询此项目的人又比较多,所以对此项目开启付费咨询服务,请您谅解。
## 架构说明
![架构图](/illustration/ArchitectureDiagram.png)
## 训练任务案例和训练场景实机演示
### 携带导弹的无人机进行集群对抗
![携带导弹的无人机进行集群对抗](/illustration/DroneWithMission.gif)
### 无人机海上突防
![无人机海上突防](/illustration/DroneBreakout.gif)
## 工程文件结构说明
### HongJun\SimulatorControlDriver
此目录为是负责无人机模拟器(即鸿钧无人机作战仿真模拟平台)进行连接和控制的驱动模块
### HongJun\Tasks\CustomTasks
此目录下存放了无人机飞行任务的程序,若用户需要自定义新的无人机飞行任务,那么请在此目录下新建 Python 软件包,并在其中编写 Python 程序控制无人机。每个飞行任务的 Python 软件包之间不要有相互依赖的关系,相互独立,互不影响。不要出现 TaskB import 了 Task A 的代码的情况。要共用的都放 Libraries 里面。
### HongJun\Tasks\Libraries
此目录下存放了所有飞行任务程序共用的库,如果您自定义的新飞行任务程序需要用某一第三方库或自己写的库,并且这个库会在多次飞行任务中用到,那么请尽量放在这里,一起共用。
### HongJun\SimulatorControlDriver\UClasses.py
在该py代码中定义的是服务端(控制器这端)的与客户端对应的UClass类的对象,以实现同步客户端对象到服务端的功能
### HongJun/SimulatorControlDriver/SimulatorController.py
此py文件实现的是处理模拟器(充当客户端)发来的事件和控制模拟器的逻辑
## 如何自定义飞行任务?
在 `HongJun\Tasks\CustomTasks` 目录下新建 Python 软件包作为你自定义的飞行任务的软件包,并在其中编写 Python 程序控制无人机。每个飞行任务的 Python 软件包之间不要有相互依赖的关系,相互独立,互不影响。不要出现 TaskB import 了 Task A 的代码的情况。要共用的都放 `HongJun/DroneTasks/Libraries` 里面。
每个飞行任务文件下至少需要以下文件:
- **init.py**: Python software package initialization file
- **Config.yml**: This is a configuration file. It is recommended to consolidate all the configuration information required for your custom flight mission programs here. It mainly stores the listening address of the Socket server. When creating a new flight mission, make sure to configure the listening address of the Socket server in this file. Each flight mission uses its corresponding Config.yml file in its respective directory for configuration information. They are independent and do not affect each other.
- **main.py**: Your custom flight mission logic is primarily written here. To run it, execute this Python file.
例如,这里新建了一个 TestTask1
![新建了一个TestTask1](/illustration/TestTask1.png)
### Config.yml 文件的示例内容:
```
# The ConnectSystem in Unreal Engine is client.
# The SimulatorConnector in python is server.
# 在虚幻引擎中的ConnectSystem是客户端
# SimulatorConnector这边是服务端
server:
host: 127.0.0.1
port: 3000
```
### main.py 的示例内容(HongJun/Tasks/CustomTasks/TestTask1/main.py):
```python
from HongJun.SimulatorControlDriver.SimulatorController import SimulatorController,name_drone
from HongJun.Tasks.Libraries.ODE.controller_3 import control_formation
import random
import time
import numpy as np
from loguru import logger
import airsim
def reverse(x: float) -> float:
return -x
origin_x = [-24, -20, -16, -12, -8, -4, -0, 4, 8, 12] # 无人机初始位置
origin_y = [0, 5, 0, 5, 0, 5, 0, 5, 0, 5]
num_agents = 10
enemy_num = 4
step = 50
velocity = 8
if __name__ == '__main__':
simulator_controller = SimulatorController()
client = simulator_controller.simulator_connector.airsim_client
time.sleep(6)
# simulator_controller.drones[0].moveToPositionAsync(-150.0, 10, -30, 15)
# # asyncio.run(simulator_controller.simulator_connector.ws_server.sio.emit(event='attack', data='{"test":"ssssssssss"}',namespace='/'))
# time.sleep(10)
# simulator_controller.drones[0].attack(simulator_controller.drones[1])
# # asyncio.run(simulator_controller.drones[1].attack(simulator_controller.drones[0]))
# logger.info("已经发送完了开火指令")
#
# time.sleep(6)
for i in range(num_agents + enemy_num):
name = "UAV" + str(i + 1)
simulator_controller.simulator_connector.airsim_client.enableApiControl(True, name) # 获取控制权
simulator_controller.simulator_connector.airsim_client.armDisarm(True, name) # 解锁(螺旋桨开始转动)
if i != num_agents - 1: # 起飞
simulator_controller.simulator_connector.airsim_client.takeoffAsync(vehicle_name=name)
else:
simulator_controller.simulator_connector.airsim_client.takeoffAsync(vehicle_name=name).join()
for i in range(num_agents + enemy_num): # 全部都飞到同一高度层
name = "UAV" + str(i + 1)
logger.info(i)
if i != num_agents - 1:
simulator_controller.simulator_connector.airsim_client.moveToZAsync(-8, 4, vehicle_name=name)
else:
simulator_controller.simulator_connector.airsim_client.moveToZAsync(-8, 4, vehicle_name=name).join()
posalive = np.array([origin_x, origin_y, ], dtype=np.longdouble)
stateMats = control_formation(posalive)
path = [[0] * step for _ in range(num_agents)]
j = 0
for posinfo in stateMats:
k = 0
for i in range(num_agents):
pos = airsim.Vector3r()
pos.x_val = posinfo[k] - origin_x[i]
pos.y_val = posinfo[k + 1] - origin_y[i]
pos.z_val = -8
print(i, pos)
path[i][j] = pos
k += 2
j += 1
for i in range(num_agents):
name = "UAV" + str(i + 1)
if i != num_agents - 1:
simulator_controller.simulator_connector.airsim_client.moveOnPathAsync(path[i], velocity, vehicle_name=name)
else:
simulator_controller.simulator_connector.airsim_client.moveOnPathAsync(path[i], velocity,
vehicle_name=name).join()
time.
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
一个基于虚幻引擎和 AirSim 的仿真系统,让用户以简单轻松的配置方式搭建定制化的无人机作战环境,并控制其中仿真的无人机 (142个子文件)
events.out.tfevents.1683688121.DESKTOP-9J7T62V.31764.0 2KB
events.out.tfevents.1685693651.DESKTOP-9J7T62V.20436.0 310B
events.out.tfevents.1683689366.DESKTOP-9J7T62V.40120.0 88B
events.out.tfevents.1686916626.DESKTOP-9J7T62V.21536.0 88B
DroneWithMission.gif 84.91MB
DroneBreakout.gif 7.46MB
.gitignore 47B
.gitignore 33B
HongJun.iml 352B
LICENSE 11KB
testScript.m 9KB
ode45Tests.m 6KB
python.m 299B
README.md 18KB
README.md 259B
DebugLog.png 422KB
ArchitectureDiagram.png 273KB
TestTask1.png 4KB
SimulatorController.py 18KB
ode.py 18KB
baseline.py 16KB
odeoptionsTest.py 16KB
main.py 13KB
testScript.py 12KB
odeargumentsTest.py 11KB
UClasses.py 11KB
demo.py 11KB
controller.py 10KB
controller_3.py 9KB
controller_bak.py 7KB
odeoptions.py 7KB
odenonnegativeTest.py 7KB
odezero.py 6KB
odearguments.py 6KB
ode45Tests.py 6KB
drone_env.py 5KB
Ctrl_bak.py 5KB
runner.py 5KB
server.py 5KB
odemassTest.py 5KB
SimulatorConnector.py 4KB
ntrp45Test.py 4KB
odemassexplicitTest.py 4KB
odeeventsTest.py 3KB
ws_server.py 3KB
odemassexplicit.py 3KB
odefinalize.py 3KB
odemass.py 2KB
main.py 2KB
ntrp45.py 2KB
server.py 2KB
odeevents.py 2KB
setup_path.py 2KB
main.py 2KB
sender.py 2KB
fevalTest.py 2KB
drone_env.py 2KB
odenonnegative.py 1KB
main.py 1KB
feval.py 1KB
odefinalizeTest.py 1KB
main.py 1KB
types.py 1KB
airsim_env.py 661B
odeget.py 656B
odegetTest.py 647B
config_loader.py 393B
testuav.py 376B
test.py 368B
ws_main.py 332B
env.test.py 315B
__init__.py 215B
setup.py 214B
ControlTaskTest.py 172B
types.py 117B
__init__.py 37B
__init__.py 23B
__init__.py 2B
__init__.py 0B
__init__.py 0B
__init__.py 0B
__init__.py 0B
__init__.py 0B
__init__.py 0B
__init__.py 0B
SocketIOtest.py 0B
__init__.py 0B
__init__.py 0B
testtask_0.py 0B
wrapper.py 0B
__init__.py 0B
__init__.py 0B
__init__.py 0B
__init__.py 0B
__init__.py 0B
__init__.py 0B
__init__.py 0B
ode.cpython-39.pyc 12KB
SimulatorController.cpython-39.pyc 10KB
SimulatorController.cpython-38.pyc 10KB
共 142 条
- 1
- 2
资源评论
极致人生-010
- 粉丝: 3368
- 资源: 3076
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功