news 2026/7/14 9:51:16

曼哈顿距离简化计算

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
曼哈顿距离简化计算

RRT 路径规划 rrt 基于珊格地图的RRT路径规划 ——————————————

刚接触路径规划那会儿,总想着怎么让机器人像电影里那样在迷宫里丝滑走位。直到被现实打脸——传统A*算法遇到复杂环境直接算到冒烟。后来在导师电脑上看到RRT(快速扩展随机树)的演示动画,树枝状结构像活物一样在障碍物间蜿蜒生长,当时就跪了。

咱们今天要玩的场景是栅格地图,这种由0和1组成的矩阵特别适合快速验证算法。先来点直观的:假设我们有个20x20的迷宫,黑色像素代表障碍物,白色是可行走区域。RRT的核心逻辑就像朝随机方向扔飞镖,然后拉着树苗往那个方向长。

先整点基础代码架子:

class Node: def __init__(self, x, y): self.x = x self.y = y self.parent = None class RRT: def __init__(self, grid, step_size=3): self.grid = grid[::-1] # 处理坐标系翻转 self.step_size = step_size self.nodes = [Node(1, 1)] # 起点设在左上角

看到没?Node类简单得令人发指,就存坐标和父节点。重点在RRT初始化时把地图上下翻转了,因为栅格地图的(0,0)通常在左上角,而数学坐标系是左下角为原点,这个细节坑过我整晚。

碰撞检测是路径规划的灵魂,但在栅格环境里可以耍个花招:

def is_collision(self, x1, y1, x2, y2): dx = abs(x2 - x1) dy = abs(y2 - y1) if dx + dy > self.step_size * 2: return True return self.grid[int(y1)][int(x1)] == 0

这里偷懒用了曼哈顿距离做近似判断,实际上应该做直线插值检测。但实测在低分辨率栅格中完全够用,毕竟RRT本身就有容错性。当年我坚持写Bresenham直线算法,结果调试到凌晨三点,血的教训告诉咱:别在demo代码里追求完美。

核心的扩展过程才是戏肉:

def expand(self): rand_x = random.randint(0, len(self.grid[0])-1) rand_y = random.randint(0, len(self.grid)-1) nearest = min(self.nodes, key=lambda n: (n.x-rand_x)**2 + (n.y-rand_y)**2) theta = math.atan2(rand_y - nearest.y, rand_x - nearest.x) new_x = nearest.x + self.step_size * math.cos(theta) new_y = nearest.y + self.step_size * math.sin(theta) if 0 <= new_x < len(self.grid[0]) and 0 <= new_y < len(self.grid): if not self.is_collision(nearest.x, nearest.y, new_x, new_y): new_node = Node(new_x, new_y) new_node.parent = nearest self.nodes.append(new_node) return new_node return None

这段代码里藏着三个精妙之处:1)随机采样时直接取整,让树自然贴合栅格结构;2)用最近邻节点+固定步长代替直线连接,避免复杂碰撞计算;3)通过三角函数确定生长方向,比向量归一化更直观。记得第一次跑通这段时,看着树枝在控制台字符画里七扭八拐地避开障碍,比通关魂系游戏还爽。

当树枝终于碰到目标点时,回溯路径就像解开缠住的耳机线:

def get_path(self, end_node): path = [] current = end_node while current: path.append((current.x, current.y)) current = current.parent return path[::-1]

这种链表式的逆向追溯虽然简单粗暴,但在实际项目中要小心循环引用。有次我在C++版本里没处理好智能指针,结果路径回溯变成了无限循环,直接把仿真程序跑崩了。

最后说点实在的:RRT在栅格地图上的表现就像喝醉的扫地机器人——路径曲里拐弯但总能到达。想要更丝滑?试试RRT*的代价重构机制;想要更快?上Bidirectional RRT同时生长两棵树。不过对于刚入门的兄弟,先把基础版本吃透更重要。就像我导师常说的:"别急着优化,跑起来再说。"

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

实验性发布意味着什么?关于VibeThinker的定位解读

实验性发布意味着什么&#xff1f;关于VibeThinker的定位解读 在大模型军备竞赛愈演愈烈的今天&#xff0c;我们似乎已经习惯了“千亿参数起步”“万亿token训练”的宏大叙事。GPT、Claude、通义千问这些庞然大物不断刷新着性能上限&#xff0c;但也把算力门槛推到了普通人难以…

作者头像 李华
网站建设 2026/7/6 18:12:49

研究生论文写作助手:用VibeThinker推导数学公式过程

VibeThinker&#xff1a;如何用15亿参数的小模型推导研究生论文中的数学公式&#xff1f; 在撰写学位论文的过程中&#xff0c;你是否曾因一个复杂的极限表达式卡住数小时&#xff1f;是否在反复验证递推关系时怀疑自己抄错了符号&#xff1f;传统上&#xff0c;这类问题的解决…

作者头像 李华
网站建设 2026/7/14 6:44:49

绘画风格迁移指导:运用算法思维重构艺术表达

VibeThinker-1.5B&#xff1a;轻量模型如何实现高阶推理突破 在大模型军备竞赛愈演愈烈的今天&#xff0c;一个仅15亿参数的“小个子”却频频在权威数学与编程测试中击败数十倍规模的对手——这听起来像极了AI领域的“大卫战胜歌利亚”。但VibeThinker-1.5B-APP并非偶然现象&am…

作者头像 李华
网站建设 2026/7/14 6:07:29

作弊检测系统增强:分析操作模式识别异常行为

作弊检测系统增强&#xff1a;分析操作模式识别异常行为 在各类在线编程竞赛、自动化评测平台和远程考试场景中&#xff0c;AI辅助解题的普及正在悄然改写“公平竞争”的边界。过去&#xff0c;判断是否作弊主要依赖答案比对——只要结果正确&#xff0c;过程往往被忽略。但如今…

作者头像 李华
网站建设 2026/7/6 23:13:32

(Docker日志治理新思路):基于journald+JSON-file的混合轮转模式

第一章&#xff1a;Docker日志轮转机制概述 在容器化应用运行过程中&#xff0c;日志是诊断问题、监控系统状态的重要依据。然而&#xff0c;若不加以管理&#xff0c;容器日志可能持续增长&#xff0c;占用大量磁盘空间&#xff0c;甚至导致节点磁盘写满。Docker 提供了内置的…

作者头像 李华