⛄一、无人机简介

0 引言
随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化、完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水下救援的白鲨MIX水下无人机等,决定飞行器性能主要是内部的飞控系统和外部的路径规划问题。就路径问题而言,在具体实施任务时仅靠操作员手中的遥控器控制无人飞行器执行相应的工作,可能会对操作员心理以及技术提出极高的要求,为了避免个人操作失误,进而造成飞行器损坏的危险,一种解决问题的方法就是对飞行器进行航迹规划。
飞行器的测量精度,航迹路径的合理规划,飞行器工作时的稳定性、安全性等这些变化对飞行器的综合控制系统要求越来越高。无人机航路规划是为了保证无人机完成特定的飞行任务,并且能够在完成任务的过程中躲避各种障碍、威胁区域而设计出最优航迹路线的问题。

1 常见的航迹规划算法

图1 常见路径规划算法
文中主要对无人机巡航阶段的航迹规划进行研究,假设无人机在飞行中维持高度与速度不变,那么航迹规划成为一个二维平面的规划问题。在航迹规划算法中,A算法计算简单,容易实现。在改进A算法基础上,提出一种新的、易于理解的改进A算法的无人机航迹规划方法。传统A算法将规划区域栅格化,节点扩展只限于栅格线的交叉点,在栅格线的交叉点与交叉点之间往往存在一定角度的两个运动方向。将存在角度的两段路径无限放大、细化,然后分别用两段上的相应路径规划点作为切点,找到相对应的组成内切圆的圆心,然后作弧,并求出相对应的两切点之间的弧所对应的圆心角,根据下式计算出弧线的长度

式中:R———内切圆的半径;
α———切点之间弧线对应的圆心角。

⛄二、差分进化算法简介

1 差分进化算法的介绍
差分进化算法(Differential Evolution, DE)是一种基于群体差异的启发式随机搜索算法,该算法是由R.Storn和K.Price为求解Chebyshev多项式而提出的。DE算法也属于智能优化算法,与前面的启发式算法,如ABC,PSO等类似,都属于启发式的优化算法。DE算法是我在一篇求解盒子覆盖问题论文中使用的一种优化算法。

2 差分进化算法的流程
(1)初始化种群
(2)变异
(3)交叉
(4)选择

3 差分进化的具体步骤
对于无约束优化问题


4、选择
在DE中采用的是贪婪选择的策略,即选择较优的个体作为新的个体。

⛄三、部分源代码

%清空环境
clear;

%定义地形对象
cTerrain = CTerrain3D;
%定义威胁区对象
cTread = CTread;

%调整为统一的图形环境
figure(‘Renderer’,‘opengl’);

%绘制地形和威胁区
cTerrain.draw();
cTread.draw();

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%数据形式说明
%xs 初始点位置集合,三维点集
%yt 目标点位置集合,三维点集
%MxsEna 能力矩阵,集合中的二元组表示最大最小飞行速度
%MxsDIs 最大航程矩阵,集合中的值表示UAV最大可飞的距离
%MytTOrd 任务点间的时序坐标,要求尽量在前面的先执行

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%调用目标分配算法
%AssignType表示不同的模型,1, N=M; 2, N>M; 3, N<M
%Key表示算法执行次数, 0,执行一次,1,执行多次
AssignType =1;
Key = 0;

%时间测试
Time = cputime;

%% 第一种情况的实验
if AssignType == 1
%%%%%%%%%%%%%%%%%%%%%%%数据区%%%%%%%%%%%%
xs = [%11 2 3;2 17 5; 34 26 7;5 2 2;6 33 3;27 34 6;21 45 5;25 12 3;22 17 11;13 31 12;
%45 21 11; 36 22 11;13 21 16;41 25 10;25 25 11;53 12 14;22 12 12;18 32 11; 67 34 12;26 16 15;
78 20 15;93 31 12;31 20 13;112 32 15; 134 26 17;45 52 12;36 63 13;67 34 16;21 85 15;32 62 13;];
yt = [%40 210 12;170 90 13 ; 80 197 21 ;172 120 13;160 56 13;160 143 21;170 200 21;113 200 12;97 134 16;100 145 11;
%81 101 21; 72 152 12; 133 60 11;84 164 21; 150 90 21;146 121 12; 167 54 12; 108 165 12;99 120 21;110 143 11;
70 181 12;15 133 13 ; 19 151 12 ;160 192 13;101 120 23;160 113 12;82 101 11;173 140 12;182 65 14; 128 156 12;];

MxsEna=[%0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;% 0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.3 0.5;0.3 0.6;];MxsDis=[%400 700 650 500 700 900 450 610 400 700%650 500 700 900 450 610 700 900 450 610500 700 300 350 700 900 450 610 450 610];ytW = [%1 3 4 2 1 1 3 2 1 2%3 2 1 3 2 1 2 3 2 11 1 1 1 1 1 1 1 1 1];MytTOrd=[3 4; 5 2; 6 8; 7 4;];%引入新的协同矩阵,最大起始时间矩阵
Twait = [];
Twindow=[];%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if Key == 0%%%%%%%%%%%%%%%%%%%%%%算法执行区%%%%%%%%%%%%%%%%%%%调用目标分配算法,并取得解和相关数据,计算算法耗费时间%定义目标分配算法对象DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,1);% MC = Cal1.GetMcost();%Cal1 = CallocationTargetOld1(cTerrain);%标签显示文字xlabel('X/km')ylabel('Y/km')zlabel('Z/km')%DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);%执行run并返回结果集t1 = cputime;[solU solT solC solF ] = DDE1.run();Time = cputime -t1;%         %结果solUsolTsolCsolFTimeelse if Key == 1for i=1:10DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,i);% MC = Cal1.GetMcost();%Cal1 = CallocationTargetOld1(cTerrain);%标签显示文字xlabel('X/km')ylabel('Y/km')zlabel('Z/km')%DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);%执行run并返回结果集t1 = cputime;[solU solT solC solF ] = DDE1.run();solu(i,:) = solU;solt(i,:) = solT;solc(i,:) = solC;solf(i,:) = solF;Time(i,:) = cputime -t1;end %i%         %结果solusoltsolcsolfTimeend % key=1
end % key=0

else if AssignType == 2
%% 第二种实验的情况
%%%%%%%%%%%%%%%%%%%%%%%数据区%%%%%%%%%%%%
xs = [%11 2 3;2 17 5; 34 26 7;5 2 2;6 33 3;27 34 6;21 45 5;25 12 3;22 17 11;13 31 12;
%45 21 11; 36 22 11;13 21 16;41 25 10;25 25 11;53 12 14;22 12 12;18 32 11; 67 34 12;26 16 15;
78 20 15;93 31 12;31 20 13;112 32 15; 134 26 17;45 52 12;36 63 13;67 34 16;21 85 15;32 62 13;];
yt = [%40 210 12;170 90 13 ; 80 197 21 ;172 120 13;160 56 13;160 143 21;170 200 21;113 200 12;97 134 16;100 145 11;
%81 101 21; 72 152 12; 133 60 11;84 164 21; 150 90 21;146 121 12; 167 54 12; 108 165 12;99 120 21;110 143 11;
70 181 12;15 133 13 ; 19 151 12 ;160 192 13 ];

    MxsEna=[%0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;% 0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.3 0.5;0.3 0.6;];MxsDis=[%400 700 650 500 700 900 450 610 400 700%650 500 700 900 450 610 700 900 450 610500 700 300 350 700 900 450 610 450 610];ytW = [%1 3 4 2 1 1 3 2 1 2%3 2 1 3 2 1 2 3 2 11 1 1 1];%这个数据里都代表的是目标点,是目标点与目标点的关系MytTOrd=[3 2];%引入新的协同矩阵,最大起始时间矩阵Twait = [30 40 20 15 50 70 30 80 90 65];Twindow=[];%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if Key == 0else if Key == 1for i=1:20DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,i);% MC = Cal1.GetMcost();%Cal1 = CallocationTargetOld1(cTerrain);%标签显示文字xlabel('X/km')ylabel('Y/km')zlabel('Z/km')%DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);%执行run并返回结果集t1 = cputime;[solU solT solC solF ] = DDE1.run();solu(i,:) = solU;solt(i,:) = solT;solc(i,:) = solC;solf(i,:) = solF;Time(i,:) = cputime -t1;end %i%         %结果solusoltsolcsolfTimeend % key=1end % key=0else if AssignType == 3%% 第三种实验的情况%%%%%%%%%%%%%%%%%%%%%%%数据区%%%%%%%%%%%%xs = [%11 2 3;2 17 5; 34 26 7;5 2 2;6 33 3;27 34 6;21 45 5;25 12 3;22 17 11;13 31 12;%45 21 11; 36 22 11;13 21 16;41 25 10;25 25 11;53 12 14;22 12 12;18 32 11; 67 34 12;26 16 15;78 20 15;93 31 12;31 20 13;112 32 15];yt = [%40 210 12;170 90 13 ; 80 197 21 ;172 120 13;160 56 13;160 143 21;170 200 21;113 200 12;97 134 16;100 145 11;%81 101 21; 72 152 12; 133 60 11;84 164 21; 150 90 21;146 121 12; 167 54 12; 108 165 12;99 120 21;110 143 11;70 131 12;15 133 13 ; 19 151 12 ;160 192 13;101 120 23;160 113 12;82 101 11;173 140 12;182 65 14; 45 176 12;];MxsEna=[%0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;% 0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.5; 0.3 0.4;0.4 0.75;0.3 0.45];MxsDis=[%400 700 650 500 700 900 450 610 400 700%650 500 700 900 450 610 700 900 450 610700 700 900 650];ytW = [%1 3 4 2 1 1 3 2 1 2%3 2 1 3 2 1 2 3 2 11 1 1 1 1 1 1 1 1 1];MytTOrd=[3 4; 5 2];%引入新的协同矩阵,最大起始时间矩阵Twait = [30 40 20 15];Twindow=[1300,6000];%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if Key == 0%%%%%%%%%%%%%%%%%%%%%%算法执行区%%%%%%%%%%%%%%%%%%%调用目标分配算法,并取得解和相关数据,计算算法耗费时间%定义目标分配算法对象DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,1);% MC = Cal1.GetMcost();%Cal1 = CallocationTargetOld1(cTerrain);%标签显示文字xlabel('X/km')ylabel('Y/km')zlabel('Z/km')%DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);%执行run并返回结果集t1 = cputime;[solU solT solC solF]  = DDE1.run();Time = cputime -t1;%         %结果solUsolTsolCsolFTimeelse if Key == 1for i=1:20DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,i);% MC = Cal1.GetMcost();%Cal1 = CallocationTargetOld1(cTerrain);%标签显示文字xlabel('X/km')ylabel('Y/km')zlabel('Z/km')t1 = cputime;[solU solT solC solF ] = DDE1.run();solu(i,:) = solU;solt(i,:) = solT;solc(i,:) = solC;solf(i,:) = solF;Time(i,:) = cputime -t1;end %i%         %结果solusoltsolcsolfTimeend % key=1end % key=0end % type =3end % type =2

end % type=1

⛄四、运行结果


⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]丁柏圆,郑凯元,刘承禹,李云鹏,孙健,孙卫民,游世勋.基于改进差分进化的多无人机协同航迹欺骗算法研究[J].航天电子对抗. 2021,37(05)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

【DE三维路径规划】基于matlab改进的差分算法多无人机协同三维路径规划【含Matlab源码 169期】相关推荐

  1. 【Matlab指纹识别】指纹识别匹配门禁系统【含GUI源码 587期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别匹配门禁系统[含GUI源码 587期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  2. 【协同任务】二阶一致性算法多无人机协同编队动态仿真【含Matlab源码 1740期】

    ⛄一.无人机编队控制简介 无人机编队控制是无人机协同控制领域一项重大基础研究课题, 引起了国内外诸多研究人员的兴趣.无人机编队控制方法主要包括领航跟随法.虚拟结构法.基于行为法和图论法.在无人机编队形 ...

  3. 【优化分配】基于matlab模拟退火策略优化免疫算法求解无人机协同优化分配问题【含Matlab源码 1978期】

    ⛄一.模拟退火策略优化免疫算法简介 指导性搜索方法具有较强的通用性,无须利用问题的特殊信息,这也造成了对问题已知信息的浪费.尽管启发式算法对问题的依赖性强,但对特殊问题却能利用问题信息较快地构造解,其 ...

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

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

  5. 【BA三维路径规划】基于matlab改进的蝙蝠算法农用无人机三维路径规划【含Matlab源码 1514期】

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

  6. 【Matlab路径规划】改进的遗传算法机器人避障路径规划【含GUI源码 703期】

    一.代码运行视频(哔哩哔哩) [Matlab路径规划]改进的遗传算法机器人避障路径规划[含GUI源码 703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  7. 【优化算法】基于matlab量子粒子群算法求解单目标优化问题【含Matlab源码 2203期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]基于matlab量子粒子群算法求解单目标优化问题[含Matlab源码 2203期] 点击上面蓝色字体,直接付费下载,即可. 获 ...

  8. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  9. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

最新文章

  1. MySQL数据库test连接语句_【MySQL数据库开发之二】MySQL 基础语句的书写与操作!...
  2. 新手探索NLP(四)
  3. 6款实用开源报表工具 | 码云周刊第 83 期
  4. checkbox全选衍生问题讨论
  5. 桌面图标有阴影怎么去掉
  6. 静态分配和动态分配内存的区别
  7. 【递归】桐桐的递归函数
  8. 前端学习(2779):项目功能介绍
  9. Block 在不同情况下的变量存储区域
  10. 洛谷3871 [TJOI2010]中位数 维护队列的中位数
  11. Android ConnectivityManager详解
  12. jboss7学习2-jboss7入门(端口和访问的ip问题)
  13. arcgis制作空间变化图怎么做_Arcgis专题地图的编制
  14. # 研究杂感 × VOSviewer(第六辑)
  15. VLAN-TAG 知识相关
  16. 【YOLOV5-5.x 源码解读】datasets.py
  17. #模块:如何查模块的户口,看里面都由什么组成
  18. Go--Redis快速入门指南
  19. 宝塔linux面板和centOS的区别,关于 Linux Centos7 宝塔面板的问题
  20. 数据分析可视化之模型介绍

热门文章

  1. 球场外也有比赛,央视影音逆袭世界杯,极速高清全靠腾讯云
  2. svm对未知数据的分类_SVM对sklearn自带手写数字数据集进行分类
  3. XML语法以及DTD的详解
  4. cloudcompare软件使用总结
  5. 做好flash手绘基本功,简单的手绘人物头像和眨眼动画
  6. 免费下载:超棒的用户界面PSD设计
  7. 本地系统服务例程:Nt和Zw系列函数
  8. freeline使用指南
  9. 微信小程序封装wx.request接口(两种方式)
  10. ViT Patch Embedding理解