文献复现 基于分布式模型预测控制的多架固定翼无人机的一致控制 运行文件“main” “main”是“CalAlluavs”和“ShowAlluavs”的组合 文件夹“data”中提供了几个无人机数据可以按照规则更改“main”中的一些代码使用它们。 如果要计算自己的数据则在文件夹“Formation_control_main”中提供了“A5pre”。 附带参考文献最近在复现一篇关于多无人机协同控制的论文题目挺有意思——《基于分布式模型预测控制的多架固定翼无人机的一致控制》。这种分布式架构的算法在实际工程中应用潜力很大尤其适合通信资源受限的场景。今天咱们直接上硬货聊聊怎么把论文里的算法跑起来顺便解剖代码结构。先看项目入口文件main.m。这个文件其实是把计算和展示两个功能模块拼装起来的。咱们可以把它拆解成两部分% 计算所有无人机状态 [AllUAVs, T] CalAlluavs(); % 保存数据备用 save(./data/formation.mat,AllUAVs,T); % 可视化结果 ShowAlluavs(AllUAVs, T);CalAlluavs函数负责核心控制算法的迭代。里面有个主循环每次迭代都处理各无人机的预测控制问题while T.time T.end % 分布式信息交换 UAVs exchange_neighbor_info(UAVs, ComTopo); % 每个无人机独立求解本地优化问题 parfor i 1:UAV_num UAVs(i) solve_local_MPC(UAVs(i)); end % 状态更新 UAVs update_states(UAVs); end这里用了parfor实现并行计算毕竟多无人机系统各自求解自己的优化问题本来就是并行的过程。exchangeneighborinfo函数实现了通信拓扑的信息交换对应论文里的邻居节点数据共享机制。数据文件方面项目贴心地准备了几个预设场景。比如data/demo3.mat里包含5架无人机的初始编队配置。想切换场景只需要改一行代码load(./data/demo3.mat); % 改为demo2可切换场景如果想生成自己的测试数据得请出Formationcontrolmain/A5pre.m这个神器。这个脚本能自定义无人机数量、初始位置、通信拓扑等关键参数。举个栗子设置8架无人机的环形编队UAV_num 8; R 20; % 编队半径 theta linspace(0, 2*pi, UAV_num1); for i 1:UAV_num initial_pos(i,:) [R*cos(theta(i)), R*sin(theta(i))]; end生成数据后记得按规范格式保存后续才能在主程序里调用。文献复现 基于分布式模型预测控制的多架固定翼无人机的一致控制 运行文件“main” “main”是“CalAlluavs”和“ShowAlluavs”的组合 文件夹“data”中提供了几个无人机数据可以按照规则更改“main”中的一些代码使用它们。 如果要计算自己的数据则在文件夹“Formation_control_main”中提供了“A5pre”。 附带参考文献复现过程中有几个坑得特别注意通信延迟模拟代码里用addcommunicationdelay函数模拟网络延迟默认设置是20ms。如果实际跑的时候发现收敛速度异常可以适当调整这个值function msg add_delay(msg) delay_step ceil(0.02/T.dt); % 20ms延迟 msg.history circshift(msg.history, delay_step); end权重矩阵调整代价函数中的Q、R矩阵对控制效果影响很大。在initMPCparams函数里有个隐藏技巧——对角矩阵的元素不是完全对称的Q diag([1.2, 1.0, 0.8]); % 位置误差权重 R diag([0.1, 0.1]); % 控制量权重这种非对称设计是为了补偿固定翼无人机在不同轴向的动态特性差异和论文里的理论分析对应。可视化模块ShowAlluavs有个酷炫的3D轨迹回放功能。修改下面这个参数可以调整回放速度pause(0.02); % 数值越小播放越快跑完程序会生成两种图实时轨迹图和状态量时间序列图。特别是速度矢量的变化动画能直观看到无人机如何从随机初始状态逐步形成稳定编队。遇到算法不收敛的情况建议先检查通信拓扑矩阵是否正确。代码里用邻接矩阵表示通信关系比如环形拓扑对应ComTopo [0 1 0 1; 1 0 1 0; 0 1 0 1; 1 0 1 0]; % 4号无人机和1号相连这和论文里提到的有限通信范围模型是一致的。实际调试时可以先用全连接拓扑测试排除通信因素的问题。最后提一嘴理论联系实际的问题。代码里的动力学模型考虑了固定翼无人机的典型特性——不能悬停、有最小速度限制。这在状态更新函数里有明显体现function uav update_states(uav) % 空速下限处理 if uav.v 12 % 12m/s为失速速度 uav.v 12; end % 标准的二维运动学模型 uav.x(1) uav.x(1) uav.v * cos(uav.psi) * T.dt; uav.x(2) uav.x(2) uav.v * sin(uav.psi) * T.dt; end这种模型简化既保证了实时计算效率又抓住了固定翼平台的核心运动特征。想深入理解算法细节的话还是得配合原论文看代码特别是分布式MPC的耦合机制处理部分。
基于分布式模型的无人机群一致性控制:从“CalAlluavs”到“ShowAlluavs”的复现研究
发布时间:2026/5/23 23:51:10
文献复现 基于分布式模型预测控制的多架固定翼无人机的一致控制 运行文件“main” “main”是“CalAlluavs”和“ShowAlluavs”的组合 文件夹“data”中提供了几个无人机数据可以按照规则更改“main”中的一些代码使用它们。 如果要计算自己的数据则在文件夹“Formation_control_main”中提供了“A5pre”。 附带参考文献最近在复现一篇关于多无人机协同控制的论文题目挺有意思——《基于分布式模型预测控制的多架固定翼无人机的一致控制》。这种分布式架构的算法在实际工程中应用潜力很大尤其适合通信资源受限的场景。今天咱们直接上硬货聊聊怎么把论文里的算法跑起来顺便解剖代码结构。先看项目入口文件main.m。这个文件其实是把计算和展示两个功能模块拼装起来的。咱们可以把它拆解成两部分% 计算所有无人机状态 [AllUAVs, T] CalAlluavs(); % 保存数据备用 save(./data/formation.mat,AllUAVs,T); % 可视化结果 ShowAlluavs(AllUAVs, T);CalAlluavs函数负责核心控制算法的迭代。里面有个主循环每次迭代都处理各无人机的预测控制问题while T.time T.end % 分布式信息交换 UAVs exchange_neighbor_info(UAVs, ComTopo); % 每个无人机独立求解本地优化问题 parfor i 1:UAV_num UAVs(i) solve_local_MPC(UAVs(i)); end % 状态更新 UAVs update_states(UAVs); end这里用了parfor实现并行计算毕竟多无人机系统各自求解自己的优化问题本来就是并行的过程。exchangeneighborinfo函数实现了通信拓扑的信息交换对应论文里的邻居节点数据共享机制。数据文件方面项目贴心地准备了几个预设场景。比如data/demo3.mat里包含5架无人机的初始编队配置。想切换场景只需要改一行代码load(./data/demo3.mat); % 改为demo2可切换场景如果想生成自己的测试数据得请出Formationcontrolmain/A5pre.m这个神器。这个脚本能自定义无人机数量、初始位置、通信拓扑等关键参数。举个栗子设置8架无人机的环形编队UAV_num 8; R 20; % 编队半径 theta linspace(0, 2*pi, UAV_num1); for i 1:UAV_num initial_pos(i,:) [R*cos(theta(i)), R*sin(theta(i))]; end生成数据后记得按规范格式保存后续才能在主程序里调用。文献复现 基于分布式模型预测控制的多架固定翼无人机的一致控制 运行文件“main” “main”是“CalAlluavs”和“ShowAlluavs”的组合 文件夹“data”中提供了几个无人机数据可以按照规则更改“main”中的一些代码使用它们。 如果要计算自己的数据则在文件夹“Formation_control_main”中提供了“A5pre”。 附带参考文献复现过程中有几个坑得特别注意通信延迟模拟代码里用addcommunicationdelay函数模拟网络延迟默认设置是20ms。如果实际跑的时候发现收敛速度异常可以适当调整这个值function msg add_delay(msg) delay_step ceil(0.02/T.dt); % 20ms延迟 msg.history circshift(msg.history, delay_step); end权重矩阵调整代价函数中的Q、R矩阵对控制效果影响很大。在initMPCparams函数里有个隐藏技巧——对角矩阵的元素不是完全对称的Q diag([1.2, 1.0, 0.8]); % 位置误差权重 R diag([0.1, 0.1]); % 控制量权重这种非对称设计是为了补偿固定翼无人机在不同轴向的动态特性差异和论文里的理论分析对应。可视化模块ShowAlluavs有个酷炫的3D轨迹回放功能。修改下面这个参数可以调整回放速度pause(0.02); % 数值越小播放越快跑完程序会生成两种图实时轨迹图和状态量时间序列图。特别是速度矢量的变化动画能直观看到无人机如何从随机初始状态逐步形成稳定编队。遇到算法不收敛的情况建议先检查通信拓扑矩阵是否正确。代码里用邻接矩阵表示通信关系比如环形拓扑对应ComTopo [0 1 0 1; 1 0 1 0; 0 1 0 1; 1 0 1 0]; % 4号无人机和1号相连这和论文里提到的有限通信范围模型是一致的。实际调试时可以先用全连接拓扑测试排除通信因素的问题。最后提一嘴理论联系实际的问题。代码里的动力学模型考虑了固定翼无人机的典型特性——不能悬停、有最小速度限制。这在状态更新函数里有明显体现function uav update_states(uav) % 空速下限处理 if uav.v 12 % 12m/s为失速速度 uav.v 12; end % 标准的二维运动学模型 uav.x(1) uav.x(1) uav.v * cos(uav.psi) * T.dt; uav.x(2) uav.x(2) uav.v * sin(uav.psi) * T.dt; end这种模型简化既保证了实时计算效率又抓住了固定翼平台的核心运动特征。想深入理解算法细节的话还是得配合原论文看代码特别是分布式MPC的耦合机制处理部分。