UAV | 多算法在多场景下的无人机路径规划(Matlab)

在这里插入图片描述

近年来,无人机(unmanned aerial vehicle,UAV)由于其灵活度高、机动性强、安全风险系数小、成本低等特点,被广泛应用于搜索巡逻、侦察监视、抢险救灾、物流配送、电力巡检、农业灌溉等军用或民用任务。路径规划是无人机执行任务的关键,也是自主无人机在工程应用上的主要挑战。

现有的无人机路径规划算法主要分为经典算法和元启发式算法,经典算法包括:A*算法、快速搜索随机数RRT等,但这些算法在面对复杂环境时搜索效率较低,收敛迟缓。而元启发式算法即在启发式算法基础上改进的一种智能优化算法,路径优化问题是典型的NP-hard问题,其常带有复杂约束,一般的求解器很难找到精确解,但PSO、GA、GWO等智能优化算法能够有效求解复杂的组合优化问题,因而在无人机路径规划的研究中已经得到广泛的应用。

因此,本文将元启发式算法应用于几个不同复杂程度的地形模型,同时,考虑到一些智能优化算法容易陷入局部最优解,因此本文也引入作者的一些原创改进算法以进一步提升其全局搜索性能。

00 文章目录

1 UAV路径规划问题建模

2 智能优化算法、原创改进算法原理

3 代码目录

4 仿真实验

5 源码获取

01 UAV路径规划问题建模

在复杂的地形中,无人机按照路径规划结果从起始点飞向目标点。在飞行过程中,无人机可能面临地形障碍、火力威胁、雷达扫描区域等障碍物,同时有燃料消耗,最大爬升和最大转弯能力等约束,为保证UAV的安全协调飞行,路径规划算法需要得到连接起点和终点的最佳路径。

假设无人机保持预先给定的飞行速度。这样,路径规划问题就被简化为一个静态的折线规划问题。考虑无人机的运行要求,因此通过计算航程长度成本、飞行高度成本、威胁成本和平滑成本,定义无人机路径规划的成本函数,其数学表示如下:

在这里插入图片描述

其中,Xi是决策变量,为n个航站点(x,y,z)的列表,bk为各成本函数的权重,Fk为第k个成本函数。下面具体介绍一下这4个成本函数。本篇中的成本函数的参考文献为[1]。

1.1 航程长度成本

无人机的飞行路线的长度应尽可能短,以保存无人机的燃料消耗,其通过多个段的总和来计算。将两个节点之间的欧几里得距离作为每个段的长度,然后计算特定路径P的路径长度成本如下:

在这里插入图片描述

1.2 威胁成本

除了路径长度最优之外,路径规划中的路径还必须要确保无人机的安全运行,可能会遇到被称为威胁区域的禁飞区(例如雷达探测、防空装备攻击或天气威胁等)。考虑到威胁建模的复杂性和获取真实数据的困难性,本文对威胁环境进行了抽象化处理,将威胁区域抽象为一个半径为定值的圆柱体,威胁区域的作用半径等同于圆柱体的半径,设置威胁区域的目的是为了满足无人机的飞行环境,让无人机成功避开威胁区域以完成飞行任务。其图像如下:

在这里插入图片描述

设M为所有存在威胁的障碍物集合;障碍物模型为圆柱体,其投影的圆心为Cm;Rm为障碍物的半径;D为无人机的直径,相邻两个路径节点与原点的垂直距离为dm,S表示障碍物的危险区域,该值取决于无人机的定位精度与飞行环境。如果无人机处于静态环境中且 GPS 信号良好,那么 S 的值可能是几十米;如果环境中存在移动的物体或GPS信号差,那么S的值将超过百米。对于一个路径,其威胁成本计算式为:
在这里插入图片描述

当无人机在危险区域以外的地方飞行时,不存在碰撞的风险,其威胁为零;而当无人机经过危险区域时,dm越小威胁越大;当无人机途经碰撞区域时,无人机会碰撞坠毁,此时设定该路径的威胁赋值为无穷。

1.3高度成本

UAV飞行高度通常由最小高度hmin和最大高度hmax约束,例如,对于测量和搜索时,需要由相机以特定分辨率和视角收集视觉数据。如图所示,
在这里插入图片描述

图源文献[1]

则高度成本计算如下:

在这里插入图片描述

可以看出,高度成本将保持平均高度并惩罚超出范围的值。

1.4 平滑成本

无人机的飞行角度控制参数主要包括水平转向角和垂直俯仰角,这两个参数变量必须满足无人机的实际角度约束,否则轨迹规划模型无法生成可行的飞行路径。如图所示,
在这里插入图片描述

图源文献[1]

水平转向角φij是投影在水平面Oxy上的两个连续路径段之间的角度,水平转向角计算为:

在这里插入图片描述

垂直俯仰角ψij是投影在竖轴上的两个连续路径段之间的角度,则垂直俯仰角计算为:
在这里插入图片描述

则平滑成本计算如下:
在这里插入图片描述

式中,a1和a2分别为水平转向角和垂直俯仰角的惩罚系数。

1.5 环境建模

本文使用真实的数字高程模型DEM地图进行作为无人机路径规划问题中的环境。选择了一个澳大利亚圣诞岛的DEM,以及另一个具有不同地形结构的数据地图。对其增添不同的威胁物以对不同复杂度的地形进行模拟,最终共生成4个地形以供路径规划,地形环境如下:

在这里插入图片描述

1.6 解的编码

文献[1]中创新从地方之一就是他用的是球形矢量坐标而不是我们通常的直角坐标,球形坐标可以表示如下:
在这里插入图片描述

他用径向距离r,极角θ,方位角φ来表示位置,若三维直角坐标是(x,y,z),那么球坐标就是(r,θ,φ)。这种编码方式的优点在于,若将优化算法中的解的种群按r,θ,φ编码,那么其可以描述出某个点到下一个点的运动轨迹,并且也可以完美使其运动轨迹满足于平滑成本中的转向角和俯仰角的要求,与随机产生n个直角坐标相比,这种方式产生的解质量更高、更容易产生可行解,当固定速度飞行时,可以固定其r。

举一个容易理解的例子:

在这里插入图片描述

若采用直角坐标系进行初始化种群,则是下面的紫色线,其xyz都是随机产生,因此下一个节点虽然可以在空间的任何位置,但节点间没有关联,容易产生不满足于约束的解,而球形坐标能够基于上一个点进行运动,获得可行解的几率更高。

球形坐标与直角坐标的转换关系如下:

在这里插入图片描述

其中,ρ就是径向距离r,ψ就是极角θ,φ就是方位角φ

02智能优化算法、原创改进算法原理

本文使用了灰狼、鲸鱼、粒子群等共6种智能优化算法,并引入了作者的原创改进算法

03 代码目录

在这里插入图片描述

代码仅有MATLAB版本,包含乱码解决方案,若运行出现问题可联系我。

部分代码如下:

在这里插入图片描述

可以看到,作者已基本整理的和函数测试的代码格式一致,非常方便大家进行修改。

04 仿真实验

其中,绘图的结果和我在程序中设定的各成本函数的权值有关
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

另外,作者也引入了在往期文章中的原创改进算法,部分结果如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

05 源码获取

1.作者的此版本的代码基础即是文献[1]中的开源代码,这份代码对UAV的编程学习有很大的帮助

大家可以 搜索该文献获取其代码 或 GZH(KAU的云实验台)后台回复:UAV2 获取其 github地址。

2.本文代码:

GZH(KAU的云实验台)后台回复:UAVB

3.包含作者原创改进算法的代码:

如改进的灰狼、鲸鱼和哈里斯鹰,但由于算法的随机性,其结果并不能每次都是算法中的最优,因此若想要该部分算法的可以和作者了解一下再决定,获取方式:

引入MSGWO的UAV —— GZH(KAU的云实验台)后台回复

UAVGWO

引入AAMCWOA的UAV —— GZH(KAU的云实验台)后台回复

UAVWOA

引入SDMQHHO的UAV —— GZH(KAU的云实验台)后台回复

​UAVHHO

参考文献

[1]PHUNG M D, HA Q P. Safety-enhanced UAV path planning with spherical vector-based particle swarm optimization [J]. Ap⁃ plied Soft Computing, 2021, 107: 107376.

另:如果有伙伴有待解决的优化问题(各种领域都可),可以发我,我会选择性的更新利用优化算法解决这些问题的文章。

如果这篇文章对你有帮助或启发,可以点击右下角的赞/再看 (ง •̀_•́)ง(不点也行),若有定制需求,可私信作者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/602059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第34期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大型语言模型(LLM)等安全领域应用的知识。在这里,您可以…

数据结构之绪论

一个著名公式: 程序数据结构算法 非数值计算:无法用数学的公式或方程来描述 描述非数值计算问题的数据模型不是数学方程,而是诸如表,树和图之类的具有逻辑关系的数据 数据结构:是一门研究非数值计算的程序设计中计算机…

pyqt6 + pycharm 搭建+使用入门

首先安装PyQt6和PyQt6-tools。使用如下命令: pip install PyQt6 PyQt6-tools 但是运行后会报如下错误: 这个时候按照提示执行命令升级pip即可 python.exe -m pip install --upgrade pip 配置pycharm: 打开pycharm,进入setting&am…

大事务提交优化

经常性的报死锁异常,经常性的主从延迟......通过报错信息按图索骥,发现代码是这样的。 这是一段商品发布的逻辑,我们可以看到参数校验、查询、最终的insert以及update全部揉在一个事务中。遇到批量发布商品的时候就经常出现问题了&#xff0c…

css实现一个斑马条纹动画,实现一个理发店门口的小转转,进度条动画同理!

css实现一个斑马条纹动画,实现一个理发店门口的小转转 前置基础知识 css背景background的重复渐变属性repeating-linear-gradient() 该属性类似于linear-gradient(),但他会在整个方向上重复渐变以覆盖整个容器 一、先写一个普通渐变例子linear-gradient() &…

【JAVA】volatile 关键字的作用

🍎个人博客:个人主页 🏆个人专栏: JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 volatile 的作用: 结语 我的其他博客 前言 在多线程编程中,保障数据的一致性和线程之间的可见性是…

复旦MBA科创青干营(二期):探索合肥科创企业的创新之路

11月18日-19日,复旦MBA科创青干营二期学生开启了整合实践活动的第三次企业参访,前往位于合肥的蔚来第二先进制造基地、安徽万邦医药科技股份有限公司和合肥国轩高科动力能源有限公司,在学术导师和科创企业家“双导师”的指导下,深…

【C++】STL 算法 ④ ( 函数对象与谓词 | 一元函数对象 | “ 谓词 “ 概念 | 一元谓词 | find_if 查找算法 | 一元谓词示例 )

文章目录 一、函数对象与谓词1、一元函数对象2、" 谓词 " 概念3、find_if 查找算法 二、一元谓词示例1、代码示例 - 一元谓词示例2、执行结果 一、函数对象与谓词 1、一元函数对象 " 函数对象 " 是通过 重载 函数调用操作符 () 实现的 operator() , 函数对…

【数值分析】非线性方程求根,牛顿法,牛顿下山法,matlab实现

4. 牛顿法 收敛时牛顿法的收敛速度是二阶的,不低于二阶。如果函数有重根,牛顿法一般不是二阶收敛的。 x k 1 x k − f ( x k ) f ′ ( x k ) x_{k1}x_k- \frac{f(x_k)}{f(x_k)} xk1​xk​−f′(xk​)f(xk​)​ matlab实现 %% 牛顿迭代例子 f (x) x…

创建Qt项目

项目工程名称一般不要有特殊符号,不要有中文 项目工程保存路径可修改的,但路径不要带中文 构建系统,有3种,这里使用qmake qmake和cmake区别 构建过程不同,项目管理不同。 1、构建过程,qmake是Qt框架自带的…

MySQL数据库:索引

目录 一. 索引的价值 二. 数据库与磁盘的IO 2.1 磁盘的结构 2.2 磁盘访问 2.3 MySQL与磁盘的交互 三. 对索引的理解 3.1 Page的结构 3.2 B树和B树索引结构 3.2.1 B树的结构 3.2.2 B树 3.3 聚簇索引和非聚簇索引 四. 索引的操作 4.1 索引的创建 4.2 索引的查看 4.…

new FormData 同时发送表单 json 以及文件二进制流

需要新增时同时发送表单 json 以及对应的文件即可使用以下方法传参 let formDataParams new FormData(); 首先通过 new FormData() 创建你需要最后发送的表单 接着将你的对象 json 存储,注意使用 new Blob 创建大表单转换成 json 格式。以…

解决:TypeError: ‘tuple’ object does not support item assignment

解决:TypeError: ‘tuple’ object does not support item assignment 文章目录 解决:TypeError: tuple object does not support item assignment背景报错问题报错翻译报错位置代码报错原因解决方法方法一:方法二:今天的分享就到…

【Flink精讲】Flink数据延迟处理

面试题:Flink数据延迟怎么处理? 将迟到数据直接丢弃【默认方案】将迟到数据收集起来另外处理(旁路输出)重新激活已经关闭的窗口并重新计算以修正结果(Lateness) Flink数据延迟处理方案 用一个案例说明三…

开源许可证

文章目录 一、简介二、详细信息参考 一、简介 开源是指公开源代码,但这并不代表就是免费的。 开源许可证是一种法律许可。 通过它,版权拥有人明确允许,用户可以免费地使用、修改、共享版权软件。 版权法默认禁止共享,也就是说&am…

如何选择消息队列?Kafka 与 RabbitMQ

在上一期中,我们讨论了使用消息队列的好处。然后,我们回顾了消息队列产品的历史。现在看来,当我们需要在项目中使用消息队列时,Kafka 是首选产品。但是,当我们考虑特定要求时,它并不总是最佳选择。 数据库…

【Kubernetes】认证授权RBAC (一)

认证授权RBAC 一、k8s安全管理:认证、授权、准入控制概述1.1、简介【1】认证基本介绍【2】授权基本介绍【3】准入控制基本介绍 1.2、认证【1】客户端认证【2】Bearertoken【3】Serviceaccount【4】拓展:kubeconfig文件 1.3、授权【1】什么是RBAC&#xf…

rust 注释文档生成 cargo doc

rust的cargo文档生成 只需要在每个函数写清楚注释,就可以自动生成文档,很方便 即不用写文档,又可以快速查看,是开发rust的必备技能 rust安装和开发环境配置,可以参考:链接 1.写注释的方法 连续三个 \ 即…

uniapp---安卓真机调试提示检测不到手机【解决办法】

最近在做APP,由于华为手机更新过系统,再次用来调试APP发现就不行了。下面给出具体的解决方法: 第一步:打开【允许开发人员选项】 找到【设置】点击【关于手机】找到【版本号】点击7次或多次,允许开发人员选项。 第二…

首次引入大模型!Bert-vits2-Extra中文特化版40秒素材复刻巫师3叶奈法

Bert-vits2项目又更新了,更新了一个新的分支:中文特化,所谓中文特化,即针对中文音色的特殊优化版本,纯中文底模效果百尺竿头更进一步,同时首次引入了大模型,使用国产IDEA-CCNL/Erlangshen-Megat…