一、无人机简介

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

1 常见的航迹规划算法

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

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

二、蚁群算法简介

1 蚁群算法(ant colony algorithm,ACA)起源和发展历程
Marco Dorigo等人在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称为信息素的生物激素交流觅食信息从而能快速的找到目标,于是在1991年在其博士论文中首次系统地提出一种基于蚂蚁种群的新型智能优化算法“蚂蚁系统(Ant system,简称AS)”,后来,提出者及许多研究者对该算法作了各种改进,将其应用于更为广泛的领域,如图着色问题、二次分配问题、工件排序问题、车辆路径问题、车间作业调度问题、网络路由问题、大规模集成电路设计等。近些年来,M.Dorigo等人把蚂蚁算法进一步发展成一种通用的优化技术“蚁群优化(Ant Colony Optimization,简称ACO)”,并将所有符合ACO框架的算法称为“蚁群优化算法(ACO algorithm)”。


具体来说,各个蚂蚁在没有事先告知食物在什么地方的前提下开始寻找食物。当一只找到食物以后,它会向环境释放一种挥发性分泌物pheromone (称为信息素,该物质随着时间的推移会逐渐挥发消失,信息素浓度的大小表征路径的远近)信息素能够让其他蚂蚁感知从而起到一个引导的作用。通常多个路径上均有信息素时,蚂蚁会优先选择信息素浓度高的路径,从而使浓度高的路径信息素浓度更高,形成一个正反馈。有些蚂蚁并没有像其它蚂蚁一样总重复同样的路,他们会另辟蹊径,如果另开辟的道路比原来的其他道路更短,那么,渐渐地,更多的蚂蚁被吸引到这条较短的路上来。最后,经过一段时间运行,可能会出现一条最短的路径被大多数蚂蚁重复着。最终,信息素浓度最高的路径即是最终被蚂蚁选中的最优路径。
与其他算法相比,蚁群算法是一种比较年轻的算法,具有分布式计算、无中心控制、个体之间异步间接通信等特点,并且易于与其他优化算法相结合,经过不少仁人志士的不断探索,到今天已经发展出了各式各样的改进蚁群算法,不过蚁群算法的原理仍是主干。

2 蚁群算法的求解原理
基于上述对蚁群觅食行为的描述,该算法主要对觅食行为进行以下几个方面模拟:
(1)模拟的图场景中包含了两种信息素,一种表示家,一种表示食物的地点,并且这两种信息素都在以一定的速率进行挥发。
(2)每个蚂蚁只能感知它周围的小部分地方的信息。蚂蚁在寻找食物的时候,如果在感知范围内,就可以直接过去,如果不在感知范围内,就要朝着信息素多的地方走,蚂蚁可以有一个小概率不往信息素多的地方走,而另辟蹊径,这个小概率事件很重要,代表了一种找路的创新,对于找到更优的解很重要。
(3)蚂蚁回窝的规则与找食物的规则相同。
(4)蚂蚁在移动时候首先会根据信息素的指引,如果没有信息素的指引,会按照自己的移动方向惯性走下去,但也有一定的机率改变方向,蚂蚁还可以记住已经走过的路,避免重复走一个地方。
(5)蚂蚁在找到食物时留下的信息素最多,然后距离食物越远的地方留下的信息素越少。找到窝的信息素留下的量的规则跟食物相同。蚁群算法有以下几个特点:正反馈算法、并发性算法、较强的鲁棒性、概率型全局搜索、不依赖严格的数学性质、搜索时间长,易出现停止现象。
蚂蚁转移概率公式:

公式中:是蚂蚁k从城市i转移到j的概率;α,β分别为信息素和启发式因子的相对重要程度;为边(i,j)上的信息素量;为启发式因子;为蚂蚁k下步允许选择的城市。上述公式即为蚂蚁系统中的信息素更新公式,是边(i,j)上的信息素量;ρ是信息素蒸发系数,0<ρ<1;为第k只蚂蚁在本次迭代中留在边(i,j)上的信息素量;Q为一正常系数;为第k只蚂蚁在本次周游中的路径长度。
在蚂蚁系统中,信息素更新公式为:

3 蚁群算法的求解步骤:
(1)初始化参数在计算之初,需要对相关参数进行初始化,如蚁群规模(蚂蚁数量)m、信息素重要程度因子α、启发函数重要程度因子β、信息素会发银子ρ、信息素释放总量Q、最大迭代次数iter_max、迭代次数初值iter=1。
(2)构建解空间将各个蚂蚁随机地置于不同的出发点,对每个蚂蚁k(k=1,2,3…m),按照(2-1)计算其下一个待访问城市,直到所有蚂蚁访问完所有城市。
(3)更新信息苏计算每个蚂蚁经过路径长度Lk(k=1,2,…,m),记录当前迭代次数中的最优解(最短路径)。同时,根据式(2-2)和(2-3)对各个城市连接路径上信息素浓度进行更新。
(4) 判断是否终止若iter<iter_max,则令iter=iter+1,清空蚂蚁经过路径的记录表,并返回步骤2;否则,终止计算,输出最优解。
(5)判断是否终止若iter<iter_max,则令iter=iter+1,清空蚂蚁经过路径的记录表,并返回步骤2;否则,终止计算,输出最优解。3. 判断是否终止若iter<iter_max,则令iter=iter+1,清空蚂蚁经过路径的记录表,并返回步骤2;否则,终止计算,输出最优解。

三、部分源代码

%-------------------------------------蚁群算法主函数----------------------------------------------clc
clearload data z information %起点坐标
starty=10;
starth=3;%终点坐标
endy=8;
endh=5;n=10;
m=21;Best=[];[path,information]=searchpath(n,m,information,z,starty,starth,endy,endh);  %路径寻找
fitness=CacuFit(path);    %适应度计算
[bestfitness,bestindex]=min(fitness);           %最佳适应度
bestpath=path(bestindex,:);
Best=[Best;bestfitness];% %更新信息素
rou=0.2;
cfit=100/bestfitness;
k=2;
for i=2:m-1information(k,bestpath(i*2-1),bestpath(i*2))=(1-rou)*information(k,bestpath(i*2-1),bestpath(i*2))+rou*cfit;
endfor kk=1:1:100kk[path,information]=searchpath(n,m,information,z,starty,starth,endy,endh);  %路径寻找fitness=CacuFit(path);    %适应度计算[newbestfitness,newbestindex]=min(fitness);           %最佳适应度if newbestfitness<bestfitnessbestfitness=newbestfitness;bestpath=path(newbestindex,:);endBest=[Best;bestfitness];% %更新信息素rou=0.2;cfit=100/bestfitness;k=2;for i=2:m-1information(k,bestpath(i*2-1),bestpath(i*2))=(1-rou)*information(k,bestpath(i*2-1),bestpath(i*2))+rou*cfit;endendfor i=1:21a(i,1)=bestpath(i*2-1);a(i,2)=bestpath(i*2);
endk=1:21
figure(1)
x=1:21;
y=1:21;
[x1,y1]=meshgrid(x,y);%surf(x1,y1,z,'linestyle','none')
mesh(x1,y1,z)
load data z information
axis([1,21,1,21,0,2000])[x0,y0]=meshgrid(1:0.1:21);
z0=interp2(x,y,z,x0,y0);mesh(x0,y0,z0)
axis([1,21,1,21,0,2000])
xlabel('km')
ylabel('km')
%寻找路径
%n:路径条数 m分开平面数 information:信息素 z高度表
%starty starth 出发点
%endy endh 终点
%path 寻到路径function [path,information]=searchpath(n,m,information,z,starty,starth,endy,endh)ycMax=3;   %横向最大变动
hcMax=3;   %纵向最大变动decr=0.9; %衰减概率for ii=1:npath(ii,1:2)=[starty,starth];oldpoint=[starty,starth];   %当前坐标点for k=2:m-1%计算所有数据点对应的适应度值kk=1;for i=-ycMax:ycMaxfor j=-hcMax:hcMaxpoint(kk,:)=[oldpoint(1)+i,oldpoint(2)+j];if (point(kk,1)<20)&&(point(kk,1)>0)&&(point(kk,2)<17)&&(point(kk,2)>0)qfz(kk)=CacuQfz(point(kk,1),point(kk,2),oldpoint(1),oldpoint(2),endy,endh,k,z);qz(kk)=qfz(kk)*information(k,point(kk,1),point(kk,2));kk=kk+1;elseqz(kk)=0;kk=kk+1;endendend%选择下个点sumq=qz./sum(qz);pick=rand;while pick==0pick=rand;endfor i=1:49pick=pick-sumq(i);if pick<=0index=i;break;endendoldpoint=point(index,:);%更新信息素information(k+1,oldpoint(1),oldpoint(2))=0.5*information(k+1,oldpoint(1),oldpoint(2));%路径保存path(ii,k*2-1:k*2)=[oldpoint(1),oldpoint(2)];       endpath(ii,41:42)=[endy,endh];
end%计算个体适应度值
%path:路径
%fitness:路径适应度值
function fitness=CacuFit(path)[n,m]=size(path);for i=1:nfitness(i)=0;for j=2:m/2fitness(i)=fitness(i)+sqrt(1+(path(i,j*2-1)-path(i,(j-1)*2-1))^2+(path(i,j*2)-path(i,(j-1)*2))^2)+abs(path(i,j*2));end
end  %计算每个点的启发值
%nowy,nowh:现在点
%endy,endh:终点
%oldy,oldh:上个点
%k:当前层数
%z:地形高度图function qfz=CacuQfz(nowy,nowh,oldy,oldh,endy,endh,k,z)%点是否可行
if z(nowy,k)<nowh*200S=1;
elseS=0;
endldh*0.2-nowh*0.2)^2+(nowy-oldy)^2)+sqrt((21-k)^2+(endh*0.2-nowh*0.2)^2+(nowy-oldy)^2));qfz=S*M*D;%}
kk=1:0.1:21;
xx=interp1(x,k,kk);
yy= interp1(y,a(:,1)',kk);
zz=interp1(x,a(:,2)',kk);for i=1:length(xx)plot3(xx(1:i),yy(1:i),zz(1:i)*200,'--or')pause(0.1);
endhold off;figure(2)
plot(Best)
title('最佳个体适应度变化趋势')
xlabel('迭代次数')
ylabel('适应度值')

``四、运行结果


五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]巫茜,罗金彪,顾晓群,曾青.基于改进PSO的无人机三维航迹规划优化算法[J].兵器装备工程学报. 2021,42(08)
[4]邓叶,姜香菊.基于改进人工势场法的四旋翼无人机航迹规划算法[J].传感器与微系统. 2021,40(07)
[5]马云红,张恒,齐乐融,贺建良.基于改进A*算法的三维无人机路径规划[J].电光与控制. 2019,26(10)
[6]焦阳.基于改进蚁群算法的无人机三维路径规划研究[J].舰船电子工程. 2019,39(03)

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

  1. 【飞行器】基于matlab蚁群算法飞行器巡检路径【含Matlab源码 268期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[飞行器]基于matlab蚁群算法飞行器巡检路径[含Matlab源码 268期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

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

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

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

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

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

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

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

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

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

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

  7. 【Matlab水果识别】自助水果超市【含GUI源码 594期】

    一.代码运行视频(哔哩哔哩) [Matlab水果识别]自助水果超市[含GUI源码 594期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]倪云峰,叶健,樊娇娇 ...

  8. 【ACO三维路径规划】基于matlab GUI蚁群算法无人机三维路径规划【含Matlab源码 254期】

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

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

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

最新文章

  1. linux mint cinnamon_最佳 Linux 发行版汇总
  2. centos mysql 端口_Linux CentOS Mysql修改默认端口
  3. mongodb添加多条数据_Python 数据库骚操作 -- MongoDB
  4. 使用 typescript ,提升 vue 项目的开发体验(1)
  5. SQL Server 插入数据报IDENTITY_INSERT设置为off
  6. android标题栏添加按钮_几行代码实现Android通用标题栏(轻松向左右两侧添加Menu)...
  7. Linux 基本命令(四)--时间 常用命令
  8. 《扩展 jQuery》——2.3 总结
  9. Machine Learning - VI. Logistic Regression逻辑回归 (Week 3)
  10. 银行卡按卡号识别银行
  11. QCC303x调试笔记-修改自定义提示音
  12. 通过 ANE(Adobe Native Extension) 启动Andriod服务 推送消息(五)
  13. JavaScript 图表LightningChart完整指南
  14. word文档最上面有一条不是页眉的线
  15. click和touchmove vue_移动端touch事件影响click事件以及在touchmove添加preventDefault导致页面无法滚动的解决方法...
  16. 智能家居 打造一间乐享智能生活的“聪明屋”
  17. 网格平滑基础算法总结
  18. java之自定义注解的完整使用
  19. 实战项目(2)STM32cubeMX配置蓝牙模块
  20. linux系统登录新用户,Linux为新员工创建用户以及配置登录公钥

热门文章

  1. Vue.Draggable 心得
  2. Bootstrap 4 glyphicon 图标显示不出来(无fonts文件夹)
  3. Spring Boot 项目的jsp页面引用css、js、img、fonts的问题解决
  4. 解决百度网盘下载时提示本地文件写入失败的问题
  5. 上海交大计算机技术管云峰,上海交通大学无线通信研究所
  6. C#+AE加载shape图层
  7. 在世界上搜词采用计算机,计算机二级Word,Excel真题及答案
  8. 最全面梳理 JS 运行机制解析与浏览器页面渲染的核心流程
  9. 三星sgh-e258手机GRPS设置
  10. 听说电影院开业了?Python爬虫看看最近电影院都有哪些上映的电影