机器人路径规划:基于双向A*算法(bidirectional a star)的机器人路径规划(提供Python代码)

一、双向A*算法简介

传统A*算法是一种静态路网中求解最短路径最有效的方法, 它结合了BFS 算法和迪杰斯特拉算法(Dijkstra)的优点。 和迪杰斯特拉算法(Dijkstra)一样, A*算法能够用于 搜索最短路径; 和BFS 算法一样, A*算法可以用 启发式函数引导给出当下的最佳解。 传统A*算法的重点在于扩展下一个节点时引入了启发式函数 h(n), 对当前节点到目标节点的距离代价进行了评 估。 通过计算函数的相对最优解来筛选当前节点周 围的扩展节点, 能适用于各种场景, 相当灵活。

双向A*算法具体操作步骤如下:

1) 建立两个open列表和两个close列表, open 列表用来存放正反方向上已经生成但还没有被遍历 即等待检查的节点数据, close列表用来记录正反方 向上已访问过的即不需要再检查的节点数据。

2) 将开始结点和目标节点分别放在两个open 列表中作为当前节点, 对它所有的可达到且没有标 记过的子节点进行扩展, 由于此时待搜索的节点只 有一个, 即开始结点和目标节点的评估值肯定为最 优值, 则将这两个节点分别加入到两个close列 表中。

3) 对open 列表中的子节点计算评估值, 按照 评估值的大小进行排列, 找出评估值最小的节点, 并给它作标记加入到对应的close列表中。

4) 如果满足搜索条件, 表示找到路径, 停止搜 索; 否则将该节点继续进行扩展, 重复执行第三步; 或者open列表空了, 表示没有路径。

5) 从两个close列表的相遇节点开始进行父亲 节点遍历, 规划出最终的路径。

参考文献:

[1]刘梦杰,朱希安,王占刚,等.基于双向A*算法的矿井水灾逃生路径应用研究[J].煤炭工程, 2019(9):6.DOI:CNKI:SUN:MKSJ.0.2019-09-011.

二、部分代码

import mathimport matplotlib.pyplot as pltshow_animation = Falseclass BidirectionalAStarPlanner:def __init__(self, ox, oy, resolution, rr):"""Initialize grid map for a star planningox: x position list of Obstacles [m]oy: y position list of Obstacles [m]resolution: grid resolution [m]rr: robot radius[m]"""self.min_x, self.min_y = None, Noneself.max_x, self.max_y = None, Noneself.x_width, self.y_width, self.obstacle_map = None, None, Noneself.resolution = resolutionself.rr = rrself.calc_obstacle_map(ox, oy)self.motion = self.get_motion_model()class Node:def __init__(self, x, y, cost, parent_index):self.x = x  # index of gridself.y = y  # index of gridself.cost = costself.parent_index = parent_indexdef __str__(self):return str(self.x) + "," + str(self.y) + "," + str(self.cost) + "," + str(self.parent_index)

三、部分结果

四、完整Python代码

见下方联系方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/763689.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java:java.util.BitSet对象的Fastjson序列化和反序列化实现

java.util.BitSet是个非常方便的比特位数据存储和操作类,一个 bit 具有2个值:0和1,正好可以用来表示 false 和 true,适用于判断“数据是否存在”的场景。 但是,这个从JDK1.0版本就存在的类,Jackson,Fastjso…

JavaScript 箭头函数

1.什么是箭头函数 箭头函数是ES6新定义函数的语法  语法:(参数)>函数体 传统函数: let sum function(a,b){return ab;} 箭头函数 let sum(a,b)>{return ab;} 2.箭头函数的用法 2.1省略保函参数的小括号 如果只有一个参数,参数小括号…

【JavaScript】NPM常用指令指南

河水清清弯又长 姑娘水边浣霓裳 清风卷过白云旁 飞鸟载来春花香 河水清清弯又长 姑娘水边浣霓裳 清风卷过白云旁 朝霞换夕阳 重逢是梦乡 春潮悠悠送波浪 石桥湾下小舟荡 此去经年谁如常 难得人间笑一场 春潮悠悠送波浪 石桥湾下小舟荡 此去经年谁如常 故人心头上 地久天又长 …

Word文档密码设置:Python设置、更改及移除Word文档密码

给Word文档设置打开密码是常见的Word文档加密方式。为Word文档设置打开密码后,在打开该文档时,需要输入密码才能预览及编辑,为Word文档中的信息提供了有力的安全保障。如果我们需要对大量的Word文档进行加密、解密处理,Python是一…

1. Java基础入门

1. Java基础入门 1.1 Java介绍(了解) 1.1.1 Java背景 Java是美国 sun 公司(Stanford University Network)在1995年推出的一门计算机高级编程语言。Java 之父:詹姆斯高斯林(James Gosling)。 2009年 sun公司被Oracle公司收购。Java公司图标…

大数据面试题 —— Zookeeper

目录 ZooKeeper 的定义ZooKeeper 的特点ZooKeeper 的应用场景你觉得Zookeeper比较重要的功能ZooKeeper 的选举机制 ***zookeeper主节点故障,如何重新选举?ZooKeeper 的监听原理 ***zookeeper集群的节点数为什么建议奇数台 ***ZooKeeper 的部署方式有哪几…

JAVA 栈和队列总结

除了最底层下面三个是实现类,其他都是接口。 双端队列(队头队尾都可以插入和删除元素)的方法: 普通队列方法: 常用的是add(),poll(), element() 我们用Deque(双端队列)实现栈 Deque当栈用的时候的方法。 deque.push…

利用WebGL绘制简单几何

利用WebGL绘制最简单的几何图形 一、WebGL简介 WebGL是一种用于在网页上渲染交互式3D和2D图形的JavaScript API。它基于OpenGL ES 2.0,提供了一种在浏览器中使用硬件加速图形的方式。 二、图形系统绘图流程 图形系统的通用绘图流程会包括六个部分: …

2024年【电工(初级)】考试内容及电工(初级)证考试

题库来源:安全生产模拟考试一点通公众号小程序 2024年【电工(初级)】考试内容及电工(初级)证考试,包含电工(初级)考试内容答案和解析及电工(初级)证考试练习…

C++中的类模板

C中的类模板 类模板 类模板在C中是一种非常强大的工具,它允许程序员编写与数据类型无关的代码。简单来说,类模板允许你定义一个蓝图,这个蓝图可以用来生成具体类型的类。使用类模板可以提高代码的复用性,减少重复代码&#xff0…

字节跳动春招研发部分编程题汇总做题笔记---Java

3.雀魂启动! 小包最近迷上了一款叫做雀魂的麻将游戏,但是这个游戏规则太复杂,小包玩了几个月了还是输多赢少。 于是生气的小包根据游戏简化了一下规则发明了一种新的麻将,只留下一种花色,并且去除了一些特殊和牌方式&…

Java基础知识总结(14)

map集合 /* java.util.Map接口中常用的方法 1、Map和Collection 没有继承关系 2、Map集合以key和value的方式存储数据:键值对key和valuea都是引用数据类型key和value都是存储对象的内存地址key起到主导地位,value是key的一个附属品 3、Map接口中常用的方…

GDAL实现大幅影像的快速读取

这里做个备份,原文链接 遥感影像小则几百兆,大则5,6GB,所以在使用GDAL进行图像读取时面临读写速度较慢的问题,我们可以深入研究gdal中RasterIO函数的机制,发现该函数是通过一行一行读取影像来实现影像读入内存的&…

【教学类-40-01】20240322 幼儿视力检查照片合成GIF

作品展示——GIF动图 背景需求: 2024年3月22日,中班幼儿视力检查,保健老师表扬我们班幼儿视力正常率高。 我为每位孩子拍照时,突然想把动作图用Python变成GIF图片,于是每位孩子都拍了多张“辨认视力表的不同手势”&a…

基于Springboot的西安旅游系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的西安旅游系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

动态规划(算法竞赛、蓝桥杯)--单调队列优化绿色通道

1、B站视频链接&#xff1a;E45 单调队列优化DP 绿色通道_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N5e410; int n,tim,w[N],f[N],q[N];bool check(int m){int h1,t0;for(int i1; i<n; i){while(h<t && f[q[t]]>f[i-…

visual studio卸载几种方法

1、控制面板卸载&#xff1b; 2、有时候会发现控制面板卸载会失败&#xff0c;无法卸载&#xff0c;这时候要先把下面目录的关于visual studio的都删除&#xff0c;然后重启电脑后&#xff0c;重新安装vs即可。

使用echart绘制拓扑图,树类型,自定义tooltip和label样式,可收缩

效果如图&#xff1a; 鼠标移上显示 vue3 - ts文件 “echarts”: “^5.4.3”, import { EChartsOption } from echarts import * as echarts from echarts/core import { TooltipComponent } from echarts/components import { TreeChart } from echarts/charts import { C…

复试专业前沿问题问答合集10-1——区块链与加密货币

复试专业前沿问题问答合集10-1——区块链与加密货币 区块链与加密货币安全以及6G通信的基础知识问答: 区块链以及加密货币相关的基础安全知识 包括区块链如何确保交易安全、共识机制的作用、加密货币钱包的保护措施、智能合约的工作原理以及如何防范潜在的网络攻击。这些知…

vue项目实现---用户在页面没有操作5分钟时退出登录

方案1: 后端处理 (1)用户切换页面或者点击按钮时需要发送请求接口,如果后端判断在5分钟之内没有请求,然后将前端的token失效 方案2: 前端处理 (1)在main.js中创建全局的事件监听器来实现对键盘抬起事件和鼠标点击事件的监听 试例:Vue 项目中全局监听键盘抬起事件和鼠标点击…