【无人机】基于多 Dubins 路径段协同路径规划及粒子群优化的无人机在复杂威胁环境中的路径规划策略(Matlab实现)

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

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

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

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

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

 在现代无人机应用场景中,尤其是在复杂威胁环境下执行任务时,精确且高效的路径规划成为关键挑战。本研究聚焦于无人机集群的路径规划,提出一种创新策略。首先,采用多 Dubins 路径段构建无人机的基础飞行路径框架,Dubins 路径的特性使其在处理具有曲率约束的路径规划问题上具备天然优势,能够较好地模拟无人机实际飞行中的转向限制,确保路径的可行性与平滑性。 针对复杂威胁环境中的光程调整需求以及无人机集群间的碰撞避免要求,引入粒子群优化算法。粒子群优化算法通过模拟鸟群觅食行为,在搜索空间中不断迭代更新粒子的位置与速度,以寻找最优解。在本路径规划情境下,将无人机的路径参数(如路径段连接点、飞行速度等)编码为粒子的位置信息,以路径的安全性(避开威胁)、光程合理性以及碰撞风险最小化为目标函数,利用粒子群优化算法进行求解。 通过多 Dubins 路径段与粒子群优化的有机结合,无人机集群能够在复杂威胁环境中智能地规划出满足穿透任务要求的路径,同时有效避免相互之间的碰撞并合理调整光程,从而提升整个无人机集群执行任务的成功率与安全性,为无人机在复杂环境下的集群作业提供强有力的技术支撑与理论依据,推动相关领域的进一步发展与应用拓展。

1,多 Dubins 路径段原理: Dubins 路径主要基于车辆或飞行器在具有最小转弯半径约束下从起始点到目标点的最优路径规划理论。在二维平面中,无人机的运动可看作是具有一定曲率限制的曲线运动。多 Dubins 路径段规划是将无人机从起始位置到目标位置的整个路径分解为多个连续的 Dubins 路径子段。对于每个子段,根据起始点、目标点以及中间的路径点(例如为了避开威胁区域而设置的必经点)的几何关系,结合无人机的最小转弯半径,确定子段的圆弧段和直线段组合。这些子段依次连接,形成一条从起始到目标且满足无人机机动性能限制的连续路径。例如,在存在多个威胁区域的环境中,通过巧妙地设置中间路径点,使得无人机能够沿着 Dubins 路径段绕过威胁区域,实现穿透复杂威胁环境的初步路径规划。

2粒子群优化原理: 粒子群优化算法基于群体智能思想。在无人机路径规划应用中,首先初始化一群粒子,每个粒子代表一种可能的无人机路径方案,该方案由多 Dubins 路径段的参数(如各路径段的长度、连接角度、飞行速度等)所确定。每个粒子都有一个对应的适应度值,这个适应度值是根据路径的优劣程度来计算的,具体而言,就是综合考虑路径是否避开了威胁区域(安全指标)、光程是否符合任务要求以及是否存在与其他无人机碰撞的风险(碰撞指标)等因素。在迭代过程中,粒子根据自身的经验(个体最优位置)和群体中其他粒子的经验(全局最优位置)来更新自己的速度和位置。粒子的速度更新公式综合考虑了当前速度、个体最优与当前位置的差异以及全局最优与当前位置的差异等因素,通过这种方式引导粒子在解空间中不断搜索更优的路径方案。位置更新则基于新的速度计算得出。随着迭代的进行,粒子群逐渐收敛到一个或多个较优的路径方案,这些方案对应的路径即为满足复杂威胁环境穿透需求、光程调整和碰撞避免要求的无人机集群路径。

📚2 运行结果

主函数部分代码:

clear;
clc;
addpath('Function_Plot');
addpath('Function_Dubins');
addpath('Function_Trajectory');

%% Initialize Data
Property.obs_last=0;                                                % Record the obstacles avoided during current trajectory planning
Property.invasion=0;                                                % Record whether there is any intrusion into obstacles (threat areas) during trajectory planning
Property.mode=2;                                                    % Set trajectory generation mode 1: shortest path; 2: Conventional path
Property.ns=50;                                                     % Set the number of discrete points in the starting arc segment
Property.nl=50;                                                     % Set the number of discrete points in the straight line segment
Property.nf=50;                                                     % Set the number of discrete points at the end of the arc segment
Property.max_obs_num=5;                                             % Set the maximum number of obstacles to be detected for each path planning
Property.max_info_num=20;                                           % Set the maximum number of stored path segments for each planning step
Property.max_step_num=4;                                            % Set the maximum number of planned steps for the path
Property.Info_length=33;                                            % Set the length of each path information
Property.radius=100*1e3;                                            % Set the turning radius of the UAV锛坢m锛�
Property.scale=1/1000;
Property.increment=20*1e3;                                          % Set the adjustment range of path lenth increment
Property.selection1=3;                                              % Set path filtering mode 1
Property.selection2=1;                                              % Set path filtering mode 2
                                                                    % =1: The path does not intersect with obstacles
                                                                    % =2: The turning angle of the path shall not exceed 3 * pi/2
                                                                    % =3: Simultaneously satisfying 1 and 2
% Set starting point infomation
StartInfo=[ 50*1e3,     30*1e3,     0,          100*1e3;            % positon x, position y, yaw angle, starting arc radius
            80*1e3,     -40*1e3,    pi/6,       100*1e3;            % xs, ys, phi_s, R_s
            20*1e3,     80*1e3,     -pi/6,      100*1e3];           % unit (mm)

% Set ending point information
FinishInfo=[550*1e3,    120*1e3,    0,      100*1e3;                % positon x, position y, yaw angle, starting arc radius
            500*1e3,    100*1e3,    0,      100*1e3;                % xf, yf, phi_f, R_f
            500*1e3,    140*1e3,    0,      100*1e3];               % unit (mm)

% Set obastacles (threat circle) information
ObsInfo=[   150*1e3,    50*1e3,     50*1e3;                         % positon x, position y, threat circle radius
            300*1e3,    100*1e3,    20*1e3;                         % xo, yo, Ro
            400*1e3,    50*1e3,     50*1e3;                         % unit (mm)
            200*1e3,    200*1e3,    50*1e3];


[uav_num,~]=size(StartInfo);                                        % Obtain UAVs number
[obs_num,~]=size(ObsInfo);                                          % Obtain obstacles number

Coop_State(1:uav_num)=struct(...                                    % The structure of flight paths information for UAVs
    'traj_length',[],...                                            % Array of all path length 
    'traj_length_max',0,...                                         % Maximum path length
    'traj_length_min',0,...                                         % Minimum path length
    'TrajSeqCell',[],...                                            % Path sequence cell array
    'ideal_length',12*1e5,...                                       % Expected path length
    'optim_length',0,...                                            % Optimized path length
    'traj_index_top',0,...                                          % Index of path that lenth is greater than and closest to the expected path length
    'traj_index_bottom',0,...                                       % Index of path that lenth is shorter than and closest to the expected path length
    'TrajSeq_Coop',[]);                                             % Matrix of cooperative path sequence


%% Plan the path of each UAV from the starting point to the endpoint in sequence
for uav_index=1:3                                                   % Traverse each UAV
    start_info=StartInfo(uav_index,:);                              % Obtain the starting point information of the UAV
    finish_info=FinishInfo(uav_index,:);                            % Obtain the ending point information of the UAV
    Property.radius=start_info(4);                                  % Set the turning radius of the UAV based on initial information
    TrajSeqCell=Traj_Collection...                                  % Calculate all available flight paths for the UAV
        (start_info,finish_info,ObsInfo,Property);                  
    Coop_State(uav_index)=Coop_State_Update...                      % Select the basic path from the available flight paths
        (TrajSeqCell,Coop_State(uav_index),ObsInfo,Property);       % and optimize the basic path to generate a cooperative path

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]王国强,施倩,段婕,等.面向点线混合巡检任务的多无人机路径规划方法[J/OL].系统科学与数学,1-25[2024-12-08].http://kns.cnki.net/kcms/detail/11.2019.o1.20241128.1030.018.html.

[2]孙伟昌,罗志浩,石建迈,等.无人机覆盖路径规划方法综述[J/OL].控制理论与应用,1-21[2024-12-08].http://kns.cnki.net/kcms/detail/44.1240.TP.20241130.0849.004.html.

🌈4 Matlab代码实现

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值