跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
MATLAB / OctaveAI算法

基于鳄鱼伏击算法的多无人机三维协同路径规划及 Matlab 实现

综述由AI生成针对复杂三维环境下多无人机协同作业需求,提出基于改进鳄鱼伏击算法(ICAOA)的路径规划方案。该算法模拟鳄鱼潜伏、包围、突袭行为,具备全局寻优能力强、收敛快特点。通过引入环境适配机制与避碰策略,实现了自定义数量无人机的协同路径生成。文中展示了地形地图、障碍物威胁区及规划轨迹的可视化效果,并提供了 Matlab 绘图函数实现细节,涵盖路径平滑处理与三维坐标映射,为电力巡检、应急救援等场景提供技术参考。

芝士奶盖发布于 2026/3/30更新于 2026/6/1120 浏览

多无人机三维协同路径规划:基于鳄鱼伏击算法

引言

在电力巡检、应急救援、地理测绘等复杂场景中,多无人机协同作业凭借效率高、覆盖范围广、任务容错性强等优势,逐渐取代单一无人机成为主流作业模式。三维路径规划作为多无人机协同的核心技术,需解决三大核心问题:一是复杂三维环境(如地形起伏、障碍物分布)下的路径可行性;二是多无人机间的避碰协同(避免飞行冲突);三是路径的全局最优性(兼顾飞行距离、能耗、时间成本)。

传统多无人机路径规划算法(如 PSO、GA、A*)存在协同机制复杂、三维环境适应性差、易陷入局部最优等缺陷。鳄鱼伏击算法(Crocodile Attack Optimization Algorithm, CAOA)是一种新型群智能优化算法,模拟鳄鱼群体的协同狩猎行为(潜伏、包围、突袭),具有全局寻优能力强、收敛速度快、参数设置简单等优势。本文针对多无人机三维路径规划需求,提出改进鳄鱼伏击算法(ICAOA),通过引入三维环境适配机制、多机协同避碰策略与动态目标权重,实现自定义数量无人机的高效协同路径规划。

核心技术原理剖析

原始鳄鱼伏击算法(CAOA)核心机制

CAOA 模拟鳄鱼群体在狩猎过程中的三大行为:

  1. 潜伏阶段:鳄鱼个体在水域中分散潜伏,通过感知猎物位置调整自身状态,对应算法的全局探索阶段;
  2. 包围阶段:鳄鱼群体根据猎物位置与自身分布,协同移动形成包围圈,对应算法的局部开发阶段;
  3. 突袭阶段:鳄鱼群体向猎物发起同步突袭,对应算法的最优解更新阶段。

CAOA 的数学建模如下:

文章配图

仿真结果展示

经过算法迭代优化后,我们可以得到满足约束条件的飞行轨迹。下图展示了不同视角下的路径规划效果,包括三维立体视图和二维俯视投影,能够直观反映无人机相对于地形的安全高度及避障情况。

文章配图

文章配图

文章配图

文章配图

文章配图

文章配图

核心绘图函数实现

为了将优化后的节点坐标映射到实际地形并可视化,我们编写了 PlotSolution 函数。该函数负责处理路径平滑、起点终点标记以及威胁区域(如禁飞区)的绘制。

%{
This function will plot:
- model with a terrain map and obstacles
- solutions with different views
%}
function [lenr1,lenr2]=PlotSolution(sol,model,CorStr,gca1,gca2)
% global model
smooth = 0.99;
    %% Plot 3D view
% PlotModel(model)
    x=sol.x;
    y=sol.y;
    z=sol.z;
    % Start location
    xs=model.start(1);
    ys=model.start(2);
    zs=model.start(3);
    % Final location
    xf=model.end(1);
    yf=model.end(2);
    zf=model.end(2);
    x_all = [xs x xf];
    y_all = [ys y yf];
    z_all = [zs z zf];
    N = size(x_all,2); % real path length
   % Path height is relative to the ground height
    for i = 1:N
        z_map = model.H(round(y_all(i)),round(x_all(i)));
        z_all(i) = z_all(i) + z_map;
    end
    % given data in a point matrix, xyz, which is 3 x number of points
    xyz = [x_all;y_all;z_all];
    [ndim,npts]=size(xyz);
    xyzp=zeros(size(xyz));
    for k=1:ndim
       xyzp(k,:)=ppval(csaps(1:npts,xyz(k,:),smooth),1:npts);
    end
    figure(gca1);
    PlotModel(model)
    lenr1=plot3(xyzp(1,:),xyzp(2,:),xyzp(3,:),CorStr,'LineWidth',2);
    % plot start point
    plot3(x_all(1),y_all(1),z_all(1),'ks','MarkerSize',7,'MarkerFaceColor','k');
    % plot target point
    plot3(x_all(N),y_all(N),z_all(N),'ko','MarkerSize',7,'MarkerFaceColor','k');
%     hold off;
    text(x_all(1),y_all(1),z_all(1),' 起点')
    text(x_all(N),y_all(N),z_all(N),' 终点')
    %% Plot top view
    figure(gca2);
    mesh(model.X,model.Y,model.H); % Plot the data
    colormap summer;            % Default color map.
    set(gca, 'Position', [0 0 1 1]); % Fill the figure window.
    axis equal vis3d on;        % Set aspect ratio and turn off axis.
    shading interp;             % Interpolate color across faces.
    material dull;              % Mountains aren't shiny.
%     camlight left;            % Add a light over to the left somewhere.
%     lighting gouraud;         % Use decent lighting.
    xlabel('\it\fontname{Times New Roman}x/m');
    ylabel('\it\fontname{Times New Roman}y/m');
    zlabel('\it\fontname{Times New Roman}z/m');
    hold on
    % Threats as cylinders
    threats = model.threats;
    threat_num = size(threats,1);
    for i = 1:threat_num
        threat = threats(i,:);
        threat_x = threat(1);
        threat_y = threat(2);
        threat_z = max(max(model.H))+1;  % choose z to be the highest peak
        threat_radius = threat(4);
        for j=1:3 
        % Define circle parameters:
        % Make an array for all the angles:
        theta = linspace(0, 2 * pi, 2000);
        % Create the x and y locations at each angle:
        x = threat_radius * cos(theta) + threat_x;
        y = threat_radius * sin(theta) + threat_y;
        % Need to make a z value for every (x,y) pair:
        z = zeros(1, numel(x)) + threat_z;
        % Do the plot:
        % First plot the center:
        plot3(threat_x, threat_y, threat_z, 'o', 'color', 'y', 'MarkerSize', 3, 'MarkerFaceColor','m');
        % Next plot the circle:
        plot3(x, y, z, '-', 'color', 'k', 'LineWidth', 1);
        % Repeat for a smaller radius
        threat_radius = threat_radius - 20;
        end
    end
    % plot path
    lenr2=plot3(xyzp(1,:),xyzp(2,:),xyzp(3,:),CorStr,'LineWidth',2);
    % plot start point
    plot3(x_all(1),y_all(1),z_all(1),'ks','MarkerSize',7,'MarkerFaceColor','k');
    % plot target point
    plot3(x_all(N),y_all(N),z_all(N),'ko','MarkerSize',7,'MarkerFaceColor','k');
    text(x_all(1),y_all(1),z_all(1),' 起点')
    text(x_all(N),y_all(N),z_all(N),'  终点')
    % Set top view
    view(0,90)
%     hold off;
    %% Plot side view
%     figure(gca3);
%     mesh(model.X,model.Y,model.H); % Plot the data
%     colormap summer;            % Default color map.
%     set(gca, 'Position', [0 0 1 1]); % Fill the figure window.
%     axis equal vis3d on;        % Set aspect ratio and turn off axis.
%     shading interp;             % Interpolate color across faces.
%     material dull;              % Mountains aren't shiny.
%     camlight left;              % Add a light over to the left somewhere.
%     lighting gouraud;           % Use decent lighting.
%     xlabel('\it\fontname{Times New Roman}x/m');
%     ylabel('\it\fontname{Times New Roman}y/m');
%     zlabel('\it\fontname{Times New Roman}z/m');
%     hold on
%     % plot path
%     plot3(xyzp(1,:),xyzp(2,:),xyzp(3,:),CorStr,'LineWidth',2);
%     % plot start point
%     plot3(x_all(1),y_all(1),z_all(1),'ks','MarkerSize',7,'MarkerFaceColor','k');
%     % plot target point
%     plot3(x_all(N),y_all(N),z_all(N),'ko','MarkerSize',7,'MarkerFaceColor','k');
% %     text(x_all(1),y_all(1),z_all(1),' Start')
% %     text(x_all(N),y_all(N),z_all(N),'  End')
%     view(90,0);
% %     hold off;
end

在实际运行中,注意代码中对威胁区域的处理,这里将其建模为圆柱体障碍物,确保规划路径不会穿越禁飞区。同时,利用 csaps 进行样条平滑,能有效减少无人机的机动频率,降低能耗。

目录

  1. 多无人机三维协同路径规划:基于鳄鱼伏击算法
  2. 引言
  3. 核心技术原理剖析
  4. 原始鳄鱼伏击算法(CAOA)核心机制
  5. 仿真结果展示
  6. 核心绘图函数实现
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C/C++依赖管理:Conan 深度解析与实战
  • FPGA 面试核心知识点梳理(一)
  • 无显卡如何运行 AI 绘画?Stable Diffusion 云端镜像部署指南
  • 科学机器学习中的物理信息神经网络:现状与展望
  • Gitee 代码托管入门指南
  • ESPHome Flasher 智能家居设备配置工具使用指南
  • C++ 模板与 String 类详解
  • 后仿真 SDF 反标常见 Warning 排查与处理指南
  • Windows Terminal 1.0 正式版发布,支持多配置文件与 GPU 加速
  • VS Code SSH 远程环境中 Copilot 无模型选项问题修复
  • 基于 Spring Cloud 与 AI 的分布式智能推荐系统构建
  • Python 桌面自动化操作实战:基于 pyautogui 与 win32com
  • GraphRAG:基于知识图谱的检索增强生成技术详解与实战
  • 前端表单验证策略与最佳实践
  • GitHub Copilot 接入第三方模型 API 配置实战
  • AI Agent 底层逻辑、工具链选型与代码实现
  • Redis Hash 数据结构详解:常用命令与性能注意事项
  • Java 入门:JDK 和 IDEA 下载安装及环境搭建
  • B 站:从二次元社区到 AI 创新孵化器的转型观察
  • Qt Creator 18.0.2 跨平台 IDE:支持 Qt、QML 与 C++

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online