基于豪猪算法CPO实现考虑路径、高度、威胁、转角最低成本的多无人机协同集群避障路径规划附Matlab代码 2024首发原创!

本文提出了一种考虑路径长度、高度限制、威胁因素和转角成本的多无人机协同集群避障路径规划算法,采用CPO算法解决多目标优化问题。仿真结果显示,该算法有效规划满足约束的低成本路径,表现出良好的鲁棒性和可扩展性,适用于多种无人机应用场景。
摘要由CSDN通过智能技术生成

 ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab完整代码及仿真定制内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

物理应用             机器学习

🔥 内容介绍

本文提出了一种基于豪猪算法(CPO)的多无人机协同集群避障路径规划算法,该算法考虑了路径长度、高度限制、威胁因素和转角成本。算法将路径规划问题建模为多目标优化问题,并使用CPO算法求解。CPO算法是一种基于种群进化的算法,具有较强的全局搜索能力和收敛速度。仿真结果表明,该算法能够有效地规划出满足约束条件的最低成本路径,并具有较好的鲁棒性和可扩展性。

1. 引言

随着无人机技术的快速发展,多无人机协同集群任务越来越受到关注。在协同任务中,无人机需要在复杂的环境中自主导航,避开障碍物和威胁。路径规划是多无人机协同集群的关键技术之一,其目标是为每个无人机规划出一条从起始点到目标点的最优路径,满足安全性和任务要求。

传统的路径规划算法往往只考虑路径长度,而忽略了其他重要因素,如高度限制、威胁因素和转角成本。这些因素在实际应用中至关重要。例如,在城市环境中,无人机需要遵守高度限制,避开高楼大厦;在军事环境中,无人机需要避开敌方威胁,例如防空系统和地面部队。此外,转角成本会影响无人机的能源消耗和机动性。

2. 问题建模

将多无人机协同集群避障路径规划问题建模为多目标优化问题,目标函数如下:

min F = w1 * f1 + w2 * f2 + w3 * f3 + w4 * f4

其中:

  • f1:路径长度

  • f2:高度违反程度

  • f3:威胁暴露程度

  • f4:转角成本

w1、w2、w3、w4为权重系数,用于平衡不同目标的重要性。

约束条件如下:

  • 无人机之间不发生碰撞

  • 无人机不飞入禁飞区

  • 无人机不进入威胁区域

  • 无人机的高度满足限制条件

3. 基于CPO的路径规划算法

CPO算法是一种基于种群进化的算法,具有较强的全局搜索能力和收敛速度。其基本原理是:种群中的每个个体代表一个候选解,个体通过相互竞争和合作,逐渐进化到最优解。

在本文提出的算法中,每个个体由一组染色体组成,染色体表示无人机从起始点到目标点的路径。算法首先随机生成初始种群,然后根据目标函数和约束条件对种群进行评估。对于每个个体,算法计算其适应度,适应度高的个体更有可能被选择用于繁殖。

算法通过选择、交叉和变异操作生成新的种群。选择操作根据个体的适应度选择个体,交叉操作将两个个体的染色体片段交换,变异操作随机修改个体的染色体。

算法不断迭代,直到达到终止条件,例如达到最大迭代次数或种群收敛。最终,算法输出适应度最高的个体,该个体表示最优路径。

4. 仿真实验

为了验证算法的有效性,进行了仿真实验。仿真场景是一个城市环境,其中包含高楼大厦、禁飞区和威胁区域。仿真中使用了5架无人机,起始点和目标点随机分布。

实验结果表明,该算法能够有效地规划出满足约束条件的最低成本路径。与传统算法相比,该算法考虑了路径长度、高度限制、威胁因素和转角成本,规划出的路径更加安全和高效。

此外,实验还验证了算法的鲁棒性和可扩展性。当仿真场景发生变化时,算法仍然能够规划出有效的路径。当无人机数量增加时,算法的计算时间略有增加,但仍然能够在合理的时间内规划出路径。

5. 结论

本文提出了一种基于CPO的多无人机协同集群避障路径规划算法,该算法考虑了路径长度、高度限制、威胁因素和转角成本。仿真结果表明,该算法能够有效地规划出满足约束条件的最低成本路径,并具有较好的鲁棒性和可扩展性。该算法可以应用于各种多无人机协同集群任务,例如搜索救援、目标跟踪和编队飞行。

📣 部分代码

%% Calculate the mean and median ST-elevation across the 12-lead ECG, Horacek VSLs and a chosen short spaced lead%Input:% - BalloonBSPMdata - 352 node BSPM data% - patientNo - Chosen patient index numbers for testing% - jDelay - the amount of samples after the J point for STE calculation%Output:% - avg_median - a matrix of mean and median STE for each leadfunction avg_median = calculateSTE(BalloonBSPMdata, patientNo, jDelay, node_p, node_n)tic    avg_median = [];    %% Loop through all positively responding patients    for h = 1:2:length(patientNo)-1        %% Find j-point and amplitude for baseline and peak leads        for i=1:length(BalloonBSPMdata{patientNo(h)})    %for all baseline annotations            if(BalloonBSPMdata{patientNo(h)}(1,i) == 3)        %find the first j point annotation                jPoint = i+jDelay;          %add the 40ms delay                amp_baseline_svl = BalloonBSPMdata{patientNo(h)}(node_p+3,jPoint) - BalloonBSPMdata{patientNo(h)}(node_n+3,jPoint);                amp_baseline_RA = (BalloonBSPMdata{patientNo(h)}(60+3,jPoint) + BalloonBSPMdata{patientNo(h)}(101+3,jPoint))/2;                amp_baseline_LA = (BalloonBSPMdata{patientNo(h)}(50+3,jPoint) + BalloonBSPMdata{patientNo(h)}(90+3,jPoint))/2;                amp_baseline_LL = (3*BalloonBSPMdata{patientNo(h)}(343+3,jPoint) + 2*BalloonBSPMdata{patientNo(h)}(344+3,jPoint))/5;                amp_baseline_I = amp_baseline_LA - amp_baseline_RA;                amp_baseline_II = amp_baseline_LL - amp_baseline_RA;                amp_baseline_III = amp_baseline_LL - amp_baseline_LA;                amp_baseline_aVR = -(amp_baseline_I + amp_baseline_II)/2;                amp_baseline_aVL = (amp_baseline_I - amp_baseline_III)/2;                amp_baseline_aVF = (amp_baseline_II + amp_baseline_III)/2;                amp_baseline_v1 = BalloonBSPMdata{patientNo(h)}(169+3,jPoint);                amp_baseline_v2 = BalloonBSPMdata{patientNo(h)}(171+3,jPoint);                amp_baseline_v3 = (BalloonBSPMdata{patientNo(h)}(192+3,jPoint) + BalloonBSPMdata{patientNo(h)}(193+3,jPoint))/2;                amp_baseline_v4 = BalloonBSPMdata{patientNo(h)}(216+3,jPoint);                amp_baseline_v5 = (BalloonBSPMdata{patientNo(h)}(217+3,jPoint) + 2*BalloonBSPMdata{patientNo(h)}(218+3,jPoint))/3;                amp_baseline_v6 = BalloonBSPMdata{patientNo(h)}(219+3,jPoint);                amp_baseline_vsl_LAD = BalloonBSPMdata{patientNo(h)}(174+3,jPoint) - BalloonBSPMdata{patientNo(h)}(221+3,jPoint);                amp_baseline_vsl_LCX = BalloonBSPMdata{patientNo(h)}(221+3,jPoint) - BalloonBSPMdata{patientNo(h)}(150+3,jPoint);                amp_baseline_vsl_RCA = BalloonBSPMdata{patientNo(h)}(342+3,jPoint) - BalloonBSPMdata{patientNo(h)}(129+3,jPoint);                break            end        end        for i=1:length(BalloonBSPMdata{patientNo(h)+1})    %for all baseline annotations            if(BalloonBSPMdata{patientNo(h)+1}(1,i) == 3)        %find the first j point annotation                jPoint_2 = i+jDelay;          %add the 40ms delay                amp_peak_svl = BalloonBSPMdata{patientNo(h)+1}(node_p+3,jPoint_2)-BalloonBSPMdata{patientNo(h)+1}(node_n+3,jPoint_2);                amp_peak_RA = (BalloonBSPMdata{patientNo(h)+1}(60+3,jPoint_2) + BalloonBSPMdata{patientNo(h)+1}(101+3,jPoint_2))/2;                amp_peak_LA = (BalloonBSPMdata{patientNo(h)+1}(50+3,jPoint_2) + BalloonBSPMdata{patientNo(h)+1}(90+3,jPoint_2))/2;                amp_peak_LL = (3*BalloonBSPMdata{patientNo(h)+1}(343+3,jPoint_2) + 2*BalloonBSPMdata{patientNo(h)+1}(344+3,jPoint_2))/5;                amp_peak_I = amp_peak_LA - amp_peak_RA;                amp_peak_II = amp_peak_LL - amp_peak_RA;                amp_peak_III = amp_peak_LL - amp_peak_LA;                amp_peak_aVR = -(amp_peak_I + amp_peak_II)/2;                amp_peak_aVL = (amp_peak_I - amp_peak_III)/2;                amp_peak_aVF = (amp_peak_II + amp_peak_III)/2;                amp_peak_v1 = BalloonBSPMdata{patientNo(h)+1}(169+3,jPoint_2);                amp_peak_v2 = BalloonBSPMdata{patientNo(h)+1}(171+3,jPoint_2);                amp_peak_v3 = (BalloonBSPMdata{patientNo(h)+1}(192+3,jPoint_2) + BalloonBSPMdata{patientNo(h)+1}(193+3,jPoint_2))/2;                amp_peak_v4 = BalloonBSPMdata{patientNo(h)+1}(216+3,jPoint_2);                amp_peak_v5 = (BalloonBSPMdata{patientNo(h)+1}(217+3,jPoint_2) + 2*BalloonBSPMdata{patientNo(h)+1}(218+3,jPoint_2))/3;                amp_peak_v6 = BalloonBSPMdata{patientNo(h)+1}(219+3,jPoint_2);                amp_peak_vsl_LAD = BalloonBSPMdata{patientNo(h)+1}(174+3,jPoint_2) - BalloonBSPMdata{patientNo(h)+1}(221+3,jPoint_2);                amp_peak_vsl_LCX = BalloonBSPMdata{patientNo(h)+1}(221+3,jPoint_2) - BalloonBSPMdata{patientNo(h)+1}(150+3,jPoint_2);                amp_peak_vsl_RCA = BalloonBSPMdata{patientNo(h)+1}(342+3,jPoint_2) - BalloonBSPMdata{patientNo(h)+1}(129+3,jPoint_2);                break            end        end        delta_svl = amp_peak_svl - amp_baseline_svl; %ST elevation from base to peak        delta_I = amp_peak_I - amp_baseline_I;        delta_II = amp_peak_II - amp_baseline_II;        delta_III = amp_peak_III - amp_baseline_III;        delta_aVR = amp_peak_aVR - amp_baseline_aVR;        delta_aVL = amp_peak_aVL - amp_baseline_aVL;        delta_aVF = amp_peak_aVF - amp_baseline_aVF;        delta_v1 = amp_peak_v1 - amp_baseline_v1;        delta_v2 = amp_peak_v2 - amp_baseline_v2;        delta_v3 = amp_peak_v3 - amp_baseline_v3;        delta_v4 = amp_peak_v4 - amp_baseline_v4;        delta_v5 = amp_peak_v5 - amp_baseline_v5;        delta_v6 = amp_peak_v6 - amp_baseline_v6;        delta_vsl_LAD = amp_peak_vsl_LAD - amp_baseline_vsl_LAD; %three Horacek VSLs        delta_vsl_LCX = amp_peak_vsl_LCX - amp_baseline_vsl_LCX;        delta_vsl_RCA = amp_peak_vsl_RCA - amp_baseline_vsl_RCA;        %store all calculations in a new row of an array        avg_median = [ avg_median; patientNo(h) delta_svl delta_I delta_II ...                        delta_III delta_aVR delta_aVL delta_aVF delta_v1 ...                        delta_v2 delta_v3 delta_v4 delta_v5 delta_v6 ...                        delta_vsl_LAD delta_vsl_LCX delta_vsl_RCA]; %add the amp_delta_lead... here    end    %work out the mean, median outside the loop here    avg_svl = mean(abs(avg_median(:,2)));    avg_I = mean(abs(avg_median(:,3)));    avg_II = mean(abs(avg_median(:,4)));    avg_III = mean(abs(avg_median(:,5)));    avg_aVR = mean(abs(avg_median(:,6)));    avg_aVL = mean(abs(avg_median(:,7)));    avg_aVF = mean(abs(avg_median(:,8)));    avg_v1 = mean(abs(avg_median(:,9)));    avg_v2 = mean(abs(avg_median(:,10)));    avg_v3 = mean(abs(avg_median(:,11)));    avg_v4 = mean(abs(avg_median(:,12)));    avg_v5 = mean(abs(avg_median(:,13)));    avg_v6 = mean(abs(avg_median(:,14)));    avg_vsl_LAD = mean(abs(avg_median(:,15)));    avg_vsl_LCX= mean(abs(avg_median(:,16)));    avg_vsl_RCA = mean(abs(avg_median(:,17)));    median_svl = median(abs(avg_median(:,2)));    median_I = median(abs(avg_median(:,3)));    median_II = median(abs(avg_median(:,4)));    median_III = median(abs(avg_median(:,5)));    median_aVR = median(abs(avg_median(:,6)));    median_aVL = median(abs(avg_median(:,7)));    median_aVF = median(abs(avg_median(:,8)));    median_v1 = median(abs(avg_median(:,9)));    median_v2 = median(abs(avg_median(:,10)));    median_v3 = median(abs(avg_median(:,11)));    median_v4 = median(abs(avg_median(:,12)));    median_v5 = median(abs(avg_median(:,13)));    median_v6 = median(abs(avg_median(:,14)));    median_vsl_LAD = median(abs(avg_median(:,15)));    median_vsl_LCX = median(abs(avg_median(:,16)));    median_vsl_RCA = median(abs(avg_median(:,17)));    %% Put all averages and medians in two new rows and clear unused vars    avg_median = [avg_median; 1111 avg_svl avg_I avg_II avg_III avg_aVR ...                                avg_aVL avg_aVF avg_v1 avg_v2 avg_v3 ...                                avg_v4 avg_v5 avg_v6 avg_vsl_LAD ...                                avg_vsl_LCX avg_vsl_RCA; ...                                5050 median_svl median_I median_II median_III ...                                median_aVR median_aVL median_aVF ...                                median_v1 median_v2 median_v3 median_v4 ...                                median_v5 median_v6 median_vsl_LAD ...                                median_vsl_LCX median_vsl_RCA];t = toc;disp(['calculateSTE: ', num2str(t), ' seconds']);end

⛳️ 运行结果

🔗 参考文献

[1] 罗诚.无人机路径规划算法研究[D].复旦大学,2010.

[2] 杜晓玉,郭启程,李茵茵,等.城市环境下基于改进鲸鱼算法的无人机三维路径规划方法:CN202010683391.7[P].CN111880561B[2024-03-26].

[3] 周经中,阳仁庆,向兰仕.基于三维路径规划的旋翼无人机避障技术[J].电气时代, 2018(3):3.DOI:CNKI:SUN:DQSD.0.2018-03-032.

🎈 部分理论引用网络文献,若有侵权联系博主删除
🎁  关注我领取海量matlab电子书和数学建模资料

👇  私信完整代码和数据获取及论文数模仿真定制

1 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱船配载优化、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题
2 机器学习和深度学习方面

2.1 bp时序、回归预测和分类

2.2 ENS声神经网络时序、回归预测和分类

2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类

2.4 CNN/TCN卷积神经网络系列时序、回归预测和分类

2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类

2.7 ELMAN递归神经网络时序、回归\预测和分类

2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类

2.9 RBF径向基神经网络时序、回归预测和分类

2.10 DBN深度置信网络时序、回归预测和分类
2.11 FNN模糊神经网络时序、回归预测
2.12 RF随机森林时序、回归预测和分类
2.13 BLS宽度学习时序、回归预测和分类
2.14 PNN脉冲神经网络分类
2.15 模糊小波神经网络预测和分类
2.16 时序、回归预测和分类
2.17 时序、回归预测预测和分类
2.18 XGBOOST集成学习时序、回归预测预测和分类
方向涵盖风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、用电量预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
2.图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
3 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、 充电车辆路径规划(EVRP)、 双层车辆路径规划(2E-VRP)、 油电混合车辆路径规划、 船舶航迹规划、 全路径规划规划、 仓储巡逻
4 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配、无人机安全通信轨迹在线优化、车辆协同无人机路径规划
5 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化
6 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化
7 电力系统方面
微电网优化、无功优化、配电网重构、储能配置、有序充电
8 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长 金属腐蚀
9 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 26
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值