【无人机路径规划】无人机三维路径规划中蚁群算法、A* 与 RRT* 算法对比(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥
💥💥💞💞欢迎来到本博客❤️❤️💥💥



🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。



⛳️座右铭:行百里者,半于九十。



📋📋📋本文目录如下:🎁🎁🎁

💥1 概述

随着无人机技术的快速发展,其在军事侦察、物流配送、环境监测等众多领域的应用日益广泛。在实际应用场景中,无人机需要在复杂的三维空间内规划出一条安全、高效的飞行路径,以避开障碍物并满足任务需求。蚁群算法、A* 算法和 RRT* 算法是目前无人机三维路径规划中常用的算法,它们各自具有独特的原理和特点,对其进行详细对比有助于根据具体应用场景选择最合适的算法。

蚁群算法 蚁群算法是一种模拟蚂蚁觅食行为的启发式优化算法。蚂蚁在寻找食物的过程中,会在走过的路径上释放信息素,信息素浓度越高的路径对其他蚂蚁的吸引力越大。在无人机路径规划中,将三维空间划分为多个节点,每只“虚拟蚂蚁”从起点开始,根据信息素浓度和启发式信息选择下一个节点,不断迭代更新信息素浓度,最终找到一条从起点到终点的最优路径。

A* 算法 A* 算法是一种基于图搜索的路径规划算法,它结合了 Dijkstra 算法的广度优先搜索和贪心最佳优先搜索的特点。A* 算法通过定义一个评估函数f(n)=g(n)+h(n),其中 (g(n)) 是从起点到节点 (n) 的实际代价,(h(n)) 是从节点 (n) 到终点的启发式估计代价。算法从起点开始,不断扩展具有最小 (f(n)) 值的节点,直到找到终点或遍历完所有可达节点。

RRT* 算法 RRT* 算法是快速随机树算法(RRT)的改进版本,它通过在三维空间中随机采样来构建一棵搜索树。从起点开始,每次随机选择一个采样点,然后在搜索树中找到距离该采样点最近的节点,将其连接到采样点并扩展树。RRT* 算法在 RRT 的基础上,增加了路径优化机制,通过重新连接节点和修剪树枝,不断优化树的结构,最终得到一条接近最优的路径。

路径质量 -蚁群算法:通过信息素的更新和积累,能够在多次迭代后找到全局较优的路径。但由于信息素的更新过程相对缓慢,在复杂环境下可能陷入局部最优解,导致路径质量下降。A* 算法:在有明确启发式函数的情况下,能够保证找到最优路径。但启发式函数的选择对算法性能影响较大,如果选择不当,可能会增加搜索时间。RRT* 算法:能够在复杂的三维环境中快速找到一条可行路径,并且随着采样点数的增加,路径质量会逐渐提高,趋近于全局最优解。但在采样点数有限的情况下,路径可能存在一定的冗余。

一、无人机三维路径规划的核心挑战

三维路径规划需同时满足多目标优化与物理约束:

  1. 多目标冲突:路径长度、避障安全性、能耗(如电池续航)、飞行时间需协同优化 。
  2. 动态障碍物:城市环境中需实时避让建筑物、其他无人机等移动障碍 。
  3. 三维物理约束
    • 最大转向角(通常≤30°)与爬升角(±25°) 
    • 最小转弯半径(如2m)和最短直线修正段 
    • 航迹总长度限制(L≤Lmax⁡L≤Lmax​) 
  4. 计算效率:三维空间搜索复杂度指数级增长,传统A*算法实时性不足 。

二、算法原理与特性对比

1. 蚁群算法(ACO)
  • 三维实现
    • 环境建模:采用三维栅格法,沿高度分层划分空间 。
    • 信息素更新:路径选择概率公式引入启发式因子(如距离、障碍物密度) 。
  • 优势
    • 全局优化能力强,避免局部最优 。
    • 并行计算效率高,适合复杂障碍物环境 。
  • 局限
    • 收敛速度慢,前期随机搜索效率低 。
    • 动态环境中信息素更新滞后,响应速度不足 。

原理:模拟蚂蚁觅食行为,通过信息素正反馈机制(分布式计算、自组织、正反馈)引导路径优化 

2. A*算法
  • 原理:启发式搜索(f(n)=g(n)+h(n),结合实际代价g(n)(起点到当前点)与预估代价h(n)(当前点到终点) 。
  • 三维实现
    • 栅格化环境,扩展26邻域节点(允许三维斜向移动) 。
    • 改进策略:融合贝塞尔曲线平滑路径,解决节点处姿态突变问题 。
  • 优势
    • 完备性且最优性(启发函数可采纳时) 。
  • 局限
    • 计算复杂度高:三维网格节点数激增,192³网格即可致内存溢出 。
    • 仅适用于静态环境,动态障碍需完全重新规划 。

路径长度最短(实验均值33.7m,优于RRT*的35.1m) 。

3. RRT*算法
  • 原理:基于随机采样与渐进优化,通过重选父节点和剪枝缩短路径 。
  • 改进机制
    • 正态分布采样:替代均匀随机采样,加速收敛 。
    • 三角不等式剪枝:删除冗余节点,路径长度缩减50% 。
  • 优势
    • 实时性最佳:改进版计算耗时仅为传统RRT*的20% 。
    • 动态环境适应性:实时更新搜索树,避让移动障碍 。
  • 局限
    • 初始路径曲折,需后处理平滑 。

路径长度稳定性差,方差高于A* 。


三、性能指标定量对比

表1:算法核心指标对比
指标蚁群算法A*算法RRT*算法
路径长度(km)2.75–3.20 2.83(最短)2.90–3.50 
计算时间(s)3.29–5.60 0.50(静态最优)0.05(改进版)
动态障碍响应滞后(信息素更新慢)需完全重规划实时更新树结构
路径平滑性中(依赖参数调优)低(需后处理)(渐进优化)
内存消耗中(分布式计算)高(存储所有节点)低(树结构)

关键数据解读
  • 能耗对比:改进蚁群算法能耗(64.08 J)低于A*(72.93 J),因路径平滑减少姿态调整 。

安全性:A*在风险路径长度(0.15m)与危险路径长度(0.05m)上最优,因精确栅格碰撞检测 。


四、环境适应性分析

  1. 静态复杂环境
    • A*:规则障碍物场景下路径最短,但计算耗时随复杂度飙升 。
    • 蚁群算法:栅格建模灵活,适合非结构化地形,但收敛速度慢 。
    • RRT*:正态采样改进后,节点数减少85%,适合大型三维地图 。
  2. 动态障碍环境
    • 蚁群算法:引入动态惩罚机制(AS-N),避障路径长度缩短15% 。
    • A*:需融合动态窗口法(DWA)提升实时性 。

RRT*:实时采样避障成功率100% 。


五、应用场景推荐

场景推荐算法依据
电力巡检(静态精细规划)A*路径最短、能耗最低 
城市物流(动态障碍密集)RRT*实时性高,动态避障能力强 
农业植保(大范围非结构)改进蚁群能耗低、适应复杂地形 
实时搜救(未知环境)RRT + 蚁群*RRT*快速生成初始路径,蚁群优化全局安全 

六、总结与展望

  • 算法融合趋势
    • A* + 贝塞尔曲线:解决路径平滑问题 。
    • RRT* + 梯度优化:提升初始路径质量 。
    • 蚁群 + 动态惩罚机制:增强动态响应 。
  • 未来方向:轻量化神经网络加速在线规划,强化学习优化多目标权重 。
本报告依据实验数据与学术文献对比分析,可为无人机三维路径规划算法选型提供理论支撑与工程参考。具体应用需结合场景约束(如实时性要求、硬件算力)综合权衡。

📚2 运行结果

主函数代码:

 %Wishing you to encourage yourself! clc;clear;close all %载入函数路径 addpath(genpath('./ACO3D')) addpath(genpath('./Astar3D')) addpath(genpath('./RRT3D')) addpath(genpath('./Evaluation')) Algorithm_name={'ACO','Astar','RRT'}; %地图规模在Makemap3D函数中设置 map = Makemap3D;%地图 source=[10 10 1]; %起点 goal=[450 400 50];%终点 max_item = 1000;%最大迭代次数 comparative_data ={};%记录需要比较的内容 Global_data={}; Straight_distance = sqrt(sum((source-goal).^2, 2));%直线距离 fprintf('起点到终点的直线距离: \n%d\n\n',Straight_distance); Global_data(1,end+1) = {num2str(source)}; Global_data(1,end+1) = {num2str(goal)}; Global_data(1,end+1) = {Straight_distance}; t1=clock; %% ********蚁群算法******************************** figure(1) plot3DMap(map); text(source(1),source(2),source(3),'起点','color','r'); text(goal(1),goal(2),goal(3),'终点','color','r'); scatter3(source(1),source(2),source(3),"filled","g"); scatter3(goal(1),goal(2),goal(3),"filled","b"); title('ACO'); popNum = 10; %蚁群数量 tic [aco_path,aco_cost,aco_Number_of_searches,aco_Number_of_successful_searches,aco_Number_of_failed_searches] = aco(source,goal,map,popNum);%蚁群主函数 aco_time = toc; fprintf('ACO 历时:%0.3f 秒\n',aco_time); hold on plot3(aco_path(:,1),aco_path(:,2),aco_path(:,3),'LineWidth',2,'color','r'); view(-30,30); fprintf('ACO 路径长度:%d \n\n',aco_cost); [aco_max_turning_angle,aco_turning_num,aco_index] = Max_turning_angle(aco_path,1); comparative_data(1,end+1) = {aco_time}; comparative_data(2,end) = {aco_cost}; comparative_data(3,end) = {size(aco_path,1)}; comparative_data(4,end) = {aco_Number_of_searches}; comparative_data(5,end) = {aco_Number_of_successful_searches}; comparative_data(6,end) = {aco_Number_of_successful_searches/aco_Number_of_searches}; comparative_data(7,end) = {aco_max_turning_angle}; comparative_data(8,end) = {aco_turning_num}; %% ************Astar******************************** figure(2) plot3DMap(map); text(source(1),source(2),source(3),'起点','color','r'); text(goal(1),goal(2),goal(3),'终点','color','r'); scatter3(source(1),source(2),source(3),"filled","g"); scatter3(goal(1),goal(2),goal(3),"filled","b"); title('Astar'); tic%计算运行时间 [astar_path,astar_cost,astar_Number_of_searches,astar_Number_of_successful_searches,astar_Number_of_failed_searches] = Astar_main(source,goal,map,max_item);%A*主函数 astar_time = toc; fprintf('Astar 历时:%0.3f 秒\n',astar_time); plot3(astar_path(:,1),astar_path(:,2),astar_path(:,3),'LineWidth',2,'color','r'); view(-30,30); fprintf('Astar 路径长度:%d\n\n',astar_cost); [astar_max_turning_angle,astar_turning_num,astar_index] = Max_turning_angle(astar_path,1); %记录展示数据 comparative_data(1,end+1) = {astar_time}; comparative_data(2,end) = {astar_cost}; comparative_data(3,end) = {size(astar_path,1)}; comparative_data(4,end) = {astar_Number_of_searches}; comparative_data(5,end) = {astar_Number_of_successful_searches}; comparative_data(6,end) = {astar_Number_of_successful_searches/astar_Number_of_searches}; comparative_data(7,end) = {astar_max_turning_angle}; comparative_data(8,end) = {astar_turning_num}; %% ****************RRT******************************** % subplot(1,3,3); figure(3) plot3DMap(map); text(source(1),source(2),source(3),'起点','color','r'); text(goal(1),goal(2),goal(3),'终点','color','r'); scatter3(source(1),source(2),source(3),"filled","g"); scatter3(goal(1),goal(2),goal(3),"filled","b"); title('RRT'); step = 10;%设置步长 tic [rrt_path,rrt_cost,rrt_Number_of_searches,rrt_Number_of_successful_searches,rrt_Number_of_failed_searches] = RRT_main(source,goal,map,step);%RRT主函数 rrt_time = toc; fprintf('RRT 历时:%0.3f 秒\n',rrt_time); plot3(rrt_path(:,1),rrt_path(:,2),rrt_path(:,3),'LineWidth',2,'color','r'); view(-30,30); fprintf('RRT 路径长度:%d \n\n',rrt_cost); [rrt_max_turning_angle,rrt_turning_num,rrt_index] = Max_turning_angle(rrt_path,1); %记录搜索覆盖范围 comparative_data(1,end+1) = {toc}; comparative_data(2,end) = {rrt_cost}; comparative_data(3,end) = {size(rrt_path,1)}; comparative_data(4,end) = {rrt_Number_of_searches}; comparative_data(5,end) = {rrt_Number_of_successful_searches}; comparative_data(6,end) = {rrt_Number_of_successful_searches/rrt_Number_of_searches}; comparative_data(7,end) = {rrt_max_turning_angle}; comparative_data(8,end) = {rrt_turning_num}; %% 打印运行时间 t2=clock; fprintf('程序总运行时间:%0.3f 秒\n\n', etime(t2,t1)); %计算最优项 ,其中展示表格顺序为aco、astar、rrt comparative_data(1,end+1) = {Algorithm_name{Min_value(comparative_data{1,1},comparative_data{1,2},comparative_data{1,3})}}; for i = 2:size(comparative_data,1) %求每行的最小值 comparative_data(i,end) = {Algorithm_name{Min_value(comparative_data{i,1},comparative_data{i,2},comparative_data{i,3})}}; end %求最大值 comparative_data(6,end) = {Algorithm_name{Max_value(comparative_data{6,1},comparative_data{6,2},comparative_data{6,3})}}; %展示比较结果 Show_Comparative_result(Global_data,comparative_data) %三种算法展示到一张图中 figure(4) plot3DMap(map); text(source(1),source(2),source(3),'起点','color','r'); text(goal(1),goal(2),goal(3),'终点','color','r'); h1 = plot3(aco_path(:,1),aco_path(:,2),aco_path(:,3),'LineWidth',2,'color','r'); h2 = plot3(astar_path(:,1),astar_path(:,2),astar_path(:,3),'LineWidth',2,'color','k'); h3 = plot3(rrt_path(:,1),rrt_path(:,2),rrt_path(:,3),'LineWidth',2,'color','m'); legend([h1,h2,h3],'蚁群','A*','RRT') %legend("boxoff") 

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]陆璐,孙昱浩,孙启光.基于改进蚁群算法的无人机三维路径规划研究[J].广东交通职业技术学院学报,2025,24(01):46-51+114.

[2]温佳霖,梁丰,许雯.基于改进蚁群算法的无人机三维路径规划研究[J].现代信息科技,2023,7(20):84-87+91.DOI:10.19850/j.cnki.2096-4706.2023.20.018.

🌈4 Matlab代码实现

图片

Read more

解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式

解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式

🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是Docker 2、什么是Ollama 二、准备工作 1、操作系统 2、镜像准备 三、安装 1、安装Docker 2、启动Ollama 3、拉取Deepseek大模型 4、启动Deepseek  一、引言 1、什么是Docker Docker:就像一个“打包好的App” 想象一下,你写了一个很棒的程序,在自己的电脑上运行得很好。但当你把它发给别人,可能会遇到各种问题: * “这个软件需要 Python 3.8,但我只有 Python 3.6!

By Ne0inhk
深挖 DeepSeek 隐藏玩法·智能炼金术2.0版本

深挖 DeepSeek 隐藏玩法·智能炼金术2.0版本

前引:屏幕前的你还在AI智能搜索框这样搜索吗?“这道题怎么写”“苹果为什么红”“怎么不被发现翘课” ,。看到此篇文章的小伙伴们!请准备好你的思维魔杖,开启【霍格沃茨模式】,看我如何更新秘密的【知识炼金术】,我们一起来解锁更加刺激的剧情!友情提醒:《《《前方高能》》》 目录 在哪使用DeepSeek 如何对提需求  隐藏玩法总结 几个高阶提示词 职场打工人 自媒体创作 电商实战 程序员开挂 非适用场地 “服务器繁忙”如何解决 (1)硅基流动平台 (2)Chatbox + API集成方案 (3)各大云平台 搭建个人知识库 前置准备 下载安装AnythingLLM 选择DeepSeek作为AI提供商 创作工作区 导入文档 编辑  编辑 小编寄语 ——————————————————————————————————————————— 在哪使用DeepSeek 我们解锁剧情前,肯定要知道在哪用DeepSeek!咯,为了照顾一些萌新朋友,它的下载方式我放在下面了,拿走不谢!  (1)

By Ne0inhk
【AI大模型】DeepSeek + 通义万相高效制作AI视频实战详解

【AI大模型】DeepSeek + 通义万相高效制作AI视频实战详解

目录 一、前言 二、AI视频概述 2.1 什么是AI视频 2.2 AI视频核心特点 2.3 AI视频应用场景 三、通义万相介绍 3.1 通义万相概述 3.1.1 什么是通义万相 3.2 通义万相核心特点 3.3 通义万相技术特点 3.4 通义万相应用场景 四、DeepSeek + 通义万相制作AI视频流程 4.1 DeepSeek + 通义万相制作视频优势 4.1.1 DeepSeek 优势 4.1.2 通义万相视频生成优势 4.2

By Ne0inhk
【DeepSeek微调实践】DeepSeek-R1大模型基于MS-Swift框架部署/推理/微调实践大全

【DeepSeek微调实践】DeepSeek-R1大模型基于MS-Swift框架部署/推理/微调实践大全

系列篇章💥 No.文章01【DeepSeek应用实践】DeepSeek接入Word、WPS方法详解:无需代码,轻松实现智能办公助手功能02【DeepSeek应用实践】通义灵码 + DeepSeek:AI 编程助手的实战指南03【DeepSeek应用实践】Cline集成DeepSeek:开源AI编程助手,终端与Web开发的超强助力04【DeepSeek开发入门】DeepSeek API 开发初体验05【DeepSeek开发入门】DeepSeek API高级开发指南(推理与多轮对话机器人实践)06【DeepSeek开发入门】Function Calling 函数功能应用实战指南07【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:本地部署与API服务快速上手08【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:Web聊天机器人部署指南09【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:基于vLLM 搭建高性能推理服务器10【DeepSeek部署实战】基于Ollama快速部署Dee

By Ne0inhk