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

项目概述

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

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

示意图:

功能说明

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

代码说明

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

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 !!!

相关推荐
视觉语言导航17 分钟前
中山大学无人机具身导航新突破!FlightGPT:迈向通用性和可解释性的无人机视觉语言导航
人工智能·深度学习·无人机·智慧城市·具身智能
lubiii_25 分钟前
网络安全十大漏洞
python·安全·web安全·网络安全
之之为知知28 分钟前
深度学习能取代机器学习吗?
人工智能·pytorch·python·深度学习·机器学习·数据挖掘·tensorflow
小森776730 分钟前
(九)深度学习---自然语言处理基础
人工智能·python·深度学习·机器学习·自然语言处理·keras
hello kitty w1 小时前
Python学习(1) ----- Python的文件读取和写入
java·python·学习
Coding的叶子1 小时前
深入了解PyTorch:起源、优势、发展与安装指南
人工智能·pytorch·python
hvinsion1 小时前
【开源解析】基于PyQt5+Folium的谷歌地图应用开发:从入门到实战
python·qt·开源·地图·谷歌地图·folium·地图引擎
程序员秘密基地1 小时前
基于python,html,flask,echart,ids/ips,VMware,mysql,在线sdn防御ddos系统
python·网络安全·flask·ddos·安全性测试
weixin_447195292 小时前
使用 find 遍历软链接目录时,为什么必须加 -L
python
南辞22 小时前
Python
开发语言·python