基于 CBF 的多无人机编队动态避障路径规划研究,无人机及障碍物数量可以自定义修改,MATLAB代码

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

一、算法原理

1. 领航-跟随编队控制原理

设计思路 :以无人机集群几何中心为虚拟领航点,所有无人机作为跟随者保持相对位置。

  1. 计算集群中心位置:
    Pcenter=1N∑i=1NPuav,i\boldsymbol{P}{center} = \frac{1}{N}\sum{i=1}^N \boldsymbol{P}_{uav,i}Pcenter=N1i=1∑NPuav,i
  2. 每架无人机保持与中心的固定相对位置,实现队形稳定;
  3. 中心向总目标点匀速运动,带动整个编队移动。

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

CBF是实现安全避障的核心理论,保证无人机与障碍物/其他无人机始终大于安全距离:

  1. 定义安全函数:
    h(x)=d(x,xobs)−Dsafe≥0h(\boldsymbol{x}) = d(\boldsymbol{x},\boldsymbol{x}{obs}) - D{safe} \ge 0h(x)=d(x,xobs)−Dsafe≥0
    ddd为距离,DsafeD_{safe}Dsafe为安全距离,h≥0h \ge 0h≥0 表示无碰撞。
  2. 安全约束:h˙≥−αh\dot{h} \ge -\alpha hh˙≥−αh,保证系统渐进安全;
  3. 将避障需求转化为线性不等式约束,代入二次规划求解最优控制量。

3. 二次规划(QP)求解

目标:最小化控制量与期望速度的误差

约束:满足CBF避障安全条件
min⁡12vTv−vaimTv\min \frac{1}{2}\boldsymbol{v}^T\boldsymbol{v} - \boldsymbol{v}_{aim}^T\boldsymbol{v}min21vTv−vaimTv
s.t. Av≤bs.t. \ \boldsymbol{A}\boldsymbol{v} \le \boldsymbol{b}s.t. Av≤b

求解得到无碰撞、稳定平滑的无人机速度。

4. 动态障碍物运动原理

  1. 每个障碍物独立随机生成运动方向与速度;
  2. 到达边界自动速度反弹
  3. 实时检测与其他障碍物距离,小于安全距离则速度反向,实现无碰撞移动。

二、实现思路

MATLAB代码采用模块化设计,分为参数初始化、动态障碍物更新、无人机控制、可视化更新四大流程:

阶段1:初始化模块

  1. 配置无人机数量、初始位置、目标点;
  2. 配置动态障碍物数量、初始位置、运动参数;
  3. 定义安全距离、避障强度、速度限制等核心参数;
  4. 计算每架无人机的独立终点位置;
  5. 初始化图形界面,为不同无人机分配颜色+终点标记符号。

阶段2:动态障碍物更新(无碰撞移动)

循环遍历每个障碍物

  1. 独立计时,定时随机改变运动方向与速度;
  2. 预计算下一时刻位置,进行边界碰撞检测
  3. 与其他障碍物进行距离检测,小于安全距离则速度反向;
  4. 更新障碍物位置并刷新绘图。

阶段3:无人机编队+自主避障(核心)

  1. 虚拟领航点控制:计算集群中心向目标点的期望速度;
  2. 全局避障:CBF构建障碍物安全约束,QP求解中心速度;
  3. 单机独立避障 (新增功能):
    • 每架无人机单独检测其他无人机距离;
    • 构建无人机间防碰撞约束,独立QP求解速度;
    • 保证无人机互不干扰、无碰撞;
  4. 龙格-库塔法更新无人机位置,保证运动平滑。

阶段4:可视化与数据存储

  1. 实时更新无人机、障碍物位置图形;
  2. 绘制无人机轨迹,用不同标记显示各无人机终点;
  3. 绘制速度、编队误差、目标距离曲线;
  4. 存储无人机飞行轨迹数据。

三、约束条件

1. 移动障碍物不碰撞实现

  • 为每个障碍物设置独立运动逻辑,互不影响;
  • 移动前预检测与所有障碍物的距离;
  • 距离 < 安全距离 → 速度立即反向,从根源避免碰撞;
  • 边界触碰反弹,防止飞出仿真区域。

2. 无人机独立自主避障

  • 保留原编队结构,不改变整体协同逻辑
  • 为每架无人机增加单机避障层
    1. 检测周围其他无人机位置;
    2. 构建独立安全约束;
    3. 单独求解二次规划,获得自身无碰撞速度;
  • 实现:编队不乱、无人机不撞、自主绕避。

四、部分MATLAB代码及效果

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];  
       for k = 1:UAV_NUM
            % 基础编队速度
            v_base = center_v - 10*(car_position(1:2,k)-center_position-relative_center_position(:,k));
            
            % 构建单机独立避障约束:避开其他无人机
            A_uav = []; b_uav = [];
            for m = 1:UAV_NUM
                if m == k, continue; end
                dx = car_position(1,k) - car_position(1,m);
                dy = car_position(2,k) - car_position(2,m);
                d = norm([dx; dy]);
                safe_d = uav_safe_dist;
                if d < safe_d * 1.8  % 近距离才触发避障
                    A_uav = [A_uav; dx/d, dy/d];
                    b_uav = [b_uav; alpha*(d - safe_d)];
                end
            end
            
            % 单机独立求解速度(自主避障)
            if ~isempty(A_uav)
                v_opt = quadprog(eye(2), -v_base, -A_uav, b_uav, [], [], [], [], [], opt);
            else
                v_opt = v_base;
            end
            
            car_v(:,k) = max(min(v_opt, speed_limit), -speed_limit);
        end



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

相关推荐
炸膛坦客2 小时前
单片机/C/C++八股:(十六)C 中 malloc/free 和 C++ 中 new/delete 有什么区别?
c语言·开发语言·c++
@insist1232 小时前
软件设计师-组网技术基础:网络设备、传输介质与局域网核心协议
开发语言·网络·软考·软件设计师·软件水平考试
CSDN_Colinw2 小时前
C++中的工厂方法模式
开发语言·c++·算法
liulilittle2 小时前
范围随机算法实现
开发语言·c++·算法·lua·c·js
乌索普-2 小时前
基于vue2的简易购物车
开发语言·前端·javascript
走粥2 小时前
使用indexOf查找对象结合Pinia持久化引发的问题
开发语言·前端·javascript
csbysj20202 小时前
Python break 语句详解
开发语言
2401_857918292 小时前
C++中的访问者模式实战
开发语言·c++·算法
格林威2 小时前
工业相机图像高速存储(C++版):RAID 0 NVMe SSD 阵列暴力提速,附海康实战代码!
开发语言·c++·人工智能·数码相机·计算机视觉·工业相机·堡盟相机