ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

PythonRobotics 如何用可见性路线图对多边形障碍物环境做全局路径规划

PythonRobotics 如何用可见性路线图对多边形障碍物环境做全局路径规划 PythonRobotics 如何用可见性路线图对多边形障碍物环境做全局路径规划【免费下载链接】PythonRoboticsPython sample codes and textbook for robotics algorithms.项目地址: https://gitcode.com/GitHub_Trending/py/PythonRobotics你手上已经有一个二维环境起点、终点和若干多边形障碍物的顶点坐标需要在这三者之间规划出一条全局无碰撞路径。PythonRobotics 在 visibility_road_map.py 中提供了 Visibility Road-Map 规划器先用障碍物顶点生成可见性节点再逐对检查连线碰撞建立可见性图最后在图上用 Dijkstra 算法搜索最短路径。本文按仓库文档和示例代码组织操作路径安装依赖、直接运行示例、替换成自己的起点/终点/障碍物并说明如何判断规划是否成功。前提条件来自 README 的 Requirements to run the codePython 3.13.x以及 NumPy、SciPy、Matplotlib、cvxpy。规划流程三步完成从节点到路径的转换文档visibility_road_map_planner_main.rst把规划器拆成三步输入是起点红色点、终点蓝色点和障碍物多边形黑色线。Step 1生成可见性节点每个障碍物多边形的顶点沿相邻顶点向量方向向外扩展扩展出的点作为可见性节点起点和终点也一并作为节点加入。扩展方向由 calc_offset_xy 中的相邻边向量计算扩展距离由构造VisibilityRoadMap(expand_distance, do_plot)时传入的expand_distance参数决定。Step 2生成无碰撞的可见性图连接节点时逐对检查两节点之间的连线是否和每个障碍物多边形的每条边相交相交检查由 geometry.py 中的Geometry.is_seg_intersect完成相交的连线被移除。剩下的无碰撞连线就是可见性图下图中的蓝色线。Step 3用 Dijkstra 搜索最短路径在可见性图上运行 Dijkstra。文档明确该规划器 uses Dijkstra method for graph search实现上它复用了 dijkstra_search.py 中的DijkstraSearch类每条边的代价取两端节点间的欧氏距离。图中的红色线就是搜索结果。安装依赖并运行仓库示例在仓库根目录依次执行# 安装运行示例代码所需的依赖pip 与 conda 二选一 pip install -r requirements/requirements.txt # 或者 conda env create -f requirements/environment.ymlrequirements.txt 中的固定版本为 numpy 2.3.5、scipy 1.18.1、matplotlib 3.11.0、cvxpy 1.8.1其余为测试与代码检查工具。然后从仓库根目录直接运行脚本README 的用法即Execute python script in each directorypython PathPlanning/VisibilityRoadMap/visibility_road_map.py脚本会弹出 matplotlib 窗口黑色线是三个障碍物多边形红色圆点是起点 (10.0, 10.0)蓝色圆点是终点 (50.0, 50.0)红色叉号是可见性节点蓝色线是可见性图红色线是最终路径。这些都是示例main()中的默认输入expand_distance为 5.0 m。换成自己的起点、终点与障碍物修改 visibility_road_map.py 中main()的输入核心代码结构如下数值为仓库示例原值可直接作为模板替换# start and goal position sx, sy 10.0, 10.0 # [m] gx, gy 50.0, 50.0 # [m] expand_distance 5.0 # [m] obstacles [ ObstaclePolygon( [20.0, 30.0, 15.0], [20.0, 20.0, 30.0], ), ObstaclePolygon( [40.0, 45.0, 50.0, 40.0], [50.0, 40.0, 20.0, 40.0], ), ObstaclePolygon( [20.0, 30.0, 30.0, 20.0], [40.0, 45.0, 60.0, 50.0], ) ] rx, ry VisibilityRoadMap(expand_distance, do_plotshow_animation)\ .planning(sx, sy, gx, gy, obstacles)改自己的场景时注意三点障碍物用ObstaclePolygon(x_list, y_list)描述。构造时若首尾点不重合会自动闭合把第一个点追加到末尾若顶点顺序不是顺时针会自动反转。因此只需按顺序传入顶点坐标不用手动闭合。expand_distance控制障碍物顶点向外扩展生成节点的距離是构造VisibilityRoadMap时的必传参数。没有图形界面时把模块顶部的show_animation改为False脚本会跳过所有绘图调用planning仍会返回路径结果。验证结果终端输出是判断依据DijkstraSearch.search在找到终点时打印goal is found!若可见性图中不存在从起点到终点的无碰撞通路则打印Cannot find path。图形窗口中红色线即文档定义的 the final path searched by dijkstra algorithm from the visibility graphs它与黑色障碍线不相交说明路径无碰撞。planning方法返回rx, ry两个序列是从起点到终点的路径顶点坐标可在自己的代码中直接使用如送去做路径跟踪。适用边界障碍物必须是二维多边形碰撞检测只覆盖连线与多边形各边的相交判断没有对路径做平滑或考虑车辆运动学约束。节点集合只包含扩展后的障碍物顶点和起点、终点图中不再插入额外采样点环境复杂时路径形状完全由这组节点决定。图搜索使用 Dijkstra 方法得到的是该可见性图上的最短路径。想对比另一种基于图搜索的路线规划可参考文档同一章节下的 Voronoi Road-Mapvoronoi_road_map.py其图搜索部分与本例共用同一个DijkstraSearch实现。【免费下载链接】PythonRoboticsPython sample codes and textbook for robotics algorithms.项目地址: https://gitcode.com/GitHub_Trending/py/PythonRobotics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表