内容介绍
针对无人机(UAV)集群协同攻击中目标搜索效率低、路径冲突频发、联盟组建不合理、任务执行协同性差等问题,提出一种融合 Dubins 路径规划与候选集策略的一体化解决方案。该方案以集群协同作战需求为导向,通过多源信息融合的目标搜索机制提升探测精度,基于改进 Dubins 路径实现动态冲突避免,采用候选集优化策略完成联盟组建与任务分配,最终通过协同执行协议保障攻击任务高效落地。
一、引言
(一)研究背景
随着无人机技术与集群智能的快速发展,UAV 集群协同攻击已成为现代战争中的关键作战模式,其凭借灵活性高、覆盖范围广、抗毁伤能力强等优势,在精确打击、区域封锁等任务中发挥着不可替代的作用。然而,复杂战场环境下的集群协同攻击仍面临诸多技术瓶颈:动态战场中目标隐蔽性强、运动状态不确定,导致搜索效率难以保障;多无人机高速机动时易出现路径交叉、碰撞等冲突;集群内无人机性能异质(续航、载荷、速度),联盟组建需兼顾任务需求与资源匹配;任务执行阶段的时间同步、火力协同等问题直接影响攻击效果。
(二)研究意义
- 理论意义:构建'搜索 - 避碰 - 联盟 - 执行'全流程协同技术框架,融合 Dubins 路径的运动约束适配性与候选集的决策优化优势,丰富无人机集群协同控制的理论体系。
- 实践意义:解决无人机集群协同攻击中的核心技术难题,提升集群在动态、复杂环境下的作战适应性与任务成功率。
二、无人机集群协同攻击技术框架
(一)核心设计原则
- 运动约束适配原则:路径规划需满足无人机最小转弯半径、最大速度等物理约束。
- 实时性与优化性平衡原则:决策流程需兼顾计算效率与方案最优性。
- 协同性与鲁棒性统一原则:各环节技术需实现集群全局协同,同时具备抗干扰能力。
- 资源匹配原则:联盟组建与任务分配需结合无人机性能差异与目标特性。
(二)整体技术架构
构建'四层协同'技术架构,涵盖目标搜索层、路径规划与冲突避免层、联盟组建层、任务执行层,各层通过信息交互实现全流程协同。
三、关键技术详细设计
(一)目标搜索:多源融合与动态估计
- 多源信息融合探测:集群内无人机搭载可见光、红外、雷达等多类型传感器,采用分布式加权融合算法对多机探测数据进行融合处理。定义融合置信度 β = ∑(ω_i * p_i),其中 ω_i 为第 i 架无人机的探测权重,p_i 为单机电探测概率。
- 动态目标状态估计:针对运动目标,采用卡尔曼滤波算法实时估计目标位置、速度、运动轨迹等状态信息,为后续路径规划与任务分配提供精准输入。
(二)冲突避免:改进 Dubins 路径规划
- 基础 Dubins 路径模型:考虑无人机最小转弯半径 R_min,构建 Dubins 路径的三线段(直线 - 圆弧 - 直线)模型。
- 集群冲突动态检测:基于无人机实时位置、速度与路径信息,采用'距离阈值 - 时间窗口'双准则检测冲突。
- 冲突避免的路径调整:针对冲突无人机,通过调整 Dubins 路径的圆弧半径、直线段长度与转向方向,生成候选避碰路径。
(三)联盟组建:候选集优化策略
- 候选集构建:根据目标特性与无人机性能,构建多维度候选集,满足'能力覆盖'与'资源可行'约束。
- 联盟优化选择:定义联盟评价指标体系,包括任务完成概率 P、资源消耗成本 C、联盟鲁棒性 R。采用加权评分法对候选集进行排序。
- 动态任务分配:基于联盟组建结果,采用匈牙利算法将多个目标分配至对应联盟。
(四)任务执行:协同控制与动态调整
- 时间同步协同:通过集群内时钟同步协议实现各联盟无人机的时间同步,制定协同攻击时间节点。
- 火力分配优化:针对多目标、多无人机场景,采用动态火力分配策略,实时调整各无人机的打击强度。
- 动态任务调整:任务执行过程中,若出现目标状态突变或无人机故障等情况,基于候选集快速生成新的联盟与任务分配方案。
运行结果
(仿真结果显示了无人机集群在搜索、避障及攻击过程中的轨迹分布与协同效果)
部分代码
% 根据 uav.path 中的路径坐标点画出无人机的运动轨迹
l=4000; % 坐标轴范围
b=4000;
colorChoice = ['rgbmycrgbymcrgbymc'];
figure(1);
clear all;
box on;
axis([-1000 l -1000 b]);
hold on;
plot([0,3200],[0,0],'--k');
plot([0,3200],[3200,3200],'--k');
plot([0,0],[0,3200],'--k');
plot([3200,3200],[0,3200],'--k');
set(gca,'xtick',-1000:500:3200);
set(gca,'ytick',-1000:500:3200);
% plot targets
for iTarget=1:length(target)
h1=plot(target(iTarget).location(1),target(iTarget).location(2),[colorChoice(1) 'x'],'markersize',10,'linewidth',2);
text(target(iTarget).location(1)+40,target(iTarget).location(2),strcat('T_',num2str(iTarget)),'FontSize',10);
end
% plot uavs path
load uavData2
for iUav=1:length(uav)
h2=plot(uavData(iUav,1),uavData(iUav,2),[colorChoice(3) '^'],'markersize',10,'MarkerFaceColor','b');
text(uavData(iUav,1)+40,uavData(iUav,2),strcat('A_',num2str(iUav)),'FontSize',10);
if ~isempty(uav(iUav).planning_route)
uav(iUav).path = [uav(iUav).path; uav(iUav).planning_route];
end
plot(uav(iUav).path(:,1),uav(iUav).path(:,2),'LineWidth',2);
end
legend([h1,h2],'Target','UAV','Location','North');
drawnow

