基于PSO的UAV三维路径规划(Matlab代码实现)

news2025/7/5 2:39:36

 🍒🍒🍒欢迎关注🌈🌈🌈

📝个人主页:我爱Matlab


👍点赞➕评论➕收藏 == 养成习惯(一键三连)🌻🌻🌻

🍌希望大家多多支持🍓~一起加油 🤗

💬语录:将来的我一定会感谢现在奋斗的自己!

🍁🥬🕒摘要🕒🥬🍁

对于UAV三维路径规划这一优化问题而言,需要考虑多方面的因素。首先,UAV要在地图限制的区域内飞行。其次,为了令UAV安全飞行,UAV不能与地面和障碍物发生碰撞,并且与地面保持一定的安全距离。最后,UAV的飞行距离要尽可能短,以节省燃料并尽快到达目的地。

本代码是基于粒子群算法对UAV进行三维路径规划。首先需要构建三维地图。

其次,设置粒子群算法的相关参数,迭代次数为100,粒子数为50,惯性权重为1.2,学习因子c1=c2=1.5,路径节点为4个(可自行增加或减少),其中每个节点为三维坐标(x,y,z),为了使UAV轨迹光滑,利用三次样条拟合散点对路径节点进行处理。

最后,需要判断路径是否与障碍相交,若相交,则设置一个比较大的惩罚项,反之保存当前适应度和路径节点,本代码的目标函数包括路径的总长度和路径节点距离地面的高度,均为越小越好,下图为优化的路径结果图。

✨🔎⚡运行结果⚡🔎✨

 

 

💂♨️👨‍🎓Matlab代码👨‍🎓♨️💂

clc
clear
close all

%% 三维路径规划模型定义
startPos = [40, 129, 5];
goalPos = [951, 833, 10];

% 随机定义山峰地图
mapRange = [1000,1000,120];              % 地图长、宽、高范围
[X,Y,Z] = defMap4(mapRange);

%% 初始参数设置
N = 100;           % 迭代次数
M = 50;            % 粒子数量
pointNum = 4;      % 每一个粒子包含三个位置点
w = 1.2;           % 惯性权重
c1 = 1.5;            % 社会权重
c2 = 1.5;            % 认知权重

% 粒子位置界限
posBound = [[0,0,10]',[1000,1000,60]'];

% 粒子速度界限
alpha = 0.1;
velBound(:,2) = alpha*(posBound(:,2) - posBound(:,1));
velBound(:,1) = -velBound(:,2);
% velBound(3,1)=-4;
% velBound(3,2)=4;

%% 种群初始化
% 初始化一个空的粒子结构体
particles.pos= [];
particles.v = [];
particles.fitness = [];
particles.path = [];
particles.Best.pos = [];
particles.Best.fitness = [];
particles.Best.path = [];

% 定义M个粒子的结构体
particles = repmat(particles,M,1);

% 初始化每一代的最优粒子
GlobalBest.fitness = [inf,inf];

% 第一代的个体粒子初始化
for i = 1:M 
    % 粒子按照正态分布随机生成
    particles(i).pos.x = unifrnd(posBound(1,1),posBound(1,2),1,pointNum);
    particles(i).pos.x=sort(particles(i).pos.x);
    particles(i).pos.y = unifrnd(posBound(2,1),posBound(2,2),1,pointNum);
    particles(i).pos.y=sort(particles(i).pos.y);
    particles(i).pos.z = unifrnd(posBound(3,1),posBound(3,2),1,pointNum);
    %particles(i).pos.z=sort(particles(i).pos.z);
    
    % 初始化速度
%     particles(i).v.x = zeros(1, pointNum);
%     particles(i).v.y = zeros(1, pointNum);
%     particles(i).v.z = zeros(1, pointNum);
    particles(i).v.x=unifrnd(velBound(1,1),velBound(1,2),1,pointNum);
    particles(i).v.y=unifrnd(velBound(2,1),velBound(2,2),1,pointNum);
    particles(i).v.z=unifrnd(velBound(3,1),velBound(3,2),1,pointNum);
    % 适应度
    [flag,fitness,path] = calFitness(startPos, goalPos,X,Y,Z, particles(i).pos);
    
    % 碰撞检测判断
    if flag == 1
        % 若flag=1,表明此路径将与障碍物相交,则增大适应度值
        particles(i).fitness = 1000*fitness;
        particles(i).path = path;
    else
        % 否则,表明可以选择此路径
        particles(i).fitness = fitness;
        particles(i).path = path;
    end
    
    % 更新个体粒子的最优
    particles(i).Best.pos = particles(i).pos;
    particles(i).Best.fitness = particles(i).fitness;
    particles(i).Best.path = particles(i).path;
    
    % 更新全局最优
    if (particles(i).Best.fitness(1) < GlobalBest.fitness(1))&(particles(i).Best.fitness(2) < GlobalBest.fitness(2))
        GlobalBest = particles(i).Best;
    end
end

% 初始化每一代的最优适应度,用于画适应度迭代图
fitness_beat_iters = zeros(N,2);
 

完整代码:

链接:https://pan.baidu.com/s/1P5KwcXDJvRG_N0jkN9Xn8A 
提取码:matl 
--来自百度网盘超级会员V3的分享

📜📢🌈参考文献🌈📢📜

[1]孙雪莹,易军凯.无人机三维路径规划的粒子群混合算法[J/OL].电讯技术:1-12[2022-11-15].http://kns.cnki.net/kcms/detail/51.1267.TN.20220307.1837.004.html

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

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

相关文章

ArcGIS计算地形湿度指数

TWI是区域地形对径流流向和蓄积影响的物理指标&#xff0c;有助于识别降雨径流模式、潜在土壤含水量增加区域和积水区域。 计算方法&#xff1a;TWI是通过细尺度地形与上梯度对地表面积的贡献相互作用&#xff0c;根据以下关系得到的(Beven et al.,1979) [1] : TWI ln [CA/…

行深智能亮相乌镇互联网大会,荣获直通乌镇全球互联网大赛一等奖

11月9-11日&#xff0c;2022年世界互联网大会在浙江乌镇举行&#xff0c;本届大会以“共建网络世界、共创数字未来——携手构建网络空间命运共同体”为主题&#xff0c;吸引了来自世界各地的政府、国际组织、企业参加。 行深智能携系列无人车及解决方案在乌镇运河智能汽车文化…

react-hooks的节流与闭包,以及useCallback的用处

目录 useThrottle: 封装了一个节流的hook useCallback的作用&#xff08;性能优化&#xff09; 不用Hook封装节流方法的情况&#xff0c;看是怎么形成闭包的&#xff1a; useThrottle: 封装了一个节流的hook import { useEffect, useCallback, useRef } from react;function…

2023年软件测试的发展如何?

近些年&#xff0c;自动化测试在很多软件公司已经成为一种必备的测试方式。即使那些还没运用自动化测试手段的公司&#xff0c;也正开始着手筹划了。每年&#xff0c;我们从举办的各种测试论坛和峰会上可以发现&#xff0c;自动化测试和敏捷测试必定是会议的主角。再看看最具有…

IPV6地址详解

♥️作者&#xff1a;小刘在C站 ♥️每天分享课堂笔记&#xff0c;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放。 目录 一.为什么要使用IPv6 二. ipv4 三. ipv6 地址&#xff0c; 四 ipv6与 ipv4 地址相比 1.v4…

MySQL数据库 -- 表的增删查改

今天来讲MySQL数据库的表增删查改操作。今天主要是通过栗子来演示语法使用的&#xff0c;话不多说&#xff0c;直奔主题~ 表的增删查改&#xff1a; CRUD : Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; 目录 Cre…

你适合做自动化测试吗?

上一篇对于自动化测试有了基础了解&#xff0c;这一篇我们来看看你适合做自动化测试吗&#xff1f; 你适合走自动化测试这条路吗&#xff1f; 不管是UI自动化还是接口自动化&#xff0c;肯定的一点是&#xff0c;必须有代码基础&#xff0c;不管是java还是python。所以如果你…

Docker 安装Oracle 11g免费版—无坑小白白版(值得拥有)

​ Docker 安装Oracle 11g免费版—无坑小白白版&#xff08;值得拥有&#xff09; 第一步&#xff1a;登录自己的服务器&#xff08;root用户/或授权用户&#xff09; 第二步&#xff1a;下载 1、下载镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_…

基于概率距离削减法、蒙特卡洛削减法的风光场景不确定性削减附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

MySQL数据库期末考试试题及参考答案(01)

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 一、 填空题 ___在20世纪80年代被美国国家标准学会和国际标准化组织定义为关系型数据库语言的标准。数据模型所描述的内容包括3个部分&#xff0c;分别是数据结构、数据操作…

[论文阅读] Generative Adversarial Networks for Video-to-Video Domain Adaptation

[论文地址] [代码] [AAAI 20] Abstract 来自多中心的内窥镜视频通常有不同的成像条件&#xff0c;如颜色和光照&#xff0c;这使得在一个领域训练的模型通常不能很好地推广到另一个领域。领域适应是解决这一问题的潜在方案之一。然而&#xff0c;现有的工作很少关注基于视频的…

数据结构与算法简介

什么是数据结构 数据结构的研究对象 研究一组有特定关系的数据的存储与处理通过抽象的方法 数据结构的研究内容 数据之间的逻辑关系&#xff1a;存储实现&#xff08;如何存储某种逻辑关系&#xff09; 集合结构&#xff1a;数据元素放在一起&#xff0c;但是元素间没有关系…

Python-Flask 蓝图以及钩子函数(5)

Flask 蓝图一、初识蓝图的页面结构二、创建蓝图的步骤三、钩子函数官方解释&#xff1a;Blueprint 是一种组织一组相关视图及其他代码的方式。与把视图及其他 代码直接注册到应用的方式不同&#xff0c;蓝图方式是把它们注册到蓝图&#xff0c;然后在工厂函数中 把蓝图注册到应…

Git 用法指导

1. 安装 Git 1. linux 安装 Git # 试着输入git&#xff0c;看看系统有没有安装Git&#xff1a; $ git The program git is currently not installed. You can install it by typing: sudo apt-get install git# 安装命令 sudo apt-get install git 如果是其他Linux版本&#…

Vue | Vue.js 高级语法系列

&#x1f5a5;️ Vue.js专栏&#xff1a;Vue.js 高级语法系列 &#x1f9d1;‍&#x1f4bc; 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; ✨ 个人主页&#xff1a;CoderHing的个人主页 &#x1f340; 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ &#x1f449;…

都说测试行业饱和了,为什么我们公司给初级测试开到了12K?

故事起因&#xff1a; 最近我有个刚毕业的学生问我说&#xff1a;我感觉现在测试行业已经饱和了&#xff0c;也不是说饱和了&#xff0c;是初级的测试根本就没有公司要&#xff0c;哪怕你不要工资也没公司要你&#xff0c;测试刚学出来&#xff0c;没有任何的项目经验和工作经验…

字符串c++练习(KMP等)

反转字符串 文章目录反转字符串反转字符串||替换空格翻转字符串里的单词左旋转字符串找出字符串中第一个匹配项的下标【模板】KMP字符串匹配题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示样例 1 解释数据规模与约定重复的字符串[BOI2009]Radio Transmission 无线…

【Linux】Linux中的环境变量及其意义

目录 一、环境变量的概念 1、让自己写的可执行程序无需路径即可执行的方法 1.1将可执行程序拷贝至/usr/bin/目录下 1.2将test的绝对路径添加至PATH中 二、环境变量相关的命令 三、getenv()&#xff08;获取环境变量&#xff09; 四、main函数命令行参数的解析及意义 1、…

如何基于TS在React中使用Redux Toolkit

什么是Redux Redux 是 JavaScript 应用程序的状态容器&#xff0c;提供可预测的状态管理.可以帮助你开发出行为稳定可预测的、运行于不同的环境&#xff08;客户端、服务器、原生应用&#xff09;、易于测试的应用程序。不仅于此&#xff0c;它还提供超爽的开发体验&#xff0…

【Pytorch with fastai】第 3 章 :数据伦理

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…