【无人机路径规划】无人机三维路径规划中蚁群算法、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

我用 Nexent 做了个 AI 大厨:基于 Nexent 知识库与 MCP 生态打造智能烹饪顾问实战

我用 Nexent 做了个 AI 大厨:基于 Nexent 知识库与 MCP 生态打造智能烹饪顾问实战

引言:厨房小白的自救之路 说实话,我是一个对做饭既向往又恐惧的人。向往的是那些短视频里色香味俱全的家常菜,恐惧的是每次打开冰箱,站在一堆食材面前完全不知道能做什么。我的做饭流程通常是这样的:先在 B 站搜教程视频,边看边暂停边做,一顿饭下来手机屏幕被油溅得惨不忍睹。更糟糕的是,我家还有一位对海鲜过敏的室友和一位需要控糖的老妈,每次做饭都得在脑子里疯狂计算"这个能不能放""那个谁不能吃"。 上个月,我在 GitHub 上看到了 Nexent——一个"零编排"的开源智能体平台,主打"一个提示词,无限种可能"。我当时脑子里就冒出一个想法:能不能做一个懂食材搭配、会根据季节推荐菜谱、还能照顾家人饮食禁忌的 AI 烹饪顾问? 说干就干。我花了一个周末的时间,在 Nexent 上亲手搭建了一个名叫"AI

网络安全:零暴露公网IP访问本地AI服务的一些方法分享,保障数据隐私!

网络安全:零暴露公网IP访问本地AI服务的一些方法分享,保障数据隐私!

如果我们选择本地部署AI模型(如LLaMA、Stable Diffusion)的核心动机之一是对数据隐私的绝对控制! 但当我们需要从外部网络访问这些服务时,就面临两难选择:要么牺牲便利性(只能在内网使用),要么牺牲安全性(将服务暴露至公网)。我这边介绍一种折中的解决方案,实现无需公网IP、零端口暴露的远程安全访问。 公网暴露的潜在威胁 将本地服务的端口通过路由器映射到公网(Port Forwarding),是常见的“暴力”解决方案。但这带来了显著风险: 1. 端口扫描与暴力破解:你的服务IP和端口会暴露在互联网的自动化扫描工具下,可能遭遇持续的登录尝试或漏洞利用攻击。 2. 服务漏洞利用:如果AI服务的Web界面或API存在未修复的漏洞,攻击者可以直接利用。 3. 家庭网络边界被突破:一旦攻击者通过该服务入侵成功,可能进一步渗透到家庭网络中的其他设备。 怎么解决:基于加密隧道的网络隐身 思路是:不让本地服务在公网“露面”,而是让外部访问者通过一条加密的“专属通道”直接进入内网。这可以通过基于零信任网络的P2P VPN工具实现。 具体实现:以Tailscale/Z

【深度解析】腾讯Claw三剑客横评:WorkBuddy、QClaw、CodeBuddy,3款AI Agent实测对比与选型指南

【深度解析】腾讯Claw三剑客横评:WorkBuddy、QClaw、CodeBuddy,3款AI Agent实测对比与选型指南

**摘要:**2026年AI Agent赛道最火的关键词——“养龙虾"🦞。腾讯一口气推出 WorkBuddy、QClaw、CodeBuddy 三款 Claw 系产品,分别切入企业办公、个人助手、AI编程三大场景。本文以腾讯10年程序员视角,从定位差异、核心能力、技术架构、实测体验、选型策略5个维度深度横评三款产品,帮你找到最适合自己的那只"虾”。 目录 * 前言 * 一、龙虾大战背景:为什么腾讯要出 3 只? * 1.1 OpenClaw 引爆 AI Agent 赛道 * 1.2 国内大厂入局图谱 * 二、WorkBuddy:企业级 AI 办公中台 🏢 * 2.1 产品定位 * 2.

企业级招聘数据采集实战:基于 Bright Data AI Studio 的自动化爬虫方案

企业级招聘数据采集实战:基于 Bright Data AI Studio 的自动化爬虫方案

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 一、 引言 二、Bright Data AI Studio 概览 2.1 AI Studio 是什么 2.2 AI Studio 的核心能力拆解 2.3 为什么说 AI Studio 更适合企业级场景 三、实战部分 3.1 实战目标与采集场景说明 3.2 准备工作 3.3 采集数据 3.4 扩展采集任务