news 2026/4/18 12:00:23

RRT路径规划示例图](https://i.imgur.com/3LkQ7jC.gif

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RRT路径规划示例图](https://i.imgur.com/3LkQ7jC.gif

基于matlab的全局路径规划算法中的快速扩展随机树RRT路径规划算法及其改进方法RRT Star、RRT_Conncet是一种具有状态约束的非线性系统生成开环轨迹的技术,相比于其他算法可以轻松处理障碍物的问题。 程序中的各参数已进行详细说明,起点坐标,终点坐标,步长,迭代数等均可根据需求进行更改,程序已调通

(假设这是程序运行后的动态效果图,实际使用时需替换为真实截图)

路径规划这事儿吧,有时候像极了找对象——既要避开各种"雷区",又得尽快到达终点。今天咱们来唠唠MATLAB里那几个用随机树开路的算法:RRT、RRT*和RRT-Connect。先扔个最简单的RRT实现片段镇楼:

% 基础RRT核心参数 start = [10,10]; % 起点坐标 goal = [90,90]; % 终点坐标 stepSize = 3; % 树枝生长步长 maxIter = 2000; % 最大迭代次数 obstacles = [30,30,15; 60,60,10]; % 障碍物[x,y,半径] tree = start; % 初始化树 for k = 1:maxIter randPoint = rand(1,2)*100; % 随机撒点 [minDist, nearestIdx] = min(vecnorm(tree - randPoint, 2, 2)); nearestNode = tree(nearestIdx,:); % 计算生长方向 direction = (randPoint - nearestNode)/norm(randPoint - nearestNode); newNode = nearestNode + direction * stepSize; if ~checkCollision(nearestNode, newNode, obstacles) tree = [tree; newNode]; if norm(newNode - goal) < stepSize disp('找到路径啦!') break; end end end

这段代码里最有意思的是随机撒点策略。就像玩飞镖,每次都往地图随便一扔,然后找树上离得最近的枝丫(第9行那个vecnorm计算),接着以固定步长往随机点方向生长新枝(第13行)。不过这种野蛮生长容易走弯路,不信你试试把stepSize改成10,路径立马变得跟醉汉走路似的七扭八歪。

基于matlab的全局路径规划算法中的快速扩展随机树RRT路径规划算法及其改进方法RRT Star、RRT_Conncet是一种具有状态约束的非线性系统生成开环轨迹的技术,相比于其他算法可以轻松处理障碍物的问题。 程序中的各参数已进行详细说明,起点坐标,终点坐标,步长,迭代数等均可根据需求进行更改,程序已调通

这时候RRT*带着优化来了。它在生长新节点后会搞个"邻里重新接线"的操作:

% RRT*新增的重布线逻辑 nearIndices = find(vecnorm(tree - newNode, 2, 2) < 5*stepSize); % 找近邻 minCost = cost(nearestIdx) + stepSize; for j = 1:length(nearIndices) if checkCollision(tree(nearIndices(j),:), newNode, obstacles) tentativeCost = cost(nearIndices(j)) + norm(tree(nearIndices(j),:) - newNode); if tentativeCost < minCost minCost = tentativeCost; nearestIdx = nearIndices(j); end end end

这个重布线就像给树枝做嫁接,把新节点接到更优的父节点上(第5行的代价比较)。代价函数cost这里简单用路径长度,但要是加上能耗、风险系数,立马就能玩出不同花样。

说到效率提升,RRT-Connect这货直接整了两棵树同时开搞:

% RRT-Connect双树生长逻辑 if mod(k,2) == 0 % 交替生长两棵树 [treeA, treeB] = growTree(treeA, treeB, stepSize); else [treeB, treeA] = growTree(treeB, treeA, stepSize); end function [tree1, tree2] = growTree(tree1, tree2, step) % 这里包含标准RRT生长逻辑 % 当两棵树相遇时触发路径连接 end

双树策略相当于从起点和终点两头挖隧道,实测迭代次数能比单树少30%以上。不过要注意障碍物多的时候,两棵树可能像牛郎织女似的被银河(障碍)隔开,这时候加点偏向目标区域的采样策略会好很多。

最后给个调参小技巧:步长建议设为地图尺寸的1/20~1/30,迭代次数别低于500次。遇到复杂地形时,把目标偏向概率调到5%~10%(就是在随机采样时有一定概率直接采样目标点),这样路径收敛速度能快不少。代码包里我塞了个plotTrajectory函数,运行完会画出带搜索树的路径图,障碍物用红色圆圈表示,调整起来特直观。

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

Qwen3-TTS应用案例:为视频添加多语言配音

Qwen3-TTS应用案例&#xff1a;为视频添加多语言配音 你是否遇到过这样的场景&#xff1f;精心制作的视频内容&#xff0c;因为语言单一&#xff0c;难以触达全球观众。或者&#xff0c;为不同地区的用户制作本地化内容时&#xff0c;需要反复录制不同语言的配音&#xff0c;耗…

作者头像 李华
网站建设 2026/4/18 6:40:13

Xinference-v1.17.1科研计算加速:将LLM嵌入Python科学计算工作流

Xinference-v1.17.1科研计算加速&#xff1a;将LLM嵌入Python科学计算工作流 重要提示&#xff1a;本文所有内容均基于公开技术文档和开源项目介绍&#xff0c;仅作为技术交流和学习参考。文中提到的所有工具和方法均需在合法合规的前提下使用。 1. 为什么科研工作者需要关注Xi…

作者头像 李华
网站建设 2026/4/17 17:21:48

基于Java+SpringBoot的人力资源管理系统(源码+lw+部署文档+讲解等)

课题介绍本课题旨在设计并实现一款基于JavaSpringBoot框架的人力资源管理系统&#xff0c;解决企业传统人力资源管理中人员信息混乱、考勤统计繁琐、薪资核算低效、招聘培训流程不规范、权限管理不清晰等痛点&#xff0c;适配中小企业人力资源全流程管理需求。系统以Java为开发…

作者头像 李华
网站建设 2026/4/12 18:26:03

阿里云Qwen3-ForcedAligner-0.6B:11种语言对齐全解析

阿里云Qwen3-ForcedAligner-0.6B&#xff1a;11种语言对齐全解析 语音与文本的精准对齐&#xff0c;从此变得如此简单 你是否曾经遇到过这样的场景&#xff1a;需要为视频添加字幕&#xff0c;但手动对齐每一句话的时间戳让人头疼&#xff1b;或者想要分析一段语音中每个词的发…

作者头像 李华
网站建设 2026/4/18 8:33:28

阿里GTE模型对比测评:中文场景下的语义理解能力

阿里GTE模型对比测评&#xff1a;中文场景下的语义理解能力 1. 引言 在人工智能快速发展的今天&#xff0c;文本向量化技术已成为语义理解的核心基础。无论是智能搜索、推荐系统&#xff0c;还是问答匹配和文档聚类&#xff0c;都需要将文本转换为高质量的向量表示。阿里达摩…

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

Dijkstra 算法详解及 Python 实现

1. Dijkstra 算法概述Dijkstra 算法是由荷兰计算机科学家 Edsger W. Dijkstra 在 1956 年提出的单源最短路径算法。它用于计算一个节点到图中所有其他节点的最短路径。特点&#xff1a;✅ 非负权重&#xff1a;只适用于权重为非负的图✅ 贪婪算法&#xff1a;每次选择当前已知的…

作者头像 李华