项目概述
随着无人机技术在物流、测绘、应急救援等领域的广泛应用,其自主导航、避障算法、路径规划及多机协同等核心技术的研究需求日益迫切。为降低实地测试成本、提高研发效率,本项目旨在构建一个高精度、可扩展的无人机三维虚拟仿真环境,支持算法验证、仿真训练与场景压力测试。支持导入相关航线路径,进行无人机编队/分布路径模拟,支持多种无人机队形,支持输入大区域类型根据无人机数量进行区域划分。可视化方面,支持放大缩小,视野转换,全方位调整视野角度。
主页面显示:上面为三维路径图,包括区域描绘,路径绘制,下方会显示仿真运行过程中的飞行信息。
示意图:





功能说明
支持多无人机不同高度飞行,实时显示对应位置信息,状态信息,编队内角色,路径总路程,预计完成时间(与设置的无人机飞行时间相关)。
代码说明
由于本人良好的编码习惯,代码中均有注释说明,这里不做赘述,仅对项目文件进行说明及个别举例。
1.uav/single_uav.py 为单个无人机声明,包括各自航路点,高度,速度,状态........等基本信息。
python
# 例:
def init(self, id, initial_coords, high=50, status=0,speed=20):
self.id = id
self.position = initial_coords # 当前位置
self.initial_position = initial_coords # 初始位置
self.high = high # 默认高度设为50单位
self.status = status # 状态信息 0 正常 1 故障 2 打击 3 终止任务
self.path_points = [] # 每个无人机独立的路径点
self.current_index = 0 # 当前路径点的索引
self.speed=speed # 速度默认20
self.actual_path = [] # 存储实际经过的路径点
self.initial_transition_done = False # 跟踪是否完成了初始位置到第一路径点的
2.uav/uav_cluster.py 为无人机群声明,包括集群编队队形,共享信息..........等。
python
# 例:
def set_formation(self, queue_type=None):
queue_type = queue_type or self.default_formation # 如果没有传递队形类型,使用默认队形
self.current_formation = queue_type
offset = 15 # 每个无人机的基本间隔
# 设置不同队形的位置偏移
if self.current_formation == '0x01': # 一字纵队
self.formation_offsets = [(i * offset, 0) for i in range(len(self.uavs))]
elif self.current_formation == '0x02': # 二字纵队
self.formation_offsets = [(i % 2 * offset, i // 2 * offset) for i in range(len(self.uavs))]
elif self.current_formation == '0x03': # 一字横队
self.formation_offsets = [(0, i * offset) for i in range(len(self.uavs))]
elif self.current_formation == '0x04': # 前三角队形
self.formation_offsets = [(i * offset, abs(i - len(self.uavs) // 2) * offset) for i inrange(len(self.uavs))]
elif self.current_formation == '0x05': # 后三角队形
self.formation_offsets = [(-i * offset, abs(i - len(self.uavs) // 2) * offset) for i inrange(len(self.uavs))]
elif self.current_formation == '0x06': # 左梯次队形
self.formation_offsets = [(i * offset, -i * offset) for i in range(len(self.uavs))]
elif self.current_formation == '0x07': # 右梯次队形
self.formation_offsets = [(i * offset, i * offset) for i in range(len(self.uavs))]
else:
self.formation_offsets = [(i * offset, 0) for i in range(len(self.uavs))] # 默认队形一字横队
3.info_struct/Cooper_Task.py 为相关指令信息结构体,包括编队,分布俩种模式的具体输入信息。
python
# 例: # 编队机动
def init(self,que_type,reg_type,reg_locat):
self.queue_type=que_type # 队形
self.region_type=reg_type # 区域类型 3 圆形 4 线形 其余为多边形 5表示五边形 6表示六边形
self.region_location=reg_locat # 区域坐标
4.visual_management.py 为整个可视化类的实现。
例: 修改仿真运行中无人机速度:
python
# 初始化视图和无人机模型
self.view = self.create_view()
self.init_uav_models()
# self.timer.start(800) # 设置仿真运行速度
self.timer.start(200) # 设置仿真运行速度
...................
current_point = drone.path_points[drone.current_index]
next_point = drone.path_points[drone.current_index + 1]
num_steps = 400 # 修改点间过渡插值点,越大则仿真中越慢,反之则越快
simulation_main.py 仿真主函数。
python
# 例:
# 说明
# 区域位置信息输入格式
# 圆形 圆心x,圆心y;半径
# 线形 始点x,始点y;终点x,终点y
# 多边形 顶点1x,顶点1y;顶点2x,顶点2y;顶点3x,顶点3y;..........
# 编队侦察 对应算法 编队侦察-多边形。
struct_data = ("0x01", 5, "50,250;100,250;150,150;75,100;25,150") # 一字纵队队形 五边形 多边形区域顶点
task_info=cooper_task("0x01",struct_data) # 编队飞行 任务信息
# 分区侦察 对应算法 分区侦察-圆。
struct_data=(3,3,"65,75;220") # 3个子区域(无人机数量),3:圆形区域标识,大区域坐标
task_info=cooper_task("0x03",struct_data) # 分布飞行 任务信息
# 仿真实例化
base_path="tsp_pathdata/tsp_path_region_{}.csv" # 分布搜索路径 tsp_path_region_0 tsp_path_region_1 tsp_path_region_2 的形式数量就是区域的数量,每个里面是单个区域的路径。
fixed_path="tsp_pathdata//tsp_path.csv" # 编队搜索路径。
visualization = UAVVisualization(task_info,base_path,fixed_path)。
visualization.run()。
根据任务信息,无人机定义进行信息的修改,将相关路径替换为自己的路径文件即可,路径格式为 csv 俩列 x,y
路径文件示意

拓展讨论
后续会逐渐增加三维障碍物的显示,进一步提高系统的复杂度,如果说有什么好的方法,可以与我讨论,或者直接提交到我的git中,大家一块将这个仿真项目完善起来。
项目链接:https://github.com/Ricardo-HY/-Unmanned-aerial-vehicle-simulation.git
如需代码自行下载即可,觉得可以的话,三连一下叭,记得给我 star !!!