尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
PythonRobotics 如何用时空 A* 在动态障碍物环境中规划时间最优路径
PythonRobotics 如何用时空 A* 在动态障碍物环境中规划时间最优路径【免费下载链接】PythonRoboticsPython sample codes and textbook for robotics algorithms.项目地址: https://gitcode.com/GitHub_Trending/py/PythonRobotics在带动态障碍物的栅格环境中做路径规划时普通 A* 的代价是格子数无法保证路径在时间上最优。PythonRobotics 的TimeBasedPathPlanning模块提供了一套时空 A*Space-time A*示例代码代价改为到达节点所用的时间步数从而在避开移动障碍物的前提下规划出时间最优路径。本文说明如何安装依赖、运行官方示例、用单元测试验证结果以及如何调整网格和障碍物参数。准备环境按仓库文档的要求示例代码建议使用Python 3.12.x其他版本可能可用但官方只在该版本上做过测试。先克隆仓库并进入根目录然后在根目录安装依赖pip install -r requirements/requirements.txtrequirements/requirements.txt 中固定了numpy 2.3.5、matplotlib 3.11.0等版本时空 A* 的示例和测试依赖其中的 numpy、matplotlib 与 pytest。算法工作方式运行前先了解几个关键点便于看懂输出与标准 A* 不同时空 A* 的代价g(n)是到达该节点所用的时间步数启发函数是到目标的曼哈顿距离abs(dx) abs(dy)。在每个时间步可移动 1 格、也可以原地停留的假设下时间启发与距离启发等价最终路径在到达目标所需时间上最优。环境由 GridWithDynamicObstacles.py 中的Grid类建模内部维护一个 x、y、time 三维的 reservation matrix预订矩阵障碍物在创建时把完整运动轨迹写入该矩阵。后继节点有 5 种原地停留和上下左右移动。一个新节点只有在接下来 2 个时间步1 步进入、1 步离开都合法才会被生成这保证机器人在任何时刻都能离开当前格子。SpaceTimeAStar.py 中额外引入了 expanded set已扩展过的节点不再重复扩展文档给出的示例数据显示同一场景下节点扩展次数从 204490 次降到 2348 次规划耗时从 1.72 秒降到约 0.016 秒文档示例结果。BaseClasses.py 里对random和numpy.random统一设置了RANDOM_SEED 50随机障碍物的布局在多次运行间可复现。运行官方示例示例入口是 SpaceTimeAStar.py其main()的配置为起点(1, 5)、终点(19, 19)、21×21 网格、40 个障碍物障碍物排布取ARRANGEMENT1在网格中央沿 y 排成一行、沿 x 左右往返移动。按仓库文档进入目录后执行脚本的方式运行cd PathPlanning/TimeBasedPathPlanning python SpaceTimeAStar.py脚本中的两个模块级变量控制运行行为show_animation True默认规划完成后用PlotNodePath绘制机器人与障碍物随时间移动的动画verbose False默认传给SpaceTimeAStar.plan()置为True时会逐个打印被扩展的节点。运行结束会输出形如Planning took: x.xxxxx seconds的规划耗时具体数值取决于你的机器。验证规划结果仓库提供了对应的单元测试 tests/test_space_time_astar.py。该测试使用ARRANGEMENT1排布、起点(1, 11)、终点(19, 19)的 21×21 网格关闭动画后执行规划并断言三点路径包含 31 个节点路径最后一个节点的位置等于终点path.expanded_node_count 1000。在仓库根目录运行pytest tests/test_space_time_astar.py三条断言全部通过即说明该场景下时空 A* 的规划结果符合预期。NodePath对象定义见 Node.py还提供goal_reached_time()到达终点的时刻和positions_at_time每个时间步的位置映射可直接用于检查结果。自定义网格与障碍物在仓库根目录下编写脚本即可复用Grid和SpaceTimeAStar以下代码取自示例main()与测试文件的实际用法from PathPlanning.TimeBasedPathPlanning.GridWithDynamicObstacles import ( Grid, ObstacleArrangement, Position, ) from PathPlanning.TimeBasedPathPlanning.SpaceTimeAStar import SpaceTimeAStar import numpy as np start Position(1, 5) goal Position(19, 19) grid Grid( np.array([21, 21]), num_obstacles40, obstacle_avoid_points[start, goal], obstacle_arrangementObstacleArrangement.ARRANGEMENT1, ) path SpaceTimeAStar.plan(grid, start, goal, verboseTrue) print(path.goal_reached_time(), path.expanded_node_count)Grid构造函数的关键参数默认值见源码grid_sizenp.array([x 方向格数, y 方向格数])num_obstacles默认 40障碍物数量。若大于网格总格数构造时抛出Number of obstacles is greater than grid size!异常obstacle_avoid_points障碍物永远不会占据这些点官方示例用它避开起点和终点避免出现无解场景obstacle_arrangement默认RANDOMRANDOM为随机位置、随机移动ARRANGEMENT1为中央一列障碍物左右往返NARROW_CORRIDOR为静态障碍跳过中间一行time_limit默认 100仿真的总时间步数。规划时时间满足time 1 time_limit的节点会被跳过因此该值过小时可能找不到路径。如果开集的节点全部耗尽仍到达不了终点plan()会抛出No path found异常——这是文档给出的明确失败信号此时可调大time_limit、减少num_obstacles或更换障碍物排布。文档给出的替代方案Safe Interval Path Planningtime_based_grid_search 文档对比了同场景下的 SIPPSafe Interval Path Planning实现见 SafeInterval.py它预先计算每个格子的空闲时间区间来减少后继节点生成文档示例数据显示 Arrangement 1 从(1, 18)出发时SIPP 用 322 次扩展、0.00730 秒而时空 A* 用 2717154 次扩展、20.51330 秒。如果你的场景扩展次数很高可以按同一套Grid接口换用它作为可选分支。相关文档docs/modules/5_path_planning/time_based_grid_search/time_based_grid_search_main.rst 是该模块的总说明tests/test_safe_interval_path_planner.py 与 tests/test_space_time_astar.py 分别是两个规划器的验证入口。【免费下载链接】PythonRoboticsPython sample codes and textbook for robotics algorithms.项目地址: https://gitcode.com/GitHub_Trending/py/PythonRobotics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

RIAV-MVS:不对称体积与循环索引实现高效多视图立体匹配

RIAV-MVS:不对称体积与循环索引实现高效多视图立体匹配

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/13 10:34:41
C++在实时操作系统中的高效实践与优化技巧

C++在实时操作系统中的高效实践与优化技巧

1. 实时操作系统与C的化学反应我第一次在VxWorks上尝试用C开发实时控制程序时,意外发现这个组合比想象中更强大。传统观念认为实时系统应该用C语言开发,但现代C的特性正在改变这一格局。实时操作系统(RTOS)对时间确定性有严苛要求…

📅 2026/9/13 10:34:41
Backstage v1.6.0 版本深度解读:React Router v6 兼容、CLI 现代化与搜索能力全面增强

Backstage v1.6.0 版本深度解读:React Router v6 兼容、CLI 现代化与搜索能力全面增强

Backstage v1.6.0 版本深度解读:React Router v6 兼容、CLI 现代化与搜索能力全面增强 【免费下载链接】backstage Backstage is an open framework for building developer portals 项目地址: https://gitcode.com/GitHub_Trending/ba/backstage 导读 Back…

📅 2026/9/13 10:34:41
MORE NEWS

更多资讯

📰

Proteus电子秤仿真:HX711传感器建模与LCD1602驱动实战

简介:本资源是一套面向电子设计初学者与嵌入式开发爱好者的电子秤全流程实践资料,聚焦硬件仿真验证与软件协同调试,解决从原理图设计到固件实现的学习断层问题。压缩包共53个文件,涵盖Proteus仿真工程(.dsn、.dbk&…

📰

Java日志框架底层原理与生产调优实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

基于EKF的路面附着系数估计与Simulink实现

1. 项目背景与核心价值在车辆动力学控制和自动驾驶领域,路面附着系数估计一直是个关键技术难题。这个参数直接影响着车辆的制动性能、转向稳定性和驱动效率。传统基于查表法或简单滑移率计算的方法在复杂路况下往往表现不佳,而基于扩展卡尔曼滤波&#x…

📰

Windows指纹识别SDK实战:SLK20M模块驱动安装与特征比对全解析

简介:面向Windows平台的ZKFPModule SLK20M指纹识别模块SDK开发包,专为需要在服务端或桌面应用中实现指纹采集、验证与比对的开发者设计。压缩包共90个文件,大小约43.44MB,涵盖头文件、动态链接库、静态库、设备驱动、示例源码及PD…

📰

STM32F4 IIC复位与状态机深度解析

简介:本资源是一份面向STM32F4系列嵌入式开发者的IC(IIC)底层驱动代码包,聚焦解决MCU与温湿度传感器、EEPROM、陀螺仪等IC外设通信的工程落地问题,适用于具备C语言基础和STM32标准库/HAL库使用经验的中级开发者。压缩包…

📰

实测VeapAI:开源RAG知识库全链路平台搭建指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬