当前位置: 首页 > news >正文

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

项目概述

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

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

示意图:

功能说明

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

代码说明

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

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

# 例:
def init(self, id, initial_coords, high=50, status=0,speed=20):self.id = idself.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        # 速度默认20self.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_typeoffset = 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 !!!

http://www.xdnf.cn/news/673993.html

相关文章:

  • 仓颉入门:特性
  • Elasticsearch的运维
  • ubuntu20.04安装CUDA、Cudnn
  • 深度学习————注意力机制模块
  • Milvus向量数据库DML操作实战教程
  • android平台驱动开发(四)--系统属性节点控制GPIO
  • 字节跳动BAGEL-7B-MoT模型开源:多模态AI技术的新范式与行业涟漪
  • Python爬虫实战:研究Playwright框架相关技术
  • SD07_NVM的安装及相关操作
  • 解码STREAM:GEO技术方法论全解析
  • 多空短线决策副图指标,通达信炒股软件指标操盘图文教程
  • 安卓学习笔记-声明式UI
  • 2025年5月蓝桥杯stema省赛真题——象棋移动
  • ViewModel
  • MySQL问题:主要索引类型(聚簇、辅助、覆盖、前缀)
  • WPF中的图标闪烁功能
  • ubuntu 制作 ssl 证书
  • WEB安全威胁与SSL
  • 互联网大厂Java面试:从Spring到微服务的挑战
  • Linux下使用socat将TCP服务转为虚拟串口设备
  • Docker 在 CI/CD 中的应用:自动化构建、测试与部署流程设计
  • 超声体模的保修制度和维护保养
  • uniapp vue3 鸿蒙支持的 HTML5+接口
  • 服务器数据迁移
  • Windows逆向工程提升之IMAGE_TLS_DIRECTORY
  • 嵌入式学习 D29:系统编程--线程
  • AbMole| MGCD0103(M1790,Mocetinostat)
  • 深入解析Google多线程环境下的空间配置器——TCMalloc
  • 哈希算法及其在文件唯一性判定中的应用
  • [Vue]浅浅了解vue3响应式的基本原理