👨‍🎓个人主页

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码、文章下载


💥1 概述

本文提出了一种名为球面矢量粒子群优化(SPSO)的新算法,用于解决无人机(UAV)在复杂环境中面临多重威胁时的路径规划问题。首先构建了一个代价函数,将路径规划转化为一个优化问题,该问题综合了无人机可行和安全运行的要求与约束。然后,利用SPSO通过粒子位置与无人机的速度、转弯角度以及爬升/俯冲角度之间的对应关系,高效地搜索无人机的配置空间,从而找到使代价函数最小化的最优路径。

为了评估SPSO的性能,从真实的数字高程模型地图中生成了八个基准测试场景。结果表明,所提出的SPSO不仅在大多数场景中优于其他粒子群优化(PSO)变体(包括经典PSO、相位角编码PSO和量子行为PSO),还优于其他先进的元启发式优化算法(包括遗传算法(GA)、人工蜂群算法(ABC)和差分进化(DE))。此外,还进行了实验以验证生成路径对实际无人机操作的有效性。

路径规划对于无人机(UAV)完成任务以及避免其操作环境中出现的威胁至关重要。规划的路径应在应用所定义的特定标准下达到最优。对于大多数应用,如航拍、测绘和表面检查,标准通常是尽量减少无人机访问地点之间的旅行距离,从而减少所需的时间和燃料。标准也可以是最大化动态目标搜索中的检测概率、最小化监视和救援中的飞行时间,或者寻找多目标导航的帕累托解。此外,规划的路径还需要满足操作环境所施加的安全约束以及无人机所施加的可行性约束。在这里,安全性与路径引导无人机避开环境中出现的威胁(如障碍物)的能力有关。可行性则涉及路径与无人机限制的对齐,这些限制与飞行时间、飞行高度、燃料消耗、转弯率和爬升角有关。因此,增强安全性的无人机路径规划(即无碰撞且可行的运动)仍然是一个具有挑战性的问题。

在文献中,已经提出了几种用于无人机路径规划的方法,如图搜索、单元分解、势场和受自然启发的算法。图搜索方法将环境划分为相互连接的离散区域,每个区域形成一个图的顶点,路径正在被搜索。在中,使用了Voronoi图来生成一个图,然后将其作为输入传递给Eppstein的_k_-最佳路径算法以找到最佳路径。另一种基于图的算法是概率路线图(PRM),它通过对无人机的配置空间进行采样来生成图的顶点。类似于PRM,快速探索随机树(RRT)算法使用配置空间来创建搜索图。然而,它通过递归添加具有最小启发式成本的边来找到路径。尽管基于图的算法在生成可行的飞行路径方面是有效的,但它们不适合包含与无人机机动相关的约束,因此可能导致规划路径与飞行路径之间存在较大误差。

另一方面,单元分解方法将空间表示为等大小单元的网格,并采用启发式搜索来寻找飞行路径。A*是一种流行的算法,它使用从当前位置到其邻居和目标位置的最小成本来搜索单元空间。该算法在中进行了扩展,以包含无人机约束,如转弯角度。然后,它被修改为双向算法,以处理间歇性测量。单元分解还被用于中的无人机和地面车辆之间的路径协调、中的飞行监视以及中的实时无人机操作中的路径预测。然而,单元分解方法的主要缺点是,随着搜索空间维度的增加,单元数量呈指数增长,导致其可扩展性有限。

势场是另一种方法,它通过将无人机视为在由目标和任何障碍物相关组件构成的人工势场影响下运动的粒子,直接在连续空间中搜索解决方案。这种方法已经增加了一个额外的控制力,以提供更短且更平滑的路径。它还与哈密顿函数结合,以实现避障,或者与后退地平线优化结合,为多架无人机获取路径,同时不违反避碰和网络连通性约束。然而,势场方法并不考虑解决方案的最优性。它在处理势场中出现的局部最小值时也存在局限性。

近年来,由于受自然启发的方法在处理无人机动态约束方面的有效性以及在复杂场景中寻找全局最优解的能力,它在路径规划中变得越来越流行。已经为无人机路径规划开发了多种受自然启发的算法,如布谷鸟搜索、遗传算法(GE)、差分进化(DE)、人工蜂群算法(ABC)、蚁群优化(ACO)和粒子群优化(PSO)。其中,PSO因其多种变体而被广泛使用。

受鸟类群体行为和鱼群行为的启发,PSO是一种基于群体的算法,它具有群体智能的两个重要属性:认知和社会一致性。这些属性使得群体中的每个粒子能够通过遵循自身经验和群体经验来寻找解决方案,而不是使用传统的进化算子,如变异和交叉。因此,与其他受自然启发的算法相比,PSO能够在较短的计算时间内以稳定的收敛性找到全局解。它还被认为对初始条件和目标函数的变化不太敏感,并且能够通过少量参数(包括一个加速系数和两个权重因子)适应各种环境结构。由于其群体特性,PSO可以并行化,运行在多个处理器、图形处理单元(GPU)或计算机集群上,以满足离线和在线路径规划所需的计算时间。鉴于这些优势,PSO已被广泛用于移动机器人导航的路径规划,并引入了不同的方法,如基于进化算子的PSO、自适应无骨架PSO或多目标PSO。在无人机路径规划中,已经提出了几种变体,如经典PSO、相位角编码PSO(θ-PSO)、量子行为PSO(QPSO)和离散PSO(DPSO)。这些变体具有相同的基于群体的结构,但在它们表示搜索空间和粒子编码的解决方案的方式上有所不同。因此,在相同的操作环境、动态约束和目标函数条件下,可能会产生不同的解决方案。因此,比较这些变体在不同场景中的表现,以明确哪种最适合无人机路径规划是很重要的。此外,还需要将无人机的机动特性纳入算法中,以进一步提高其导航能力。

在这项研究中,我们通过首先制定一个目标函数来解决无人机的路径规划问题,该函数结合了与无人机及其飞行路径相关的各种要求和约束。然后,我们引入了一种新的PSO算法,能够利用无人机的配置空间生成高质量的解决方案。为了评估,基于真实数字高程模型(DEM)地图生成了八个复杂程度不断增加的场景。然后在这些场景中对SPSO与其他PSO和元启发式算法进行比较,以评估它们的性能。此外,还进行了实验,以验证SPSO生成的路径在实际无人机操作中的可行性。因此,我们在本研究中的贡献是四方面的:(i)开发了一个新的目标函数,将路径规划转化为一个优化问题,结合了与路径长度、威胁、转弯角度、爬升/俯冲角度和飞行高度相关的最优标准和约束,以实现无人机的安全和高效运行;(ii)提出了一种名为球面矢量PSO(SPSO)的新PSO算法,能够搜索配置空间以找到全局最优解;(iii)对PSO变体(包括PSO、θ-PSO、QPSO和SPSO)在无人机路径规划中的性能进行了基准测试;(iv)验证了SPSO生成的路径在实际无人机操作中的有效性。

本文的其余部分结构如下:第2节介绍目标函数的制定步骤;第3节描述PSO及其变体;第4节介绍SPSO及其在解决路径规划问题中的应用;第5节提供比较和实验结果;最后,总结全文。

  1. 结论
    我们提出了一种新的算法——球面矢量粒子群优化(SPSO),用于解决无人机(UAV)路径规划问题,重点关注生成路径的安全性和可行性。代价函数的设计同时融入了与最优性、安全性和可行性相关的约束。SPSO是基于无人机内在运动组件与搜索空间之间的对应关系开发的。在基于数字高程模型(DEM)地图生成的八个基准测试场景中,SPSO在大多数场景中均实现了质量最高的路径。粒子群优化(PSO)和相位角编码粒子群优化(θ-PSO)表现出稳定的收敛性,而量子行为粒子群优化(QPSO)仅在简单场景中表现良好。与遗传算法(GA)、人工蜂群算法(ABC)和差分进化(DE)等其他元启发式算法的比较也证实了SPSO的优越性能。真实无人机的实验验证了生成路径在实际操作中的有效性。此外,SPSO的粒子与无人机运动之间的对应关系允许在必要时融入无人机的动力学约束,以进一步提升路径规划性能。

我们未来的工作将专注于将基于无人机动力学模型的精确约束纳入SPSO的配置空间。我们还将通过在不同基准测试函数上评估其性能,探索SPSO在其他优化问题中的适用性。

详细文章见第4部分。

📚2 运行结果

 

 

部分代码:

clc;
clear;
close all;

%% Problem Definition

model = CreateModel(); % Create search map and parameters

CostFunction=@(x) MyCost(x,model);    % Cost Function

nVar=model.n;       % Number of Decision Variables = searching dimension of PSO = number of path nodes

VarSize=[1 nVar];   % Size of Decision Variables Matrix

% Lower and upper Bounds of particles (Variables)
VarMin.x=model.xmin;           
VarMax.x=model.xmax;           
VarMin.y=model.ymin;           
VarMax.y=model.ymax;           
VarMin.z=model.zmin;           
VarMax.z=model.zmax;                 

VarMax.r=2*norm(model.start-model.end)/nVar;           
VarMin.r=0;

% Inclination (elevation)
AngleRange = pi/4; % Limit the angle range for better solutions
VarMin.psi=-AngleRange;            
VarMax.psi=AngleRange;          


% Azimuth 
% Determine the angle of vector connecting the start and end points
dirVector = model.end - model.start;
phi0 = atan2(dirVector(2),dirVector(1));
VarMin.phi=phi0 - AngleRange;           
VarMax.phi=phi0 + AngleRange;           


% Lower and upper Bounds of velocity
alpha=0.5;
VelMax.r=alpha*(VarMax.r-VarMin.r);    
VelMin.r=-VelMax.r;                    
VelMax.psi=alpha*(VarMax.psi-VarMin.psi);    
VelMin.psi=-VelMax.psi;                    
VelMax.phi=alpha*(VarMax.phi-VarMin.phi);    
VelMin.phi=-VelMax.phi;                    

%% PSO Parameters

MaxIt=200;          % Maximum Number of Iterations

nPop=500;           % Population Size (Swarm Size)

w=1;                % Inertia Weight
wdamp=0.98;         % Inertia Weight Damping Ratio
c1=1.5;             % Personal Learning Coefficient
c2=1.5;             % Global Learning Coefficient

%% Initialization

% Create Empty Particle Structure
empty_particle.Position=[];
empty_particle.Velocity=[];
empty_particle.Cost=[];
empty_particle.Best.Position=[];
empty_particle.Best.Cost=[];

% Initialize Global Best
GlobalBest.Cost=inf; % Minimization problem

% Create an empty Particles Matrix, each particle is a solution (searching path)
particle=repmat(empty_particle,nPop,1);

% Initialization Loop
isInit = false;
while (~isInit)
        disp("Initialising...");
   for i=1:nPop

        % Initialize Position
        particle(i).Position=CreateRandomSolution(VarSize,VarMin,VarMax);

        % Initialize Velocity
        particle(i).Velocity.r=zeros(VarSize);
        particle(i).Velocity.psi=zeros(VarSize);
        particle(i).Velocity.phi=zeros(VarSize);

        % Evaluation
        particle(i).Cost= CostFunction(SphericalToCart(particle(i).Position,model));

        % Update Personal Best
        particle(i).Best.Position=particle(i).Position;
        particle(i).Best.Cost=particle(i).Cost;

        % Update Global Best
        if particle(i).Best.Cost < GlobalBest.Cost
            GlobalBest=particle(i).Best;
            isInit = true;
        end
    end
end

% Array to Hold Best Cost Values at Each Iteration
BestCost=zeros(MaxIt,1);

%% PSO Main Loop

for it=1:MaxIt

    % Update Best Cost Ever Found
    BestCost(it)=GlobalBest.Cost;

    for i=1:nPop          
        % r Part
        % Update Velocity
        particle(i).Velocity.r = w*particle(i).Velocity.r ...
            + c1*rand(VarSize).*(particle(i).Best.Position.r-particle(i).Position.r) ...
            + c2*rand(VarSize).*(GlobalBest.Position.r-particle(i).Position.r);

        % Update Velocity Bounds
        particle(i).Velocity.r = max(particle(i).Velocity.r,VelMin.r);
        particle(i).Velocity.r = min(particle(i).Velocity.r,VelMax.r);

        % Update Position
        particle(i).Position.r = particle(i).Position.r + particle(i).Velocity.r;

        % Velocity Mirroring
        % If a particle moves out of the range, it will moves backward next
        % time
        OutOfTheRange=(particle(i).Position.r<VarMin.r | particle(i).Position.r>VarMax.r);
        particle(i).Velocity.r(OutOfTheRange)=-particle(i).Velocity.r(OutOfTheRange);

        % Update Position Bounds
        particle(i).Position.r = max(particle(i).Position.r,VarMin.r);
        particle(i).Position.r = min(particle(i).Position.r,VarMax.r);


        % psi Part

        % Update Velocity
        particle(i).Velocity.psi = w*particle(i).Velocity.psi ...
            + c1*rand(VarSize).*(particle(i).Best.Position.psi-particle(i).Position.psi) ...
            + c2*rand(VarSize).*(GlobalBest.Position.psi-particle(i).Position.psi);

        % Update Velocity Bounds
        particle(i).Velocity.psi = max(particle(i).Velocity.psi,VelMin.psi);
        particle(i).Velocity.psi = min(particle(i).Velocity.psi,VelMax.psi);

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]高田田,张莉,李炳德,et al.基于改进粒子群算法的足球机器人路径规划[J].Journal of Xi'an Polytechnic University, 2016, 30(5).

[2]程雨奇,于大泳,黎铭威.基于灰狼算法的球形机器人构件参数优化[J].建模与仿真, 2024, 13(5):10.DOI:10.12677/mos.2024.135492.

🌈4 Matlab代码、文章下载

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐