无人机仿真环境(3维)附项目git链接

发布于:2025-05-28 ⋅ 阅读:(19) ⋅ 点赞:(0)

项目概述

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

主页面显示:上面为三维路径图,包括区域描绘,路径绘制,下方会显示仿真运行过程中的飞行信息。

示意图:

功能说明

支持多无人机不同高度飞行,实时显示对应位置信息,状态信息,编队内角色,路径总路程,预计完成时间(与设置的无人机飞行时间相关)。

代码说明

由于本人良好的编码习惯,代码中均有注释说明,这里不做赘述,仅对项目文件进行说明及个别举例。

1.uav/single_uav.py 为单个无人机声明,包括各自航路点,高度,速度,状态........等基本信息。

# 例:
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 为无人机群声明,包括集群编队队形,共享信息..........等。

# 例:
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 为相关指令信息结构体,包括编队,分布俩种模式的具体输入信息。

# 例: # 编队机动 
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 为整个可视化类的实现。

例: 修改仿真运行中无人机速度:

    # 初始化视图和无人机模型
    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 仿真主函数。

# 例:
# 说明
# 区域位置信息输入格式
# 圆形 圆心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 !!!


网站公告

今日签到

点亮在社区的每一天
去签到