✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。
🍎 往期回顾关注个人主页:Matlab科研工作室
👇 关注我领取海量matlab电子书和数学建模资料
🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。
🔥 内容介绍 近年来,无人机(UAV),尤其是无人机集群,已广泛应用于各类物联网(IoT)场景。由于位置信息是无人机协同工作的核心基础,无人机集群的高精度定位问题受到了广泛关注。尽管全球定位系统(GPS)接收机已普遍集成于无人机中,但该技术定位精度不足,且易受意外干扰或蓄意干扰影响。本文提出一种结合超多维尺度分析(SMDS)、子图划分 / 融合与 GPS 信息的分布式协同定位方法。具体而言,首先利用超多维尺度分析(SMDS)获取每个子图内无人机的相对坐标;随后将各子图相对地图融合为全局地图,并将无人机的相对坐标转换为绝对坐标。此外,本文还提出一种低复杂度算法,该算法可在无人机数量较多时大幅降低 SMDS 的计算复杂度。仿真结果表明,在角度测量足够精确的情况下,所提 SMDS 定位算法性能优于其他基于多维尺度分析(MDS)的协同定位算法,且能显著提升无人机集群的定位精度与鲁棒性。
方案核心流程拆解(分治→融合→优化)
1. 预处理:子图划分(降低计算复杂度的关键)
针对大规模无人机集群(如数十架甚至上百架 UAV),直接进行全局 SMDS 计算会导致矩阵运算量呈指数级增长,因此先将集群按通信范围、任务区域划分为多个子图(每个子图包含少量 UAV,如 5-10 架),实现 “化整为零”。
2. 子图内相对定位:SMDS 算法的核心应用
每个子图内的无人机通过传感器(如毫米波雷达、视觉传感器)测量彼此间的相对角度 / 距离(原文强调 “准确的角度测量” 是性能关键),将这些相对测量信息输入 SMDS 算法:
SMDS 通过保留节点间的 “距离 / 角度相似性”,在低维空间中重构出子图内所有 UAV 的相对坐标(无需依赖绝对位置参考,仅需子图内局部测量)。
优势:相比传统 MDS,SMDS 对测量噪声的容忍度更高,重构的相对坐标精度更优。
3. 全局定位:子图融合与绝对坐标转换
各子图完成相对定位后,利用少量 UAV 的GPS 初始信息(作为 “锚点”),将所有子图的相对坐标统一到全局坐标系中,实现 “子图融合”;
最终输出所有无人机的绝对坐标,完成分布式协同定位。
4. 性能优化:低复杂度算法的作用
针对 SMDS 在大规模集群中 “计算复杂度高” 的痛点,设计专用优化算法(原文未详述具体逻辑,推测为简化矩阵运算、减少冗余计算),在不损失定位精度的前提下,降低硬件算力需求,适配无人机的嵌入式计算平台。
方案创新点与优势
分治 + SMDS 融合:解决传统 MDS 在大规模集群中 “精度低、计算量大” 的双重问题 —— 子图划分降低计算压力,SMDS 提升相对定位精度;
GPS 辅助的绝对定位:规避 GPS 单独使用时的缺陷(精度不足、抗干扰弱),仅将其作为 “锚点” 辅助子图融合,既保证绝对坐标的准确性,又提升系统抗干扰能力;
分布式架构:无需中心节点统筹计算,无人机间自主协同定位,即使部分节点故障,也不影响整体定位效果,鲁棒性更强;
低复杂度适配性:专门优化大规模集群场景的计算效率,可部署于算力有限的无人机硬件,实用性更高。
关键结论与应用场景
核心结论:在角度测量精度达标的前提下,该方案定位精度、鲁棒性均优于传统 MDS 类协同定位算法,且能通过子图划分与低复杂度算法适配大规模无人机集群;
典型应用:物联网场景中的无人机协同任务(如电力巡检、应急通信、农田测绘),尤其适合对定位精度要求高、集群规模大、易受 GPS 干扰的复杂环境(如城市峡谷、山区)。
⛳️ 运行结果
📣 部分代码
clear;clc;close all;
load data1a;load data2a;load data3a;load data4a;
MAP=real(MAP);MAPP=real(MAPP);SMDSP=real(SMDSP);SMDS=real(SMDS);
Jan_O=MAP(:,1);Feb_O=MAP(:,2);Mar_O=MAP(:,3);Apr_O=MAP(:,4);May_O=MAP(:,5);
Jun_O=MAP(:,6);Jul_O=MAP(:,7);Aug_0=MAP(:,8);Sep_0=MAP(:,9);Oct_0=MAP(:,10);
% Boxplot for the observed temperature from January to December
%Temp_O = [Jan_O, Feb_O, Mar_O, Apr_O, May_O, Jun_O, Jul_O, Aug_0, Sep_0, Oct_0];
Temp_O = [Feb_O, Apr_O,Jun_O, Aug_0, Oct_0];
position_O = 1.3:1:5.3;
% Define position for 12 Month_O boxplots
box_O = boxplot(Temp_O,'colors','r','positions',position_O,'width',0.13,'sym',' ','whisker',2);hold on;
set(gca,'XTickLabel',{' '}) % Erase xlabels
hold on % Keep the Month_O boxplots on figure overlap the Month_S boxplots
% Boxplot for the simulated temperature from January to December
Jan_Z=SMDSP(:,1);Feb_Z=SMDSP(:,2);Mar_Z=SMDSP(:,3);Apr_Z=SMDSP(:,4);May_Z=SMDSP(:,5);
Jun_Z=SMDSP(:,6);Jul_Z=SMDSP(:,7);Aug_Z=SMDSP(:,8);Sep_Z=SMDSP(:,9);Oct_Z=SMDSP(:,10);
%Temp_Z = [Jan_Z, Feb_Z, Mar_Z, Apr_Z, May_Z, Jun_Z, Jul_Z, Aug_Z, Sep_Z, Oct_Z];
Temp_Z = [ Feb_Z,Apr_Z,Jun_Z, Aug_Z, Oct_Z];
position_Z = 1.75:1:5.75; % Define position for 12 Month_S boxplots
box_S = boxplot(Temp_Z,'colors','g','positions',position_Z,'width',0.13,'sym',' ','whisker',2,'Labels',{'0.2','0.4','0.6','0.8','1'});
dd=[11;12];
Jan_D=dd;Feb_D=dd;Mar_D=dd;Apr_D=dd;May_D=dd;
Jun_D=dd;Jul_D=dd;Aug_D=dd;Sep_D=dd;Oct_D=dd;
%Temp_D = [Jan_D, Feb_D, Mar_D, Apr_D, May_D, Jun_D, Jul_D, Aug_D, Sep_D, Oct_D];
Temp_D = [ Feb_D, Apr_D,Jun_D, Aug_D, Oct_D];
position_D = 1.15:1:5.15; % Define position for 12 Month_S boxplots
box_S = boxplot(Temp_D,'colors','k','positions',position_D,'width',0.13,'sym',' ','whisker',2,'Labels',{'0.2','0.4','0.6','0.8','1'});
load gpsa;GPS=GPS1(:,1:5);
position_A = 1.15:1:5.15; % Define position for 12 Month_S boxplots
box_S = boxplot(GPS,'colors','k','positions',position_A,'width',0.13,'sym',' ','whisker',2,'Labels',{'0.2','0.4','0.6','0.8','1'});
Jan_T=SMDS(:,1);Feb_T=SMDS(:,2);Mar_T=SMDS(:,3);Apr_T=SMDS(:,4);May_T=SMDS(:,5);
Jun_T=SMDS(:,6);Jul_T=SMDS(:,7);Aug_T=SMDS(:,8);Sep_T=SMDS(:,9);Oct_T=SMDS(:,10);
%Temp_T = [Jan_T, Feb_T, Mar_T, Apr_T, May_T, Jun_T, Jul_T, Aug_T, Sep_T, Oct_T];
Temp_T = [ Feb_T, Apr_T, Jun_T,Aug_T, Oct_T];
position_T = 1.6:1:5.6; % Define position for 12 Month_S boxplots
box_S = boxplot(Temp_T,'colors','b','positions',position_T,'width',0.13,'sym',' ','whisker',2,'Labels',{'0.2','0.4','0.6','0.8','1'});
Jan_S=MAPP(:,1);Feb_S=MAPP(:,2);Mar_S=MAPP(:,3);Apr_S=MAPP(:,4);May_S=MAPP(:,5);
Jun_S=MAPP(:,6);Jul_S=MAPP(:,7);Aug_S=MAPP(:,8);Sep_S=MAPP(:,9);Oct_S=MAPP(:,10);
%Temp_S = [Jan_S, Feb_S, Mar_S, Apr_S, May_S, Jun_S, Jul_S, Aug_S, Sep_S, Oct_S];
Temp_S = [ Feb_S, Apr_S, Jun_S, Aug_S, Oct_S];
position_S = 1.45:1:5.45; % Define position for 12 Month_S boxplots
box_S = boxplot(Temp_S,'colors','y','positions',position_S,'width',0.13,'sym',' ','whisker',2,'Labels',{'0.2','0.4','0.6','0.8','1'});
% legend('MDS-MAP','MDS-MAP(P)','SMDS','SMDS(P)','GPS');
box_vars=findall(gca,'Tag','Box');
hLegend = legend(box_vars([20,30,1,10,22]), {'GPS','MDS-MAP','MDS-MAP(P)','SMDS-Ny','SMDS(P)-Ny-PM'});
xlabel('\rho','FontSize',16);ylabel('Error(m)');
set(gca,'XLim',[0.8 6]);%X轴的数据显示范围
set(gca,'YLim',[0 5]);%X轴的数据显示范围
🔗 参考文献
[1] Chen R , Yang B , Zhang W .Distributed and Collaborative Localization for Swarming UAVs[J].IEEE internet of things journal, 2021(8-6).DOI:10.1109/JIOT.2020.3037192.
🏆团队擅长辅导定制多种科研领域MATLAB仿真,助力科研梦:
🌈 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱调度、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题、港口调度、港口岸桥调度、停机位分配、机场航班调度、泄漏源定位
🌈 机器学习和深度学习时序、回归、分类、聚类和降维
2.1 bp时序、回归预测和分类
2.2 ENS声神经网络时序、回归预测和分类
2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类
2.4 CNN|TCN|GCN卷积神经网络系列时序、回归预测和分类
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径向基神经网络时序、回归预测和分类