news 2026/4/23 10:47:08

Matlab路径规划算法代码 传统A star算法源码+详细注释 可固定地图和起点终点 适合初...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Matlab路径规划算法代码 传统A star算法源码+详细注释 可固定地图和起点终点 适合初...

Matlab路径规划算法代码 传统A star算法源码+详细注释 可固定地图和起点终点 适合初学者入门学习使用 保证运行!

直接上硬货!咱们先整个能跑的A*算法Matlab代码,再掰开了揉碎了讲明白。先看效果:固定10x10地图,起点(1,1),终点(10,10),绿色是路径,红色是搜索过的节点,够直观吧?

Matlab路径规划算法代码 传统A star算法源码+详细注释 可固定地图和起点终点 适合初学者入门学习使用 保证运行!

!A*运行效果图 // 实际使用时需要替换真实图片链接

先甩完整代码(别慌,后面有逐段解析):

% A*路径规划基础版 - 新手友好型 % 按F5直接运行,建议搭配奶茶食用 %% 地图初始化 map = [0 0 0 0 1 0 0 0 0 0; % 0可通行,1障碍物 0 1 1 0 1 0 1 1 1 0; 0 1 0 0 1 0 0 0 1 0; 0 0 0 1 1 0 1 0 0 0; 0 1 0 1 0 0 1 0 1 0; 0 1 0 1 0 1 0 0 1 0; 0 0 0 0 0 1 1 0 1 0; 0 1 1 1 0 0 0 0 1 0; 0 0 0 0 0 1 1 0 1 0; 0 1 1 1 0 1 0 0 0 0]; start_node = [1, 1]; % 起点坐标[y,x] goal_node = [10, 10]; % 终点坐标 %% 核心参数设置 openList = [start_node, 0, 0, 0]; % [y,x,g,h,f] closedList = []; path_found = false; % 八个方向移动成本(当前只开四方向) move_cost = [1 1; -1 1; 1 -1; -1 -1; 0 1; 1 0; 0 -1; -1 0];

代码食用指南:

  1. map矩阵可以随便改大小,想加障碍物就把0改1
  2. move_cost控制移动方式,注释掉后四行就是四方向移动
  3. 起终点坐标别越界,注意Matlab是先行后列

主循环部分才是精髓:

%% A*主菜上桌 while ~isempty(openList) % 当前节点选取(f值最小) [~, idx] = min(openList(:,5)); current = openList(idx,:); % 抵达终点判断 if isequal(current(1:2), goal_node) path_found = true; break; end % 节点转移(开放列表->关闭列表) openList(idx,:) = []; closedList = [closedList; current]; % 遍历邻居节点 for i = 1:size(move_cost,1) neighbor = current(1:2) + move_cost(i,:); % 边界检查三连击 if neighbor(1)<1 || neighbor(1)>size(map,1) || ... neighbor(2)<1 || neighbor(2)>size(map,2) continue end % 障碍物和已关闭节点过滤 if map(neighbor(1), neighbor(2)) == 1 || ... ismember(neighbor, closedList(:,1:2), 'rows') continue end % 计算代价值 g = current(3) + 1; % 当前移动成本为1 h = abs(neighbor(1)-goal_node(1)) + abs(neighbor(2)-goal_node(2)); f = g + h; % 开放列表更新逻辑 if ~ismember(neighbor, openList(:,1:2), 'rows') openList = [openList; neighbor, g, h, f]; else existing_idx = find(ismember(openList(:,1:2), neighbor, 'rows')); if g < openList(existing_idx,3) openList(existing_idx,:) = [neighbor, g, h, f]; end end end end

重点敲黑板:

  • h = abs(y差)+abs(x差)这是曼哈顿距离,想改启发函数就在这动手
  • 邻居节点遍历时用了move_cost里的偏移量,想改八方向把注释打开
  • 开放列表用数组存储虽然效率一般,但对新手友好,进阶可以用优先队列

路径回溯才是见证奇迹的时刻:

%% 炫酷可视化 if path_found % 路径回溯(需要记录父节点,代码略) disp('找到路径啦!'); imagesc(map); hold on; plot(start_node(2), start_node(1), 'go', 'MarkerSize',10); plot(goal_node(2), goal_node(1), 'mo', 'MarkerSize',10); % 绘制搜索过的节点 scatter(closedList(:,2), closedList(:,1), 'r.'); % 绘制最终路径 plot(path(:,2), path(:,1), 'b-', 'LineWidth',2); else disp('大兄弟,此路不通啊!'); end

避坑指南:

  1. 地图坐标和矩阵索引容易搞反,记住Matlab是行(y),列(x)
  2. 想记录完整路径需要保存父节点,可在节点数据结构里加个parent字段
  3. 大规模地图可能会卡,这时候就得用更高效的数据结构了

最后甩个新手大礼包——修改地图的三种姿势:

% 姿势一:手动改0/1 map(3,5) = 1; % 第3行第5列变障碍 % 姿势二:随机生成 map = randi([0 1], 15,15); % 15x15随机地图 % 姿势三:图片转地图(装逼必备) img = imread('迷宫图.jpg'); gray_img = rgb2gray(img); map = imbinarize(gray_img); % 二值化转换

跑不通来找我!代码拿去随便改,注释写得比代码长不是开玩笑的。下期考虑出个双向A*优化版,想看的评论区敲1。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/30 18:05:20

RexUniNLU零样本效果对比:中文新闻语料下10类NLU任务F1值全景展示

RexUniNLU零样本效果对比&#xff1a;中文新闻语料下10类NLU任务F1值全景展示 你有没有遇到过这样的问题&#xff1a;手头有一批中文新闻稿&#xff0c;想快速提取人物、事件、情感倾向&#xff0c;但没时间标注数据、也没精力微调模型&#xff1f;传统NLU流程动辄要准备训练集…

作者头像 李华
网站建设 2026/4/16 16:48:28

HY-Motion 1.0企业实操:3D数字人直播动作库自动化构建方案

HY-Motion 1.0企业实操&#xff1a;3D数字人直播动作库自动化构建方案 1. 为什么企业需要自己的3D数字人动作库&#xff1f; 你有没有遇到过这样的场景&#xff1a;一场电商直播前两小时&#xff0c;数字人主播的动作还卡在“挥手微笑”循环里&#xff1b;客户临时要求增加“…

作者头像 李华
网站建设 2026/4/12 22:06:01

高效多平台直播分发:obs-multi-rtmp实战指南

高效多平台直播分发&#xff1a;obs-multi-rtmp实战指南 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 在直播行业蓬勃发展的今天&#xff0c;多平台同步直播已成为内容创作者提升影响…

作者头像 李华
网站建设 2026/4/19 18:29:36

BGE-M3实战指南:结合LlamaIndex/LangChain构建端到端检索增强流程

BGE-M3实战指南&#xff1a;结合LlamaIndex/LangChain构建端到端检索增强流程 1. 为什么BGE-M3值得你花时间上手 你可能已经用过不少文本嵌入模型——比如BGE-base、text-embedding-ada-002&#xff0c;甚至自己微调过Sentence-BERT。但当你真正面对一个真实业务场景&#xf…

作者头像 李华