机器人路径规划:基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(提供Python代码)

news2024/12/22 22:55:00

一、深度优先搜索算法介绍

深度优先搜索算法(Depth-First-Search)的基本思想是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。算法步骤如下:

1.访问顶点v;

2.依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;

3.若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。

二、部分代码

import math

import matplotlib.pyplot as plt

show_animation = True


class DepthFirstSearchPlanner:

    def __init__(self, ox, oy, reso, rr):
        """
        Initialize grid map for Depth-First planning

        ox: x position list of Obstacles [m]
        oy: y position list of Obstacles [m]
        resolution: grid resolution [m]
        rr: robot radius[m]
        """

        self.reso = reso
        self.rr = rr
        self.calc_obstacle_map(ox, oy)
        self.motion = self.get_motion_model()

    class Node:
        def __init__(self, x, y, cost, parent_index, parent):
            self.x = x  # index of grid
            self.y = y  # index of grid
            self.cost = cost
            self.parent_index = parent_index
            self.parent = parent

        def __str__(self):
            return str(self.x) + "," + str(self.y) + "," + str(
                self.cost) + "," + str(self.parent_index)

三、部分结果

四、完整Python代码

见下方联系方式

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

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

相关文章

PTA-练习3

目录 实验4-2-3 换硬币 实验4-2-4 输出三角形字符阵列 实验4-2-5 输出整数各位数字 实验4-2-6 梅森数 实验4-2-7 找完数 实验4-2-9 水仙花数 实验6-2 英文字母替换加密(大小写转换后移1位) 实验6-5 简单计算器 实验6-10 统计单词的长度 实验4-2…

财富池指标公式--通达信主力资金指标公式,主力资金流向怎么看?

今日分享的通达信主力资金指标公式,是一个分析主力资金进出的指标。 具体信号说明: 当紫色的起涨点主力资金线和红色的拉升资金同时上传0线,并且紫色的拉升线超过资金线,大盘进入派发阶段,后市看涨,是参考…

pinia 的选项式和组合式的不同写法和持久化的方法

pinia 是vue3推荐的状态管理插件,它对标的是vue2中使用的vuex pinia 的引入方法 npm 安装 pinia在 src/store/index.js 中 创建一个pinia 的实例,并导出 在项目中的 main.js 中引入 2 中的pinia 并且使用 app.use(pinia) main.js中 import pinia from…

100天精通Python(实用脚本篇)——第118天:基于selenium和ddddocr库实现反反爬策略之验证码识别

文章目录 专栏导读一、前言二、ddddocr库使用说明1. 介绍2. 算法步骤3. 安装4. 参数说明5. 纯数字验证码识别6. 纯英文验证码识别7. 英文数字验证码识别8. 带干扰的验证码识别 三、验证码识别登录代码实战1. 输入账号密码2. 下载验证码3. 识别验证码并登录 书籍推荐 专栏导读 …

第111讲:Mycat实践指南:固定Hash算法分片下的水平分表详解

文章目录 1.固定Hash算法分片的概念1.1.固定Hash算法的概念1.2.固定Hash算法是如何将数据路由到分片节点的 2.使用固定Hash算法分片对某张表进行水平拆分2.1.在所有的分片节点中创建表结构2.2.配置Mycat实现固定Hash算法分片的水平分表2.2.1.配置Schema配置文件2.2.2.配置Rule分…

VMware虚拟机和主机之间无法复制粘贴,移动文件,重新安装vmware-tools变灰,VMware Tools继续运行脚本未能在虚拟机中成功运行。

起初,虚拟机只是无法和主机之间进行复制粘贴,移动文件。查询了很多资料,反反复复地安装卸载vmware-tools,但是都没有成功。通过这篇文章:虚拟机安装VMware Tools的两种方法_vmware tools有3种安装方式-CSDN博客 安装了vmware_too…

PCIE收发时序了解

文章目录 一、Pcie的发送时序1.1 不带数据的TLP包1.2 带数据的TLP包1.3 连续发送数据的TLP包 二、Pcie的接收时序2.1 不带数据的TLP包2.2 带数据的TLP包2.3 连续接收数据的TLP包 三、riffa框架和用户channel的接口3.1 RX接口波形:3.2 TX接口波形: 一、Pc…

用python写网络爬虫:3.urllib库进一步的使用方法

文章目录 异常处理URLErrorHTTPError设置超时时间 链接的解析、构造、合并urlparse方法urlsplit方法urljoin方法urlencode方法parse_qs方法quote方法 Robots 协议Robots 协议的结构解析协议 参考书籍 在上一篇文章:用python写网络爬虫:2.urllib库的基本用…

SpringBoot3整合Knife4j4.x版本(Swagger3、OpenApi3)

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: SpringBoot3整合Knife4j4.x版本(Swagger3、OpenApi3) ⏱️ 创作时间&a…

【每日力扣】131.分割回文串与450.删除二叉搜索树中的节点

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害。 131.分割回文串 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的…

C#使用MiniExcel读取excel表格文件

使用MiniExcel读取excel表格文件 MiniExecl提供了几种读取方法。 准备测试数据 测试类: public class Person{public int Id { get; set; }public string Name { get; set; }public string Description { get; set; }public double Value { get; set; }}测试数据…

伦敦数据科学与Scikit-learn:一次探索与实践的旅程

1.题目 Data Science London正在举办一场关于Scikit-learn的聚会。 这个比赛是尝试、分享和创建 sklearn 分类能力示例的练习场(如果这变成了有用的东西,我们可以跟进回归或更复杂的分类问题)。Scikit-learn(sklearn)…

Django项目不显示图片,路径找不到

1.问题 创建Django项目简单写一个网页,文字能显示,图片却无法加载,路径错误,找不到图片。 2.背景 我的项目结构 C:. ├─.idea │ └─inspectionProfiles ├─app01 │ ├─migrations │ ├─templates │ │ ├─app0…

postgres让别人连接自己本地的库

本地安装了postgres,一般只能自己连接,如果别人想要连接我们自己的库,需要修改postgres的配置。 找到pg.gba.conf,路径是:postgres安装路径/PostgreSQL/data 使用记事本打开这个文件,将别人的ip填入其中即…

Python数学建模-2.5Pandas库介绍

2.5.1Pandas基本操作 Pandas是一个强大的Python数据分析库,它提供了快速、灵活且富有表现力的数据结构,设计初衷是为了处理关系型或标记型数据。Pandas的基本操作涵盖了数据的读取、处理、筛选、排序、分组、合并以及可视化等多个方面。 以下是一些Pan…

CentOS7环境——yum安装nginx

目录 1.修改yum源为阿里云 2.下载wget 3.下载阿里云的 CentOS-Base.repo 到/etc/yum.repos.d/ 4.清空原本yum缓存 5.生成新的阿里云的yum缓存,加速下载预热数据 6.下载epel-release 7.下载nginx 8.启动并检查nginx状态 1.修改yum源为阿里云 cp /etc/yum.re…

QQ 截图工具独立版安装使用

前言 之前截图一直使用的QQ截图,相比于微信截图,QQ截图还支持长截图,总体来说,QQ截图是我使用过的最好的截图工具 。但是现在公司不让用微信、QQ、钉钉等通讯软件,要求使用公司自研的通讯软件,这样就不能使…

EMQX 实践

MQTT 核心概念 发布订阅 MQTT 基于发布订阅模式,它解耦了消息的发送方(发布者)和接收方(订阅者),引入了一个中间代理的角色来完成消息的路由和分发。发布者和订阅者不需要知道彼此的存在,他们…

IIS上部署.netcore WebApi项目及swagger

.netcore项目一般是直接双击exe文件,运行服务,今天有个需求,需要把.netcore项目运行在IIS上,遇到了一个小坑,在这里记录一下。 安装IIS,怎么部署站点,这些过于简单就不细说了,不知道…

java学习之路-方法讲解

目录 1.方法概念及使用 1.1什么是方法 1.2方法定义 1.3 方法调用的执行过程 1.4 实参和形参的关系(重要) 1.5 没有返回值的方法 2.方法重载 3.方法递归 3.1递归概念 3.2递归执行过程分析 3.3递归练习 代码示例1 代码示例2 1.方法概念及使用 1.1什么是方法 方法就是…