基于控制障碍函数的多无人机编队动态避障控制方法研究,MATLAB代码

针对多无人机编队在动态障碍物环境下的协同飞行与安全避障问题,本文采用领航‑跟随编队控制控制障碍函数(CBF) 相结合的方法,设计一种分布式多无人机避障控制框架。系统以集群几何中心为虚拟领航点实现稳定编队,通过控制障碍函数将避障约束转化为二次规划(QP)问题,实现无人机对动态障碍物的实时规避;同时引入无人机间安全距离约束,保证单机自主避障且不干扰其他无人机飞行。仿真结果表明,所提方法可实现动态障碍物无碰撞运动、多无人机编队保持、无人机间自主避障,满足复杂动态环境下多机安全协同飞行要求。

1 引言

多无人机编队系统在巡检、侦察、物资运输等场景具有广泛应用前景。动态环境下,无人机需在保持编队队形的同时,自主规避移动障碍物与同伴无人机,对控制算法的安全性、鲁棒性与实时性提出较高要求。

传统避障方法多基于人工势场、速度障碍法等,存在局部最优、避障不严格等问题。控制障碍函数(CBF)可将安全约束以解析形式嵌入优化层,通过二次规划求解满足约束的最优控制量,实现严格安全避障

本文基于MATLAB搭建多无人机编队动态避障仿真平台,保留领航‑跟随编队结构,在原始代码框架上增强动态障碍物互避、单机自主避障、无人机间防碰撞等功能,并以可视化方式标记各无人机目标点,实现完整仿真验证。


2 系统模型与算法原理

2.1 无人机运动模型

采用单积分器模型描述无人机水平运动:
p˙=v\dot{\boldsymbol{p}} = \boldsymbol{v}p˙=v

其中:p=[x,y]T\boldsymbol{p}=[x,y]^\text{T}p=[x,y]T为无人机位置;v\boldsymbol{v}v为控制输入(速度),受最大速度约束 ∣v∣≤vmax|\boldsymbol{v}|≤v_{\text{max}}∣v∣≤vmax。

2.2 领航‑跟随编队模型

以无人机集群几何中心 作为虚拟领航点:
pcenter=1N∑i=1Npi\boldsymbol{p}{\text{center}} = \frac{1}{N}\sum{i=1}^N \boldsymbol{p}_ipcenter=N1i=1∑Npi

每架无人机相对领航点保持固定相对位置:
pi=pcenter+Δpi\boldsymbol{p}i = \boldsymbol{p}{\text{center}} + \Delta \boldsymbol{p}_ipi=pcenter+Δpi

通过编队控制律维持队形,同时跟随中心向目标点运动。

2.3 控制障碍函数(CBF)避障原理

定义安全函数:
h(p)=d(p,pobs)−Dsafe≥0h(\boldsymbol{p}) = d(\boldsymbol{p},\boldsymbol{p}{\text{obs}}) - D{\text{safe}} \ge 0h(p)=d(p,pobs)−Dsafe≥0

其中:ddd为欧氏距离;DsafeD_{\text{safe}}Dsafe为安全距离。

CBF要求安全条件渐进不变:
h˙≥−αh\dot{h} \ge -\alpha hh˙≥−αh

将约束线性化后得到:
Av≤b\boldsymbol{A}\boldsymbol{v} \le \boldsymbol{b}Av≤b

2.4 二次规划(QP)求解

以跟踪期望速度为目标,在避障约束下优化速度:
min⁡v12vTv−vaimTv\min_{\boldsymbol{v}} \frac{1}{2}\boldsymbol{v}^\text{T}\boldsymbol{v} - \boldsymbol{v}_{\text{aim}}^\text{T}\boldsymbol{v}vmin21vTv−vaimTv
s.t.Av≤b\text{s.t.} \quad \boldsymbol{A}\boldsymbol{v} \le \boldsymbol{b}s.t.Av≤b

求解得到平滑、可行、无碰撞的控制量。

2.5 动态障碍物运动模型

障碍物采用独立随机运动模式:

  1. 定时随机更新运动方向与速度;
  2. 触碰边界自动速度反弹;
  3. 实时检测与其他障碍物距离,小于安全距离则速度反向,实现障碍物间无碰撞。

3 控制系统设计

3.1 整体控制架构

系统分为三层:

  1. 编队层:虚拟领航点跟踪目标点,维持队形;
  2. 全局避障层:CBF约束动态障碍物,QP求解中心速度;
  3. 单机自主避障层:各无人机独立检测同伴距离,增加防碰撞约束,实现互不干扰。

3.2 动态障碍物无碰撞控制

对每个障碍物独立执行:

  1. 随机变向与速度更新;
  2. 边界反弹约束;
  3. 障碍物间距离检测;
  4. 碰撞预判→速度反向→位置更新。

3.3 多无人机自主避障控制

  1. 计算单机期望速度(编队+目标跟踪);
  2. 构建两类约束:
    • 约束1:避开所有动态障碍物;
    • 约束2:避开其他无人机,保持安全距离;
  3. 单机独立QP求解,实现自主避障且不干扰编队。

4 仿真实现与结果分析

4.1 仿真环境

  • 无人机数量:5 架
  • 动态障碍物数量:6 个
  • 运动范围:x∈[−4,9], y∈[−4,9]x∈[-4,9],\ y∈[-4,9]x∈[−4,9], y∈[−4,9]
  • 总仿真时间:25 s
  • 控制周期:0.05 s
bash 复制代码
clc; clear all; close all; warning off;

% 1. 无人机配置
UAV_NUM = 6;                  % 无人机数量
car_position = [-2, -3, -2, -1, -3,-1; 
                -2, -2, -3, -2.5, -0.5,0; 
                0, 0, 0, 0, 0,0];  

% 2. 障碍物初始配置(独立随机移动)
OBSTACLE_NUM = 6;             % 障碍物数量
obstacle_position = [0, 2, 2, 4, 1, 3; 
                     -1, 2, 4, 4, -2, 2.5];  

% 3. 独立动态障碍物核心参数(每个障碍物随机不同)
obstacle_v_max = 0.78;        % 最大速度
obstacle_dir_change_T = 10;   % 每隔N步随机变向
bound_x = [-4, 9];            % X边界
bound_y = [-4, 9];            % Y边界

% 4. 固定仿真参数
goal_position = [7; 7];       % 目标点
car_radius = 0.1;             % 无人机半径
center_radius = 0.05;         % 中心点半径
obstacle_radius = 0.3;        % 障碍物半径
safe_margin = 0.5;            % 安全裕度
Time = 25;                    % 总时间
T = 0.05;                     % 步长
alpha = 0.9;                  % 避障强度
speed_limit = 1;              % 无人机速度限幅
goal_threshold = 0.2;         
obstacle_safe_dist = 2*(obstacle_radius + safe_margin); % 障碍物间安全距离
uav_safe_dist = 0.6;          % 无人机之间安全距离(互不干扰)

4.2 实现流程

  1. 参数初始化:无人机/障碍物初始位置、安全半径、避障系数等;
  2. 图形初始化:绘制无人机、障碍物、轨迹、目标点(不同符号标记);
  3. 主循环:
    • 更新动态障碍物位置(无碰撞);
    • 编队控制与CBF避障;
    • 单机独立避障(无人机间防碰撞);
    • 位置更新与可视化刷新;
  4. 数据存储与曲线输出。

4.3 结果分析

  1. 编队保持:无人机在避障过程中稳定保持队形;
  2. 动态障碍物:障碍物独立移动、边界反弹、互不碰撞;
  3. 自主避障:每架无人机可自主规避障碍物与同伴,不干扰其他无人机;
  4. 可视化:各无人机终点以不同符号显示,轨迹清晰可辨。



5 结论

本文实现了一种基于CBF‑QP的多无人机编队动态避障控制方法,在保留原始领航‑跟随编队框架基础上,实现动态障碍物无碰撞运动、多机自主避障、无人机间互不干扰等功能。系统控制结构清晰、实时性强、安全性严格,可直接用于多无人机动态环境协同控制仿真验证与算法测试。

6、完整MATLAB代码见下方名片

相关推荐
AI科技星2 小时前
全尺度角速度统一:基于 v ≡ c 的纯推导与验证
c语言·开发语言·人工智能·opencv·算法·机器学习·数据挖掘
sunwenjian8862 小时前
Java进阶——IO 流
java·开发语言·python
波特率1152002 小时前
const关键字与函数的重载
开发语言·c++·函数重载
FL16238631292 小时前
[C#][winform]segment-anything分割万物部署onnx模型一键抠图演示
开发语言·c#
百锦再2 小时前
Java 并发编程进阶,从线程池、锁、AQS 到并发容器与性能调优全解析
java·开发语言·jvm·spring·kafka·tomcat·maven
条tiao条2 小时前
KMP 算法详解:告别暴力匹配,让字符串匹配 “永不回头”
开发语言·算法
leichangqing2 小时前
OpenClaw 学习系列之二:项目地图
openclaw
干啥啥不行,秃头第一名2 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
2301_807367193 小时前
C++中的解释器模式变体
开发语言·c++·算法