【MATLAB代码与讲解5】多无人机分布式系统,协同路径规划与避碰。附代码运行结果

介绍
本课题研究动态环境、多无人机系统的协同路径规划与避碰防撞问题,是当前无人机集群控制领域的核心挑战之一。随着无人机技术的迅速发展,多无人机协同执行任务(如搜救、测绘、物流配送、军事侦察等)的需求日益增长。然而,在动态、复杂的三维空间中,如何使多架无人机高效协同、实时规避障碍与相互碰撞,是亟待解决的关键问题。
本课题主要研究内容包括:
- 多无人机系统建模:建立无人机运动学与动力学模型,描述其在三维空间中的飞行特性;
- 动态环境感知:对环境中的静态障碍物(建筑物、山体等)和动态障碍物(移动目标、其他飞行器)进行实时感知与建模;
- 协同路径规划算法:基于改进人工势场法(APF)、A* 算法及强化学习方法,设计多无人机的全局与局部协同路径规划框架;
- 防撞策略设计:引入优先级碰撞检测机制与速度障碍(VO)模型,保障无人机间安全间距;
- 仿真验证:在 MATLAB/Simulink 平台上对算法进行仿真验证,评估其路径效率、防撞成功率与计算实时性。
研究具有重要的理论价值与工程意义,可为未来无人机集群自主飞行系统的设计提供理论支撑与算法参考。
运行结果
在 MATLAB 仿真环境中,以 5 架无人机在含有动态障碍物的三维场景下执行协同任务为例,运行结果如下:
运行结果图示(部分):
- 三维路径规划图:各无人机轨迹以不同颜色显示,清晰展现协同避障过程:

- 无人机间最小距离曲线:几乎全程保持在安全距离(5m)以上,验证防撞策略有效性:

- 速度与加速度变化曲线:运动平滑,满足无人机动力学约束:

- 到目标的距离:

仿真结果表明,所提出的协同路径规划与防撞算法能够在动态复杂环境中稳定、高效地完成多无人机协同任务。
仿真场景设置:
- 无人机数量:5 架
- 空间范围:100m × 100m × 50m
- 静态障碍物:8 个
- 动态障碍物:3 个(随机运动)
- 任务目标:各无人机从初始位置出发,协同到达各自目标点
MATLAB 源代码
部分代码如下:
%% 动态环境下多无人机系统的协同路径规划与避碰仿真
% 基于改进人工势场法(APF)+ 速度障碍防撞
% 作者:matlabfilter(V同号,除前期达成一致外,付费咨询)
clc; clear; close all;
%% 参数初始化
num_uav = 5; % 无人机数量
space_range = [100, 100, 50]; % 空间范围 [x, y, z] (m)
safe_dist = 5.0; % 无人机间安全距离 (m)
obs_dist = 3.0; % 障碍物安全距离 (m)
dt = 0.1; % 仿真步长 (s)
max_iter = 500; % 最大迭代次数
max_vel = 10.0; % 最大速度 (m/s)
%% 无人机起始点与目标点设置
start_pos = [10,10,5; 10,50,5; 10,90,5; 50,10,5; 50,90,5];
goal_pos = [90,90,20; 90,50,20; 90,10,20; 50,90,20; 50,10,20];
%% 障碍物初始化(静态 + 动态)
static_obs = init_static_obstacles(); % 静态障碍物
dynamic_obs = init_dynamic_obstacles(); % 动态障碍物
%% 路径规划主循环
uav_pos = start_pos;
uav_vel = zeros(num_uav, 3);
paths = cell(num_uav, 1);
for i = 1:num_uav
paths{i} = uav_pos(i, :);
end
for iter = 1:max_iter
% 更新动态障碍物位置
dynamic_obs = update_dynamic_obs(dynamic_obs, dt);
all_obs = [static_obs; dynamic_obs];
for i = 1:num_uav
if norm(uav_pos(i,:) - goal_pos(i,:)) < 1.0
continue; % 已到达目标,跳过
end
% 计算人工势场合力
F_att = compute_attractive_force(uav_pos(i,:), goal_pos(i,:));
F_rep = compute_repulsive_force(uav_pos(i,:), all_obs, obs_dist);
% 无人机间防撞力
F_col = compute_collision_avoidance(i, uav_pos, safe_dist);
% 合力计算与速度更新
F_total = F_att + F_rep + F_col;
uav_vel(i,:) = uav_vel(i,:) + F_total * dt;
% 速度限幅
vel_norm = norm(uav_vel(i,:));
if vel_norm > max_vel
uav_vel(i,:) = uav_vel(i,:) / vel_norm * max_vel;
end
% 位置更新
uav_pos(i,:) = uav_pos(i,:) + uav_vel(i,:) * dt;
paths{i} = [paths{i}; uav_pos(i,:)];
end
% 检查任务完成
if all(vecnorm(uav_pos - goal_pos, 2, 2) < 1.0)
fprintf('所有无人机已到达目标!迭代次数:%d\n', iter);
break;
end
end
%% 结果可视化
plot_3d_paths(paths, static_obs, dynamic_obs, start_pos, goal_pos);
plot_min_distance(paths, safe_dist);
完整代码:https://blog.csdn.net/callmeup/article/details/160985742?spm=1011.2415.3001.5331
程序详解
整体框架
程序采用人工势场法(APF)为核心,结合动态障碍物实时感知与无人机间碰撞避免力,构建多无人机协同路径规划闭环控制框架。主要模块包括:
init_static_obstacles():初始化静态障碍物,返回包含位置与半径信息的矩阵;init_dynamic_obstacles():初始化动态障碍物,赋予随机初速度;update_dynamic_obs():每仿真步更新动态障碍物位置,支持边界反弹;compute_attractive_force():计算目标吸引力,距目标较近时采用线性衰减,防止目标附近震荡;compute_repulsive_force():计算障碍物斥力,仅对影响域内障碍物生效,提升计算效率;compute_collision_avoidance():基于速度障碍(VO)模型计算无人机间防撞力,引入优先级机制避免对称死锁。
关键算法说明
吸引力计算:
F a t t = − k a t t ⋅ ( p u a v − p g o a l ) F_{att} = -k_{att} \cdot (p_{uav} - p_{goal}) Fatt=−katt⋅(puav−pgoal)
当无人机距目标较远时采用二次势场,较近时切换为线性势场,有效抑制目标点附近的震荡现象。
斥力计算:
F r e p = k r e p ( 1 d − 1 d 0 ) 1 d 2 ⋅ n ^ , d < d 0 F_{rep} = k_{rep} \left(\frac{1}{d} - \frac{1}{d_0}\right) \frac{1}{d^2} \cdot \hat{n}, \quad d < d_0 Frep=krep(d1−d01)d21⋅n^,d<d0
其中 d d d 为无人机到障碍物距离, d 0 d_0 d0 为影响域半径, n ^ \hat{n} n^ 为远离障碍物的单位向量。
防撞力计算:
采用基于相对速度的碰撞预测机制,当预测两机将在未来 T T T 秒内发生碰撞时,施加沿相对位置方向的排斥力,并引入优先级系数避免双机同时闪避导致的对称锁死问题。
动态障碍物处理
动态障碍物每仿真步更新位置,程序在每次势场计算前同步获取最新位置,确保规划的实时性。障碍物速度模型支持匀速直线运动与随机漫游两种模式,可通过参数切换。
扩展说明
- 支持无人机数量自由配置(建议 3~10 架);
- 可替换为 A*、RRT* 等全局规划算法作为初始路径引导;
- 仿真输出包括三维轨迹图、无人机间距曲线、速度曲线等多种可视化结果;
- 代码结构模块化,便于后续集成强化学习策略或实机部署。
如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)