news 2026/8/25 1:44:53

2.2.3 - 3D混合搜索算法(以Voronoi为例) - Python运动规划库教程(Python Motion Planning)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2.2.3 - 3D混合搜索算法(以Voronoi为例) - Python运动规划库教程(Python Motion Planning)

前序教程请参照专栏,如您是从0开始阅读,可以直接跳到Python运动规划库教程(Python Motion Planning)-0-简介与安装。

创建路径规划器并规划路径。混合搜索规划器Voronoi Planner会创建Voronoi地图,然后依靠另一个路径规划算法(默认A*)来规划路径。你可以通过设置参数base_planner来更改基础规划器,并通过参数base_planner_kwargs向基础规划器传递参数。

planner=VoronoiPlanner(map_=map_,start=start,goal=goal,base_planner=AStar)path,path_info=planner.plan()print(path)print(path_info)

打印结果:

[(25, 5, 5), (25, 6, 5), (25, 6, 6), (24, 6, 7), (23, 7, 8), (23, 7, 9), (22, 7, 10), (21, 8, 10), (20, 8, 10), (19, 8, 11), (18, 8, 12), (17, 8, 12), (16, 9, 13), (15, 9, 14), (14, 9, 14), (13, 9, 14), (12, 8, 14), (11, 8, 14), (10, 8, 14), (9, 8, 15), (8, 9, 16), (8, 10, 16), (7, 11, 16), (7, 12, 17), (7, 13, 18), (7, 14, 18), (6, 15, 19), (6, 16, 19), (5, 17, 20), (5, 18, 21), (5, 19, 21), (5, 20, 22), (5, 21, 22), (5, 22, 22), (6, 23, 23), (5, 24, 24), (5, 25, 25), (5, 25, 25)] {'success': True, 'start': (25, 5, 5), 'goal': (5, 25, 25), 'length': 46.92334552620546, 'cost': 46.92334552620546, 'expand': {(25, 6, 5): Node((25, 6, 5), None, 0, 34.07345007480164), ...}, 'voronoi_candidates': array([[[False, False, False, ..., False, False, False], ...]]), 'voronoi_start': (25, 6, 5), 'voronoi_goal': (5, 25, 25), 'voronoi_path': [(25, 6, 5), (25, 6, 6), (24, 6, 7), (23, 7, 8), (23, 7, 9), (22, 7, 10), (21, 8, 10), (20, 8, 10), (19, 8, 11), (18, 8, 12), (17, 8, 12), (16, 9, 13), (15, 9, 14), (14, 9, 14), (13, 9, 14), (12, 8, 14), (11, 8, 14), (10, 8, 14), (9, 8, 15), (8, 9, 16), (8, 10, 16), (7, 11, 16), (7, 12, 17), (7, 13, 18), (7, 14, 18), (6, 15, 19), (6, 16, 19), (5, 17, 20), (5, 18, 21), (5, 19, 21), (5, 20, 22), (5, 21, 22), (5, 22, 22), (6, 23, 23), (5, 24, 24), (5, 25, 25)]}

可视化。如果你想可视化Voronoi候选点,将开头两行代码取消注释。
Visualize. If you want to visualize the Voronoi candidates, uncomment the first two line code.

# if "voronoi_candidates" in path_info:# map_.type_map[path_info["voronoi_candidates"]] = TYPES.CUSTOMvis=Visualizer3D()vis.plot_grid_map(map_)vis.plot_path(path)vis.show()vis.close()

完整的可运行代码:

importrandom random.seed(0)importnumpyasnp np.random.seed(0)frompython_motion_planning.commonimport*frompython_motion_planning.path_plannerimport*frompython_motion_planning.controllerimport*map_=Grid(bounds=[[0,31],[0,31],[0,31]],resolution=1.0)foriinrange(75):rd_p=tuple(np.random.randint(0,30,size=3))map_.type_map[rd_p[0],rd_p[1],:rd_p[2]]=TYPES.OBSTACLE map_.inflate_obstacles(radius=3)start=(25,5,5)goal=(5,25,25)map_.type_map[start]=TYPES.START map_.type_map[goal]=TYPES.GOAL planner=VoronoiPlanner(map_=map_,start=start,goal=goal,base_planner=AStar)path,path_info=planner.plan()print(path)print(path_info)# if "voronoi_candidates" in path_info:# map_.type_map[path_info["voronoi_candidates"]] = TYPES.CUSTOMvis=Visualizer3D()vis.plot_grid_map(map_)vis.plot_path(path)vis.show()vis.close()

如需了解更多规划器及其参数,请参阅官方教程文档中的API Reference部分。

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

Ext 系列文件系统核心:块、分区、inode 与块组结构详解

一. 文件系统的核心铺垫:块、分区、inode在认识 Ext 系列文件系统之前,必须先掌握三个核心前置概念,它们是文件系统设计的基石。1.1 块(Block):文件存取的最小单位块的引入原因:扇区是磁盘的最小…

作者头像 李华
网站建设 2026/7/14 16:51:15

基于STM32单片机的的电烙铁自动供丝装置设计-直流电机控制加减速正反转控制系统+拨动开关控制继电器外接发热电阻设计26-056

26-056、基于STM32单片机的的电烙铁自动供丝装置设计-直流电机控制加减速正反转控制系统拨动开关控制继电器外接发热电阻设计产品功能描述:本系统由STM32F103C8T6单片机核心板、L298N电机驱动、按键、拨动开关控制继电器外接发热电阻以及电源组成。1、通过按键可以控…

作者头像 李华
网站建设 2026/7/14 16:51:30

基于卡尔曼滤波器的电池充电状态估计研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…

作者头像 李华
网站建设 2026/7/14 16:51:20

竞赛.算法

前缀和一、什么是前缀和前缀和(Prefix Sum) 是一种预处理数组的技巧,核心是用空间换时间,把多次区间求和从 O (n) 降到 O (1)。二、一维前缀和(最常用)1. 定义原数组:a[1..n](下标从…

作者头像 李华