基于袋獾算法的无人机航迹规划-附代码

基于袋獾算法的无人机航迹规划

文章目录

  • 基于袋獾算法的无人机航迹规划
    • 1.袋獾搜索算法
    • 2.无人机飞行环境建模
    • 3.无人机航迹规划建模
    • 4.实验结果
      • 4.1地图创建
      • 4.2 航迹规划
    • 5.参考文献
    • 6.Matlab代码

摘要:本文主要介绍利用袋獾算法来优化无人机航迹规划。

1.袋獾搜索算法

袋獾算法原理请参考:https://blog.csdn.net/u011835903/article/details/130543093

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)=ihiexp[ai2(xxoi)2bi2(yyoi)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=1n1li(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=n1i=0n1(z(i)z)2 z=n1i=0n1z(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+1aiTai+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} {wi0i=13wi=1(8)
通过对总的代价函数进行有效地处理,我们可以得到由线段组成的航迹。不可否认的是得到的路径往往是仅在理论上可行,但为了实际可飞,有必要对航迹进行平滑处理。本文采用三次样条插值的方法对路径进行平滑。

4.实验结果

4.1地图创建

设置地图参数a, b, c, d, e, f , g=1。地图大小为:200*200。设置三个山峰,山峰信息如表1所示。威胁区域信息如表2所示

表1:山峰信息
信息山峰中心坐标山峰高度山峰X方向坡度山峰y方向坡度
山峰1[60,60]502020
山峰2[100,100]603030
山峰3[150,150]802020
表2 威胁区域信息
信息威胁区域中心坐标威胁区域半径
威胁区域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代码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入探讨 Presto 中的缓存

Presto是一种流行的开源分布式SQL引擎,使组织能够在多个数据源上大规模运行交互式分析查询。缓存是一种典型的提高 Presto 查询性能的优化技术。它为 Presto 平台提供了显着的性能和效率改进。 缓存通过将频繁访问的数据存储在内存或快速本地存储中,避免…

redis的数据类型及操作

一、redis 的数据库 Redis是一个字典结构的存储服务器。一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存在哪个字典中。这与关系型数据库例中可以创建多个数据库似。因此,可以将每个字典理解为一个独立的数据库。每个数据库对外都是以0开始的递增数字命名…

HTML的表单标签和无语义标签的讲解

HTML的表单标签 表单是让用户输入信息的重要途径, 分成两个部分: 表单域: 包含表单元素的区域. 重点是 form 标签. 表单控件: 输入框, 提交按钮等. 重点是 input 标签 form 标签 使用form进行前后端交互.把页面上,用户进行的操作/输入提交到服务器上 input 标签 有很多形态,能…

本地消息表分布式事务

BASE论文 论文链接:https://queue.acm.org/detail.cfm?id1394128 里面提到, The most critical factor in implementing the queue, however, is ensuring that the backing persistence is on the same resource as the database. This is necessary…

5G边缘计算网关的功能及作用

5G边缘计算网关具有多种功能。 首先,它支持智能云端控制,可以通过5G/4G/WIFI等无线网络将采集的数据直接上云,实现异地远程监测控制、预警通知、报告推送和设备连接等工作。 其次,5G边缘计算网关可以采集各种数据,包…

vue中 process.env 对象为空对象问题

问题:今天在处理vue项目环境问题的时候,发现直接打印 process 对象和打印 process.env 时 env 对象输出结果是不一样的,如下图所示: 在网上搜索了一番后发现还是有挺多朋友对此感到疑惑的,询问了同事,同…

数模之线性规划

线性规划 优化类问题:有限的资源,最大的收益 例子: 华强去水果摊找茬,水果摊上共3个瓜,华强总共有40点体力值,每劈一个瓜能带来40点挑衅值,每挑一个瓜问“你这瓜保熟吗”能带来30点挑衅值,劈瓜消耗20点体力值,问话消耗…

Vue3 简单实现虚拟Table,展示海量单词.利用WebAPI speechSynthesis,朗读英语单词

目录 本页面完整代码 视频演示 完整的页面代码 利用webapi speechSynthesis帮助我们自动郎读英语单词,可以利用这个API,做一些小说朗读或到账提示。 本页面完整代码 用Vue写了一个简单页面,里面还写了一个简单的虚拟Table支持海量数据展示…

ubuntu 18.04安装自己ko驱动 修改secure boot

因为本人老折腾自己的电脑,所以老重装系统,然后配置又不见了,这次配置赶紧记下来 insmod netlink_test.ko 报错:insmod: ERROR: could not insert module netlink_test.ko: Operation not permitted 添加 sudo insmod netlink_te…

XCTF刷题十一道(01)

文章目录 Training-WWW-RobotsPHP2unserialize3view-sourceget_postrobotsbackupcookiedisabled_buttonweak_authsimple_php Training-WWW-Robots robots.txt,防爬虫,访问urlrobots.txt PHP2 phps源码泄露 >phps文件就是php的源代码文件&#xff0…

swift语言用哪种库适合做爬虫?

目录 1、Alamofire 2、URLSession 3、YepHttp 4、Kickbox 5、Vapor 注意事项 总结 在Swift语言中,可以使用第三方库来帮助进行网络爬虫的开发。以下是几个适合Swift语言使用的爬虫库,以及相应的代码示例: 1、Alamofire Alamofire是Sw…

【k8s】pod控制器

一、pod控制器及其功用 Pod是kubernetes的最小管理单元,在kubernetes中,按照Pod的创建方式可以将其分为两类 自主式Pod: kubernetes直接创建出来的Pod,这种Pod删除后就没有了,也不会重建 控制器创建的Pod&#xff1a…

润和软件HopeStage与奇安信网神终端安全管理系统、可信浏览器完成产品兼容性互认证

近日,江苏润和软件股份有限公司(以下简称“润和软件”)HopeStage 操作系统与奇安信网神信息技术(北京)股份有限公司(以下简称“奇安信”)终端安全管理系统、可信浏览器完成产品兼容性测试。 测试…

多路转接(上)——select

目录 一、select接口 1.认识select系统调用 2.对各个参数的认识 二、编写select服务器 1.两个工具类 2.网络套接字封装 3.服务器类编写 4.源文件编写 5.运行 一、select接口 1.认识select系统调用 int select(int nfds, fd_set readfds, fd_set writefds, fd_set ex…

Node.js |(六)express框架 | 尚硅谷2023版Node.js零基础视频教程

学习视频:尚硅谷2023版Node.js零基础视频教程,nodejs新手到高手 文章目录 📚express使用🐇初体验🐇express路由⭐️路由的使用⭐️获取请求参数⭐️获取路由参数🔥练习:根据路由参数响应歌手信息…

小白学爬虫:通过关键词搜索1688商品列表数据接口|1688商品列表数据接口|1688商品列表数据采集|1688API接口

通过关键词搜索1688商品列表数据接口可以使用1688开放平台提供的API接口实现。以下是使用关键词搜索商品列表数据的基本步骤: 1、注册并获取AppKey。 2、构造请求参数,包括搜索关键词、页码、每页条数等。 3、通过API接口链接,将请求参数发送…

简单漂亮的登录页面

效果图 说明 开发环境&#xff1a;vue3&#xff0c;sass 代码 <template><div class"container"><div class"card-container"><div class"card-left"><span><h1>Dashboard</h1><p>Lorem ip…

后台管理系统解决方案-中大型-Vben Admin

后台管理系统解决方案-中大型-Vben Admin 官网 Vben Admin 在线演示 Vben Admin 为什么选择它 github现有20K星&#xff0c;并且它有个可视化生成表单&#xff0c;我很喜欢 快速开始 # 拉取代码 git clone https://github.com/vbenjs/vue-vben-admin-doc# 安装依赖 yarn#…

【ONE·C++ || 网络基础(二)】

总言 主要内容&#xff1a;演示socke套接字编程&#xff08;TCP模式&#xff09;&#xff0c;介绍序列化和反序列化&#xff0c;并进行演示&#xff08;json版本达成协议编写、守护进程介绍&#xff09;。 文章目录 总言4、基于套接字的TCP网络程序4.0、log.hpp4.1、version1.…

C++中将数据添加到文件的末尾

参考:https://blog.csdn.net/qq_23880193/article/details/44279283 C中文件的读取需要包含fstream文件&#xff0c;即&#xff1a;#include 文件的读取和写入是是通过流操作来的&#xff0c;这不像输入、输出流那样&#xff0c;库中已经定义了对象cin和cout 文件的读取需要声…