基于A*算法的无人机三维动态避障路径规划设计,MATLAB编程实现

基于A*算法的无人机三维动态避障路径规划设计,MATLAB编程实现

基于A* 算法的无人机三维路径规划算法,可以动态避障,自己可以规定设计障碍物位置,MATLAB编程实现。

无人机在三维空间耍杂技这事儿,靠的就是路径规划的真功夫。今天咱们来聊个硬核玩法——基于MATLAB实现的A*算法三维动态避障系统。别被专业名词吓到,咱边撸代码边解密。

先整点刺激的,直接上三维地图生成代码:

% 生成三维障碍立方体 obstacles = [ 20,30, 5,15, 0,10; 50,60,25,35,15,25; 80,90, 8,18,30,40 ]; % 可视化障碍物 hold on; for i =1:size(obstacles,1) plotcube([obstacles(i,2)-obstacles(i,1)... obstacles(i,4)-obstacles(i,3)... obstacles(i,6)-obstacles(i,5)],... [obstacles(i,1) obstacles(i,3) obstacles(i,5)],... 0.5,[1 0 0]); end

这段代码造了三个悬浮在空中的红色立方体障碍物。plotcube函数参数分别是长宽高、起始坐标、透明度和颜色。想自定义障碍物?直接改obstacles矩阵就行,每行六个数字分别表示X起止、Y起止、Z起止范围。

核心的A*算法节点结构得玩点花样:

classdef Node < handle properties x; y; z; gCost; hCost; parent; end methods function obj = Node(x,y,z) obj.x = x; obj.y = y; obj.z = z; end function fCost = getFCost(obj) fCost = obj.gCost + obj.hCost; end end end

这里用面向对象搞了个三维节点,每个节点存着三维坐标、实际代价gCost(已走路程)、预估代价hCost(到终点的直线距离)。重点是这个getFCost方法,A*选路就靠fCost=g+h这个值来决策,相当于导航系统的"预计到达时间"。

路径搜索主循环里有段关键代码:

while ~isempty(openList) current = openList(1); % 找fCost最小的节点 for i = 1:length(openList) if openList(i).getFCost() < current.getFCost() || ... (openList(i).getFCost() == current.getFCost() && ... openList(i).hCost < current.hCost) current = openList(i); end end % 遇到障碍物就动态更新 if checkCollision(current, obstacles) updateObstacles(); % 动态更新障碍物位置 continue; end % 此处省略邻居节点生成代码... end

这个checkCollision函数暗藏玄机——它实时检测当前节点是否与新出现的障碍物碰撞。一旦发现危险,立即调用updateObstacles更新障碍物信息,相当于给无人机装了急刹系统。注意这里continue直接跳过当前节点,算法会自动寻找新路径。

来看看动态避障的碰撞检测:

function collision = checkCollision(node, obstacles) safetyMargin = 3; % 安全距离 for i = 1:size(obstacles,1) if node.x >= (obstacles(i,1)-safetyMargin) && ... node.x <= (obstacles(i,2)+safetyMargin) && ... node.y >= (obstacles(i,3)-safetyMargin) && ... node.y <= (obstacles(i,4)+safetyMargin) && ... node.z >= (obstacles(i,5)-safetyMargin) && ... node.z <= (obstacles(i,6)+safetyMargin) collision = true; return; end end collision = false; end

这里的安全距离参数就像无人机的"怕死程度",设置3米意味着离障碍物3米开外就判定危险。实际飞行时可以配合传感器数据动态调整这个值,雨天就调大点,晴朗天调小点。

跑完算法后,用这个三维可视化代码展示成果:

path = reconstructPath(current); plot3(path(:,1), path(:,2), path(:,3), 'b-o', 'LineWidth',2); plot3(start(1),start(2),start(3),'gp','MarkerSize',15); plot3(goal(1),goal(2),goal(3),'rh','MarkerSize',15); view(3); axis equal; grid on;

蓝色折线就是规划的路径,绿色五角星是起点,红色六角星是终点。按住图形旋转按钮可以看到三维路径如何巧妙绕过障碍物,有种看无人机跳街舞的感觉。

想要路径更丝滑?在A*的邻居生成策略里动手脚:

neighborSteps = [ -1,-1,-1; 0,-1,-1; 1,-1,-1; -1,0,-1; 0,0,-1; 1,0,-1; ... % 此处省略其他25种组合 1, 1, 1 ]; % 总共26个方向 stepSize = 5; % 搜索步长 neighbors = []; for i = 1:size(neighborSteps,1) newX = currentNode.x + neighborSteps(i,1)*stepSize; newY = currentNode.y + neighborSteps(i,2)*stepSize; newZ = currentNode.z + neighborSteps(i,3)*stepSize; % 边界检查... end

这个邻居生成策略允许无人机斜着飞,甚至上下盘旋。但26个方向全遍历太费算力,实战中可以精简为14个主要方向,既保持路径灵活性又不拖慢速度。

最后在MATLAB命令行这么调用:

% 设置起点终点 startPos = [5, 5, 5]; goalPos = [95, 95, 95]; % 运行A*路径规划 [path, obs] = astar3D(startPos, goalPos, obstacles); % 动态演示 animateDrone(path, obs);

运行后会看到无人机像跳障碍赛一样,在三维障碍物之间穿梭。按R键可以随机生成新障碍物,算法会立即重新规划路线,视觉效果堪比科幻大片。

这套系统有个彩蛋功能——在算法运行中,直接拖动MATLAB图窗里的障碍物,路径会实时更新。这得益于MATLAB的图形对象回调机制,实现了真正意义上的动态交互。想体验这个功能?记得在代码里加上set(gcf,'WindowButtonDownFcn',@dragObstacle)之类的回调函数。

Read more

小显存福音:LLaMA Factory+QLoRA微调70B模型实测

小显存福音:LLaMA Factory+QLoRA微调70B模型实测 对于许多研究者来说,想要在消费级显卡上实验大参数模型一直是个难题。常规方法往往连模型加载都做不到,更别提进行微调了。本文将介绍如何使用LLaMA Factory框架结合QLoRA技术,在有限显存条件下实现对70B大模型的微调。这类任务通常需要GPU环境,目前ZEEKLOG算力平台提供了包含该镜像的预置环境,可快速部署验证。 为什么需要LLaMA Factory+QLoRA 大模型微调一直是AI研究的热点,但面临两个主要挑战: * 显存需求大:70B参数的模型在FP16精度下就需要140GB显存,远超消费级显卡容量 * 技术门槛高:需要手动实现量化、梯度检查点等优化技术 LLaMA Factory框架通过以下方式解决了这些问题: * 内置QLoRA技术:通过低秩适配器大幅减少可训练参数 * 自动优化:集成量化、梯度检查点等显存优化技术 * 开箱即用:预置多种微调方法和数据集 环境准备与镜像部署 在开始前,我们需要准备一个支持CUDA的GPU环境。以下是具体步骤: 1. 选择包含LLaM

Java在AI时代的崛起:从传统机器学习到AIGC的全栈解决方案

Java在AI时代的崛起:从传统机器学习到AIGC的全栈解决方案

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[[email protected]] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? * 专栏导航: 码农阿豪系列专栏导航 面试专栏:收集了java相关高频面试题,面试实战总结🍻🎉🖥️ Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用🚀🔧💻 Redis专栏:Redis从零到一学习分享,经验总结,案例实战💐📝💡 全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有🤸🌱🚀 目录 * Java在AI时代的崛起:从传统机器学习到AIGC的全栈解决方案 * 一、Java AI生态概览:多样化的技术选择 * 1.1 深度学习框架:接轨主流AI技术 * Deep Java Library

LLaMA Factory全解析:让大模型“改装”像组装电脑一样简单

引言:当每个人都能定制自己的专属AI 朋友们,想象一下这样的场景:你拿到了一台性能强大的通用电脑(好比ChatGPT、LLaMA这样的通用大模型),但它运行的是标准操作系统,装的是通用软件。现在,你需要它变成一台专业的视频剪辑工作站,或者一台金融数据分析服务器——该怎么办? 传统方法是“重装系统”(全量微调):耗时耗力,需要专业团队,而且可能把原来好用的功能搞坏。 现代方法是“加装专业配件”(参数高效微调):不改变核心系统,只增加特定的硬件模块或软件插件。 今天我要介绍的LLaMA Factory,就是大模型领域的“专业改装工具箱”。它让微调百亿参数的大模型,变得像给电脑加内存、装显卡一样简单可控。无论你是只有一张消费级显卡的个人开发者,还是需要定制企业级AI的团队,这个工具都可能改变你的工作方式。 技术原理:理解LLaMA Factory的“增效不增负”哲学 核心理念:为什么我们不需要“重装整个系统”? 要理解LLaMA Factory的价值,首先要明白大模型微调的一个关键发现:当大模型适应新任务时,只需要调整很小一部分参数就够了。 一个生动的类比: 假设你是一位精

QtCreator配置AI辅助编程插件github copilot保姆级教程

QtCreator配置AI辅助编程插件github copilot保姆级教程

文章目录 * 概要 * 配置流程 概要 Free版‌免费使用,每月限额 2000 次代码补全 + 50 次聊天交互‌集成于 VS Code,支持跨文件编辑、终端协助及自定义指令‌ ‌ Pro版‌‌个人用户‌:10 美元/月 或 100 美元/年‌ ‌特殊群体‌:学生/教师/热门开源维护者可免费使用 Pro 版‌ ‌ Business版‌19 美元/月/用户,按月计费‌面向组织或企业中的团队订阅‌ ‌ Enterprise版‌39 美元/月/用户,按月计费‌企业可按需为不同组织分配 Business 或 Enterprise 订阅‌ 官方地址