您现在的位置是:首页 >技术教程 >【三维路径规划】基于matlab狼群算法无人机三维路径规划【含Matlab源码 2643期】网站首页技术教程

【三维路径规划】基于matlab狼群算法无人机三维路径规划【含Matlab源码 2643期】

海神之光 2024-08-23 00:01:02
简介【三维路径规划】基于matlab狼群算法无人机三维路径规划【含Matlab源码 2643期】

⛄一、无人机简介

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

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

⛄二、狼群算法简介

1、狼群算法中的狼种类分为以下几种:
头狼、探狼、猛狼。

2、猎物分配规则:论功行赏,先强后弱。

3、狼群算法的主体构成:探狼游走、头狼召唤、猛狼围攻3种智能行为,“胜者为王”的头狼角逐规则和“优胜劣汰”的狼群更新规则。

Step1:在解空间中随机初始化狼群的空间坐标,依据目标函数值的大小角逐出人工头狼。
Step2:探狼开始随机游走搜索猎物,若发现某个位置的目标函数值大于头狼的目标函数值,将更新头狼位置,同时头狼发出召唤行为;若未发现,探狼继续游走直到达到最大游走次数,头狼在原本的位置发出召唤行为。
Step3:听到头狼召唤的猛狼以较大的步长快速向头狼奔袭,若奔袭途中猛狼的目标函数值大于头狼的目标函数值,则将对头狼位置进行更新;否则,猛狼将继续奔袭直到进入围攻范围。
Step4:靠近头狼的猛狼将联合探狼对猎物(把头狼位置视为猎物)进行围捕,围捕过程中若其他人工狼的目标函数值大于头狼的目标函数值,则对头狼位置进行更新,直到捕获猎物。
Step5:淘汰狼群中目标函数值较小的人工狼,并在解空间中随机生成新的人工狼,实现狼群的更新。
Step6:最后判断头狼的目标函数值是否达到精度要求或算法是否达到最大迭代次数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄三、部分源代码

clc
clear
close all

%% 三维路径规划模型定义
startPos = [1, 1, 1];
goalPos = [100, 100, 10];

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

%% 初始参数设置
iterMax = 100; % 迭代次数
pointNum = 3; % 每一个粒子包含三个位置点
N = 100; % 狼群总数
alpha = 0.5; % 探狼比例因子
S_num = N * alpha; % 探狼数量
M_num = N - S_num ; % 猛狼数量
S = 20; % 步长因子
step_a = mapRange / S; % 游走步长
step_b = 2*step_a; % 奔袭步长
step_c = step_a/2; % 围捕步长
h = 20; % 游走方向数
d0 = 10; % 由奔袭转围攻的临界距离
T_max = 10; % 围攻最大次数
posBound = [[0,0,0]‘,mapRange’]; % 位置界限

%% 种群初始化
% 初始化一个空的粒子结构体
wolf = struct;
wolf.pos= [];
wolf.fitness = [];
wolf.path = [];
wolfs = repmat(wolf,N,1);
wolfs_s = repmat(wolf,S_num,1);
wolfs_m = repmat(wolf,M_num,1);

% 初始化每一代的最优粒子
wolf_header.fitness = inf;

% 狼群随机分布位置
for i = 1:N
% 粒子按照正态分布随机生成
wolfs(i).pos.x = unifrnd(posBound(1,1),posBound(1,2),1,pointNum);
wolfs(i).pos.y = unifrnd(posBound(2,1),posBound(2,2),1,pointNum);
wolfs(i).pos.z = unifrnd(posBound(3,1),posBound(3,2),1,pointNum);

% 适应度
[flag,fitness,path] = calFitness(startPos, goalPos,X,Y,Z, wolfs(i).pos);

% 碰撞检测判断
if flag == 1
    % 若flag=1,表明此路径将与障碍物相交,则增大适应度值
    wolfs(i).fitness = 1000*fitness;
    wolfs(i).path = path;
else
    % 否则,表明可以选择此路径
    wolfs(i).fitness = fitness;
    wolfs(i).path = path;
end

% 更新全局最优
if wolfs(i).fitness < wolf_header.fitness
    wolf_header = wolfs(i);
    idx = i;
end

end

⛄四、运行结果

在这里插入图片描述
在这里插入图片描述

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]]焦阳.基于改进蚁群算法的无人机三维路径规划研究[J].舰船电子工程. 2019,39(03)

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

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。