基于粒子群算法的无人机航迹规划-附代码
基于粒子群算法的无人机航迹规划
文章目录
- 基于粒子群算法的无人机航迹规划
- 1.粒子群搜索算法
- 2.无人机飞行环境建模
- 3.无人机航迹规划建模
- 4.实验结果
- 4.1地图创建
- 4.2 航迹规划
- 5.参考文献
- 6.Matlab代码
摘要:本文主要介绍利用粒子群算法来优化无人机航迹规划。
1.粒子群搜索算法
粒子群算法原理请参考:网络博客
2.无人机飞行环境建模
? 环境模型的建立是考验无人机是否可以圆满完成人类所赋予各项任务的基
础和前提,其中第一步便是如何描述规划空间中的障碍物。首先我们将采取函数模拟法模拟地貌特征。其函数表达式为:
z ( x , y ) = s i n ( y + a ) + b s i n ( x ) + c c o s ( d y 2 + x 2 ) + e c o s ( y ) + f s i n ( f y 2 + x 2 ) + g c o s ( y ) (1) z(x,y)=sin(y+a)+bsin(x)+ccos(d\sqrt{y^2+x^2})+ecos(y)+fsin(f\sqrt{y^2+x^2})+gcos(y)\tag{1} z(x,y)=sin(y+a)+bsin(x)+ccos(dy2+x2)+ecos(y)+fsin(fy2+x2)+gcos(y)(1)
其中, ( x , y ) (x, y) (x,y) 为地形上某点投影在水平面上的点坐标, z z z 则为对应点坐标的高度。式中 a , b , c , d , e , f , g a, b, c, d, e, f , g a,b,c,d,e,f,g 是常系数,想要得到不同的地貌特征可以通过改变其常系数的大小,以上建模是作为环境模型的基准地形信息。但为了得到障碍区域我们还需要在这个基准地形上叠加山峰模型,这样就可以模拟像山峰、丘陵等障碍地理信息。山峰模型的数学表达式为:
h ( x , y ) = ∑ i h i e x p [ − ( x − x o i ) 2 a i 2 − ( y − y o i ) 2 b i 2 ] + h o (2) h(x,y)=\sum_ih_iexp[-\frac{(x-x_{oi})^2}{a_i^2}-\frac{(y-y_{oi})^2}{b_i^2}]+h_o \tag{2} h(x,y)=i∑hiexp[−ai2(x−xoi)2−bi2(y−yoi)2]+ho(2)
式 (2)中, h o h_o ho 和 h i h_i hi 分别表示基准地形和第 i i i座山峰的高度, ( x o i , y o i ) (xoi , y oi ) (xoi,yoi)则表示第 i座山峰的中心坐标位置,a i 和 b i 分别是第 i 座山峰沿 x 轴和 y 轴方向的坡度。由式(1)和(2),我们可以得到如下表达式:
Z ( x , y ) = m a x [ z ( x , y ) , h ( x , y ) ] (3) Z(x,y)=max[z(x,y),h(x,y)]\tag{3} Z(x,y)=max[z(x,y),h(x,y)](3)
无人机在躲避障碍物的同时也会经常遇到具有威胁飞行安全的区域,我们称之为威胁区域。这些威胁区域可以是敌人的雷达和防空导弹系统的探测威胁区域也可以是一些其它的威胁,一旦无人机进入这些区域很有可能会被击落或者坠毁。为了简化模型,本文采用半径为 r 的圆柱形区域表示威胁区域,其半径的大小决定威胁区域的覆盖范围。每一个圆柱体的中心位置是对无人机构成最大威胁的地方并向外依次减弱。
3.无人机航迹规划建模
? 在环境建模的基础上,无人机航迹规划需要考虑到在执行复杂任务的过程中自身性能约束要求,合理的设计航迹评价函数才能使得粒子群搜索算法得出的最后结果符合要求,并保证规划出的航迹是有效的。考虑到实际环境中,无人机需要不断适应变化的环境。所以在无人机路径规划过程中,最优路径会显得比较复杂,并包含许多不同的特征。基于实际的情况,本文采用较为复杂的航迹评价函数进行无人机路径规划。影响无人机性能的指标主要包括航迹长度、飞行高度、最小步长、转角代价、最大爬升角等。
? 搜索最佳路径通常与搜索最短路径是密不可分的。在无人机航迹规划过程中,航迹的长度对于大多数航迹规划任务来说也是非常重要的。众所周知,较短的路线可以节省更多的燃料和更多的时间并且发现未知威胁的几率会更低。我们一般把路径定义为无人机从起始点到终点所飞行路程的值,设一条完整的航线有 n n n个节点,其中第 i i i个航路点和第 i + 1 i+1 i+1个航路点之间的距离表示为 l i l_i li ,这两个航路点的坐标分别表示为 ( x i , y i , z i ) (x_i,y_i,z_i ) (xi,yi,zi), ( x i + 1 , y i + 1 , z i + 1 ) (x_{i+1}, y_{i+1},z_{i+1}) (xi+1,yi+1,zi+1)并分别记作 g ( i ) g(i) g(i)和 g ( i + 1 ) g(i+1) g(i+1)。航迹需要满足如下条件:
{ l i = ∣ ∣ g ( i + 1 ) − g ( i ) ∣ ∣ 2 L p a t h = ∑ i = 1 n − 1 l i (4) \begin{cases} l_i = ||g(i+1)-g(i)||_2\\ L_{path}=\sum_{i=1}^{n-1}l_i \end{cases}\tag{4} {li=∣∣g(i+1)−g(i)∣∣2Lpath=∑i=1n−1li(4)
在飞行的过程中会遇到障碍物或者进入威胁区域,如果无人机无法躲避障碍物或者飞入了威胁区域将面临被击落或坠毁的危险以至于无法到达终点,记为 L p a t h = ∞ L_{path}=\infty Lpath=∞,但是无穷函数在实际问题中很难表示,我们采用惩罚的方式进行处理。一般情况下,为了利用地形覆盖自身位置,无人机应尽可能降低高度这可以帮助自身避免一些未知雷达等威胁。但是太低的飞行高度同样会加大无人机同山体和地面的撞击几率,因此设定稳定的飞行高度是非常重要的。飞行高度不应该有太大的变化,稳定的飞行高度可以减少控制系统的负担,节省更多的燃料 。为了使无人机飞行更加安全,给出的飞行高度模型:
{ h h e i g h t = 1 n ∑ i = 0 n − 1 ( z ( i ) − z ‾ ) 2 z ‾ = 1 n ∑ i = 0 n − 1 z ( i ) (5) \begin{cases} h_{height}=\sqrt{\frac{1}{n}\sum_{i=0}^{n-1}(z(i)-\overline{z})^2}\\ \overline{z}=\frac{1}{n}\sum_{i=0}^{n-1}z(i) \end{cases}\tag{5} {hheight=n1∑i=0n−1(z(i)−z)2z=n1∑i=0n−1z(i)(5)
无人机的可操作性也受到其转角代价函数的限制。,在飞行过程中无人机的转角应不大于其预先设定的最大转角,转角的大小会影响其飞行的稳定性。本文的研究中,设定最大转角为 Φ Φ Φ,当前转角为 θ \theta θ并且 a i a_i ai是第 i i i段航路段向量。
{ c o s θ = a i T a i + 1 ∣ a i ∣ ∣ a i + 1 ∣ J t u r n = ∑ i = 1 n ( c o s ( Φ − c o s θ ) ) (6) \begin{cases} cos\theta =\frac{a_i^Ta_{i+1}}{|a_i||a_{i+1}|}\\ J_{turn}=\sum_{i=1}^n(cos(\Phi-cos\theta)) \end{cases}\tag{6} {cosθ=∣ai∣∣ai+1∣aiTai+1Jturn=∑i=1n(cos(Φ−cosθ))(6)
其中, ∣ a ∣ |a| ∣a∣代表矢量 a a a的长度。
? 通过对以上三个方面建立了无人机航迹规划的代价函数,可以得出本文的航迹评价函数如下:
J c o s t = w 1 L p a t h + w 2 h h e i g h t + w 3 J t u r n (7) J_{cost}=w_1L_{path}+w_2h_{height}+w_3J_{turn} \tag{7} Jcost=w1Lpath+w2hheight+w3Jturn(7)
其中, J c o s t J_{cost} Jcost是总的代价函数,参数 w i w_i wi , i = 1 , 2 , 3 i=1,2,3 i=1,2,3 表示每个代价函数的权值,且满足如下条件:
{ w i ≥ 0 ∑ i = 1 3 w i = 1 (8) \begin{cases} w_i\geq0 \\ \sum_{i=1}^3 w_i=1 \end{cases} \tag{8} {wi≥0∑i=13wi=1(8)
通过对总的代价函数进行有效地处理,我们可以得到由线段组成的航迹。不可否认的是得到的路径往往是仅在理论上可行,但为了实际可飞,有必要对航迹进行平滑处理。本文采用三次样条插值的方法对路径进行平滑。
4.实验结果
4.1地图创建
设置地图参数a, b, c, d, e, f , g=1。地图大小为:200*200。设置三个山峰,山峰信息如表1所示。威胁区域信息如表2所示
| 信息 | 山峰中心坐标 | 山峰高度 | 山峰X方向坡度 | 山峰y方向坡度 |
|---|---|---|---|---|
| 山峰1 | [60,60] | 50 | 20 | 20 |
| 山峰2 | [100,100] | 60 | 30 | 30 |
| 山峰3 | [150,150] | 80 | 20 | 20 |
| 信息 | 威胁区域中心坐标 | 威胁区域半径 |
|---|---|---|
| 威胁区域1 | [150,50] | 30 |
| 威胁区域2 | [50,150] | 20 |
创建的地图如下:

4.2 航迹规划
设置起点坐标为[0,0,20],终点坐标为[200,200,20]。利用粒子群算法对航迹评价函数式(7)进行优化。优化结果如下:


从结果来看,粒子群算法规划出了一条比较好的路径,表明算法具有一定的优势。
5.参考文献
[1]薛建凯. 一种新型的群智能优化技术的研究与应用[D].东华大学,2020.DOI:10.27012/d.cnki.gdhuu.2020.000178.
6.Matlab代码
相关文章:
基于粒子群算法的无人机航迹规划-附代码
基于粒子群算法的无人机航迹规划 文章目录 基于粒子群算法的无人机航迹规划1.粒子群搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用粒子群算法来优化无人机航迹规划。 1.粒子群…...
前端使用qrcodejs2插件实现根据网址生成二维码
实现效果: 实现方法: 1.安装插件 npm install --save qrcodejs2 2.可以全局引入,也可以只在使用的vue文件中引入 import QRCode from qrcodejs2; 3.在vue文件的template中设置放置二维码的div <div id"qrcode"></di…...
A股风格因子看板 (2023.10 第11期)
该因子看板跟踪A股风格因子,该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子,用以分析市场风格切换、组合风格暴露等。 今日为该因子跟踪第11期,指数组合数据截止日2023-09-30,要点如下 近1年A股风格因子检验统…...
anaconda安装python 3.11
最近需要测试gpt researcher项目,gpt researcher项目的环境是3.11,于是用anaconda创建一个虚拟环境,结果报错了: UnsatisfiableError: The following specifications were found to be incompatible with each other:Package xz c…...
问题:EventSource 收不到流数据及 EventSource 的 onmessage 方法为null
文章目录 问题分析问题 在开发时,有用到 EventSource,但是在 new EventSource 的时候,打印 new EventSource 如下: onmessage : null, onerror : null, onopen: f(event)前端...
P2 B+树索引
文章目录 Task1 B树页B树页B树内部结点B树叶子结点 Task2 B树操作Task2 B树插入和搜索的单一值插入单一值搜索单一值 Task2 B树删除 Task3 叶子扫描的迭代器Task4 并行索引 Task1 B树页 B树页 实际上是每个B树页面的标题部分,包含叶子页面和内部页面共享的信息。 …...
爬虫知识之BeautifulSoup库安装及简单介绍
一. 前言 在前面的几篇文章中我介绍了如何通过Python分析源代码来爬取博客、维基百科InfoBox和图片,其文章链接如下: 其中核心代码如下: # coding=utf-8 import urllib import re #下载静态HTML网页 url=http://www.csdn.net/ content = urllib.urlopen(url).read…...
如何有效取代FTP来帮助企业快速传输大文件
在互联网的发展历史上,FTP是一种具有里程碑意义的协议,它最早出现在1971年,是实现网络上文件传输的基础。FTP的优点是简单、稳定、兼容性强,可以在不同的操作系统和平台之间进行文件交换。然而,时代在进步,…...
免登陆积分商城原理
有客户需要免登陆积分商城,研究了一下发现免登陆用途广泛,实现原理也很简单。如果是浏览器无非就是使用fingerprintjs2之类的扩展来实现获取浏览器指纹ID,如果是APP就获取设备唯一标识,然后在使用cryptojs加密来传递到php…...
muduo源码学习base——Atomic(原子操作与原子整数)
Atomic(原子操作与原子整数) 前置知识AtomicIntegerTget()getAndAdd()getAndSet() 关于原子操作实现无锁队列(lock-free-queue) 前置知识 happens-before: 用来描述两个操作的内存可见性 如果操作 X happens-before 操作 Y,那么 X 的结果对于…...
最短路相关笔记
Floyd Floyd 算法,是一种在图中求任意两点间最短路径的算法。 Floyd 算法适用于求解无负边权回路的图。 时间复杂度为 O ( n 3 ) O(n^3) O(n3),空间复杂度 O ( n 2 ) O(n^2) O(n2)。 对于两点 ( i , j ) (i,j) (i,j) 之间的最短路径,有…...
Web前端-Vue2+Vue3基础入门到实战项目-Day5(自定义指令, 插槽, 案例商品列表, 路由入门)
自定义指令 基本使用 自定义指令: 自己定义的指令, 可以封装一些dom操作, 扩展额外功能全局注册// 1. 全局注册指令 Vue.directive(focus, {// inserted 会在 指令所在的元素, 被插入到页面中时触发inserted (el) {// el 就是指令所绑定的元素// console.log(el)el.focus()} …...
mysql json数据类型 相关函数
创建JSON文本的函数 1.JSON_ARRAY(转换json数组) 2.JSON_OBJECT(转换json对象) 3.JSON_QUOTE(转义字符串) 搜索JSON文本的函数 1.JSON_CONTAINS(json当中是否包含指定value) 2.J…...
如何实现前端实时通信(WebSocket、Socket.io等)?
聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...
使用 SSSD 进行网络用户身份验证
文章目录 使用 SSSD 进行网络用户身份验证SSSD和Active Directory先决条件、假设和要求软件安装加域 SSSD配置自动创建HOME目录 检查和验证 Kerberos票证已知的问题参考 使用 SSSD 进行网络用户身份验证 SSSD 代表系统安全服务守护程序,它实际上是处理来自各种网络…...
紫光展锐携中国联通完成RedCap芯片V517孵化测试
近日,紫光展锐携手中国联通5G物联网OPENLAB开放实验室(简称“OPENLAB实验室”)共同完成RedCap芯片V517创新孵化,并实现在联通5G全频段3.5GHz、2.1GHz、900MHz下的端到端业务验证测试。 V517是一款基于紫光展锐5G成熟平台设计与研发…...
算法通关村第十一关青铜挑战——移位运算详解
大家好,我是怒码少年小码。 计算机到底是怎么处理数字的? 数字在计算机中的表示 机器数 一个数在计算机中的二进制表示形式,叫做这个数的机器数。 机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0&am…...
2023年面试测试工程师一般问什么问题?
面试和项目一起,是自学路上的两大拦路虎。面试测试工程师一般会被问什么问题,总结下来一般是下面这4类: 1.做好自我介绍 2.项目相关问题 3.技术相关问题 4.人事相关问题 接下来,主要从以上四个方向分别展开介绍。为了让大家更有获…...
2023年中国汽车覆盖件模具竞争格局、市场规模及行业需求前景[图]
汽车覆盖件模具是汽车车身生产的重要工艺装备,其设计和制造时间约占汽车开发周期的 2/3,是汽车换型的重要制约因素之一。汽车覆盖件模具具有尺寸大、工作型面复杂、技术标准高等特点,属于技术密集型产品。汽车覆盖件模具按以其冲压的汽车覆盖…...
vue3项目运行报错import zhCn from “element-plus/lib/locale/lang/zh-cn“
解决办法 import zhCn from "element-plus/lib/locale/lang/zh-cn";修改为 import zhCn from "element-plus/dist/locale/zh-cn.mjs";...
为什么你的C# 13主构造函数无法单步执行?微软Roslyn团队2024Q2调试协议变更详解(首批实测报告)
第一章:为什么你的C# 13主构造函数无法单步执行?C# 13 引入的主构造函数(Primary Constructor)语法简洁优雅,但调试时却常出现断点失效、F10/F11 无法单步进入等问题。根本原因在于:**主构造函数不生成独立…...
如何快速实现FastAPI国际化:多语言支持完整指南
如何快速实现FastAPI国际化:多语言支持完整指南 【免费下载链接】fastapi FastAPI framework, high performance, easy to learn, fast to code, ready for production 项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi FastAPI作为一款高性能、易…...
OpenClaw+百川2-13B-4bits:自动化生成周报并邮件发送实战
OpenClaw百川2-13B-4bits:自动化生成周报并邮件发送实战 1. 为什么选择这个组合方案 作为一位长期被周报折磨的开发者,我一直在寻找能解放双手的自动化方案。传统模板化周报工具缺乏灵活性,而纯手工编写又耗时费力。直到发现OpenClaw与百川…...
告别Flask和Django!用FastAPI + Pydantic 5分钟搞定带自动验证的用户注册API
5分钟用FastAPIPydantic构建带智能验证的用户注册系统 还在为Flask中冗长的数据验证逻辑头疼?或是被Django表单的复杂性困扰?现代Python开发早已进化到"声明即验证"的新范式。今天我们将彻底告别手动编写if username and len(password)>8的…...
工业显示屏选购要点,接口兼容与长期稳定测试
采购设备用串口屏这些年,我经常要和各种品牌打交道。今天不谈那些华丽的宣传语,就用实际工作中的观察,聊聊恒域威这个品牌的显示屏在适配方面的一些特点,希望能给同行一些参考。从硬件接口到工作环境选串口屏,首先要看…...
FireRedASR Pro多模态应用初探:结合视觉信息的音视频联合分析
FireRedASR Pro多模态应用初探:结合视觉信息的音视频联合分析 不知道你有没有过这样的经历:看一段访谈视频,总觉得单听声音或者单看画面,好像都差点意思。比如嘉宾明明在说“我很高兴”,但表情却有点勉强;…...
LangGraph从入门到精通(二)——构建你的第一个有状态智能体
1. 环境准备与基础概念回顾 在开始构建有状态智能体之前,我们需要先确保开发环境就绪。我推荐使用Python 3.10版本,这个版本在稳定性和新特性支持上达到了很好的平衡。安装LangGraph非常简单,只需要一条命令: pip install langgra…...
AI应用开发入门(0)|为什么你学了很多,却还是不会做AI应用?
这段时间在系统学习 AI 应用开发的过程中,我逐渐有一个比较强烈的感受:相关内容其实并不少,但真正能把“整个路径讲清楚”的并不多。你可能也有类似的经历。✔ 看了很多 Prompt、RAG、Agent 的文章,当时感觉都懂了 ✔ 跟着教程做…...
随笔——视觉惯性SLAM方法比较
一、方法分类概览 视觉SLAM根据前端匹配方式主要分为: 特征点法:提取角点/边缘,计算描述子匹配 → 精度高、鲁棒,但地图稀疏、弱纹理易失败。直接法:直接使用像素灰度值 → 计算快、弱纹理可用,但对光照/…...
LFM2.5-1.2B-Thinking-GGUF保姆级教程:Windows/Mac/Linux三平台本地部署
LFM2.5-1.2B-Thinking-GGUF保姆级教程:Windows/Mac/Linux三平台本地部署 1. 平台介绍 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的一款轻量级文本生成模型,特别适合在资源有限的设备上快速部署和使用。这个模型采用了GGUF格式,配合llama.c…...
