一、无人机简介

无人机的航迹规划是指在综合考虑无人机飞行油耗、威胁、飞行区域以及自身物理条件限制等因素的前提下, 为飞行器在飞行区域内规划出从初始点到目标点最优或者满意的飞行航迹, 其本质是一个多约束的目标优化问题。航迹规划算法是航迹规划的核心。国内外相继开展了相关研究, 提出了许多航迹规划算法, 如模拟退火算法、人工势场法、遗传算法、蚁群算法等。但由于无人机面临的规划空间异常复杂、规划约束条件多且模糊性大, 航迹搜索算法存在寻优能力差、计算量过大、效率不高等问题, 在航迹规划的最优性和实时性方面有待进一步提高。

粒子群优化算法 (particle swarm optimization, PSO)是Kennedy和Eberhart于1995年提出的一种群体智能仿生算法, 在解决一些典型的函数优化问题时, 能够取得比较好的优化结果。

1 无人机航迹规划模型
1.1 航迹表示方法

一般地, 无人机航迹规划的空间可以表示为某三维坐标系下所有点的集合{ (x, y, z) |xmin≤x≤xmax, ymin≤y≤ymax, zmin≤z≤zmax}, 其中x, y可以表示为该节点在飞行水平面下的坐标, 也可以表示为该点的经纬度, z为高程数据或海拔高度。航迹规划的目的是获得无人机在该空间中的飞行轨迹, 生成的航迹可表示为三维空间的一系列的点{PS, P1, P2, …, Pn-2, PG}, 相邻航迹点之间用直线段连接。

1.2 航迹代价函数
在航迹规划中, 常采用经过适当简化的航迹代价计算公式

式中, s表示航迹段数, Li表示第i段航迹长度, 该项代表距离代价。Hi表示第i段航迹的平均海拔高度, 该项代表高度代价。Ti为第i段航迹的威胁指数, 该项代表威胁代价。k1、k2、k3分别是距离代价、高度代价和威胁代价的权重值, 权重的选取与飞行任务要求相关。

2 基本粒子群算法
粒子群算法初始化为一群数量为N的随机粒子 (随机解) , 在D维空间中通过重复迭代、更新自身的位置以搜索适应度值最优解。粒子的位置代表被优化问题在搜索空间中的潜在解。在每次迭代中, 粒子通过跟踪2个“极值”来更新自己的速度和位置:一个是粒子自身目前所找到的最优解, 即个体极值;另一个是整个粒子群目前找到的最优解, 即全局极值。粒子i (i=1, 2, …, N) 在第j (j=1, 2, …, D) 维的速度vij和位置xij按如下格式更新:

式中, ω为非负数, 称为惯性权值 (惯性因子) , 描述了粒子对之前速度的“继承”, 即体现出粒子的“惯性”;c1和c2为非负常数, 称为学习因子 (加速因子) , 体现了粒子的社会性, 即粒子向全局最优粒子学习的特性;r1和r2为 (0, 1) 之间的随机数;pi= (pi1, pi2, …, pi D) 表示粒子i的个体极值所在位置;pg= (pg1, pg2, …, pg D) 表示所有粒子的全局极值所在位置。

速度更新公式的第一项, 反映粒子当前速度的影响, 每一个粒子按照惯性权值的比重沿着自身速度的方向搜索, 起到了平衡全局的作用, 同时避免算法陷入局部最优;第二项体现了个体最优值对粒子速度的影响, 即粒子本身的记忆和认识, 使得粒子具有全局搜索能力。第三项则反映群体对个体的影响, 即群体间的信息共享起到加速收敛的作用。

三、部分源代码

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);%% 循环
for iter = 1:Nfor i = 1:M  % 更新速度particles(i).v.x = w*particles(i).v.x ...+ c1*rand([1,pointNum]).*(particles(i).Best.pos.x-particles(i).pos.x) ...+ c2*rand([1,pointNum]).*(GlobalBest.pos.x-particles(i).pos.x);particles(i).v.y = w*particles(i).v.y ...+ c1*rand([1,pointNum]).*(particles(i).Best.pos.y-particles(i).pos.y) ...+ c2*rand([1,pointNum]).*(GlobalBest.pos.y-particles(i).pos.y);particles(i).v.z = w*particles(i).v.z ...+ c1*rand([1,pointNum]).*(particles(i).Best.pos.z-particles(i).pos.z) ...+ c2*rand([1,pointNum]).*(GlobalBest.pos.z-particles(i).pos.z);% 判断是否位于速度界限以内particles(i).v.x = min(particles(i).v.x, velBound(1,2));particles(i).v.x = max(particles(i).v.x, velBound(1,1));particles(i).v.y = min(particles(i).v.y, velBound(2,2));particles(i).v.y = max(particles(i).v.y, velBound(2,1));particles(i).v.z = min(particles(i).v.z, velBound(3,2));particles(i).v.z = max(particles(i).v.z, velBound(3,1));% 更新粒子位置% 否则,表明可以选择此路径particles(i).fitness = fitness;particles(i).path = path;end% 更新个体粒子最优if (particles(i).fitness(1) < particles(i).Best.fitness(1))&(particles(i).fitness(2) < particles(i).Best.fitness(2))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;endendend% 把每一代的最优粒子赋值给fitness_beat_itersfitness_beat_iters(iter,1) = GlobalBest.fitness(1);fitness_beat_iters(iter,2) = GlobalBest.fitness(2);% 在命令行窗口显示每一代的信息disp(['第' num2str(iter) '代:' '最优适应度1 = ' num2str(fitness_beat_iters(iter,1))  '最优适应度2 = ' num2str(fitness_beat_iters(iter,2))]);% 画图plotFigure(startPos,goalPos,X,Y,Z,GlobalBest);pause(0.001);
end%% 结果展示
% 理论最小适应度:直线距离
fitness_best = norm(startPos - goalPos);
disp([ '理论最优适应度 = ' num2str(fitness_best)]);% 画适应度迭代图
figure
plot(fitness_beat_iters(:,1),'LineWidth',2);
xlabel('迭代次数');
ylabel('最优适应度1');figure
plot(fitness_beat_iters(:,2),'LineWidth',2);
xlabel('迭代次数');
ylabel('最优适应度2');

四、运行结果


五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]巫茜,罗金彪,顾晓群,曾青.基于改进PSO的无人机三维航迹规划优化算法[J].兵器装备工程学报. 2021,42(08)
[4]方群,徐青.基于改进粒子群算法的无人机三维航迹规划[J].西北工业大学学报. 2017,35(01)

【三维路径规划】基于matlab粒子群算法无人机三维路径规划【含Matlab源码 192期】相关推荐

  1. 【PSO三维路径规划】基于matlab粒子群算法无人机三维路径规划【含Matlab源码 192期】

    ⛄一.无人机简介 无人机的航迹规划是指在综合考虑无人机飞行油耗.威胁.飞行区域以及自身物理条件限制等因素的前提下, 为飞行器在飞行区域内规划出从初始点到目标点最优或者满意的飞行航迹, 其本质是一个多约 ...

  2. 【ELM回归预测】基于matlab粒子群算法优化ELM回归预测【含Matlab源码 036期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [优化预测]基于matlab粒子群算法优化ELM神经网络预测[含Matlab源码 036期] 二.粒子群算法及ELM简介 1 粒子群算法简 ...

  3. 【PSO三维路径规划】基于matlab粒子群算法无人机三维路径规划【含Matlab源码 015期】

    一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水下 ...

  4. 【PSO三维路径规划】基于matlab粒子群算法无人机三维路径规划【含Matlab源码 1260期】

    一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水下 ...

  5. 【SVM回归预测】基于matlab粒子群算法优化SVM回归预测【含Matlab源码 1424期】

    ⛄一.粒子群算法简介 1 引言 自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣所在.生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模型,在他的仿真中,每一个个体都 ...

  6. 【ELM回归预测】基于matlab粒子群算法优化ELM回归预测【含Matlab源码 1722期】

    一.粒子群算法优化极限学习机ELM简介 PSO-ELM优化算法预测模型 ELM模型在训练之前可以随机产生ω和b, 只需要确定隐含层神经元个数及隐含层神经元激活函数, 即可实现ELM预测模型的构建.在E ...

  7. 【ELM回归预测】基于matlab粒子群算法优化ELM回归预测【含Matlab源码 1586期】

    一.粒子群算法简介 1 粒子群算法简介 1.1 引言 自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣所在.生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模型,在他 ...

  8. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  9. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  10. 【Matlab车牌识别】停车计费系统【含GUI源码 735期】

    一.代码运行视频(哔哩哔哩) [Matlab车牌识别]停车计费系统[含GUI源码 735期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLA ...

最新文章

  1. EF 查看生成的SQL语句
  2. STL之七:STL各种容器的使用时机详解
  3. [原创软件测试工作技能
  4. 硬盘安装以及磁盘分区和检测(笔记本R7000)
  5. mysql 修改自增字段起始值不生效_Mysql数据库基本介绍
  6. JavaScript学习系列3 -- JavaScript arguments对象学习
  7. 跟面试官侃半小时MySQL事务隔离性,从基本概念深入到实现
  8. [python 译] 基于面向对象的分析和设计
  9. Embedded Linux学习笔记—TQE9_i.MX6Q LTIB环境配置
  10. 20条经典触动心灵语录
  11. Oracle审计与数据库防火墙(AVDF)介绍
  12. Python题目辅导-题目及其题目
  13. 使用JS打印网页内容及图片
  14. 请开启微信或者手机定位服务器,微信在哪里设置定位(微信开启定位功能设置)...
  15. java-SpringBoot-oracle配置【自用】
  16. 377. 组合总和 Ⅳ(JavaScript,动规)
  17. A+B+C写作公式?顶会论文创新点干货!
  18. 软件测试学习进阶之路
  19. 爸爸是个计算机工程师,小学生高分作文《我的爸爸是名工程师》刷爆朋友圈!...
  20. ES6学习笔记(九)

热门文章

  1. Asp.net mvc 集成Autofac和FluentValidation
  2. .10-浅析webpack源码之graceful-fs模块
  3. 智能家居的新篇章-PHILIPS HUE
  4. 微软向学生征集Windows 8发行版建议
  5. 将PDF转为TXT文本格式提取中文
  6. Kinect开发教程八:OpenNI2显示深度、彩色及融合图像
  7. Improving Opencv11 Extract horizontal and vertical lines by using morphological operations
  8. 21个GIF动图让你了解各种数学概念
  9. Atitit.每周计划日程表 流程表 v9 r829.docx
  10. atitit uke产品线 attilax总结.docx 1. 知识聚合 知识检索 产品线 1 2. 爬虫产品线 1 3. 发帖机产品线 1 4. 发动机产品线 1 5. O2o产品线(旅游