首页 > 编程语言 >机器人路径规划:基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(提供Python代码)

机器人路径规划:基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(提供Python代码)

时间:2024-03-17 19:33:01浏览次数:25  
标签:index 路径 dist Python self 机器人 算法 节点

迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。它可以找到从一个起始节点到其他所有节点的最短路径。

一、算法介绍


Dijkstra算法采用贪心策略,通过逐步扩展已知最短路径集合来逐步确定最短路径。它使用一个距离数组来记录从起始节点到其他节点的当前最短距离,并通过不断更新距离数组来逐步确定最短路径。

二、算法描述


1. 创建一个距离数组dist[],用于记录起始节点到其他节点的当前最短距离。初始化dist[],将起始节点的距离设为0,其他节点的距离设为无穷大。
2. 创建一个集合visited[],用于记录已经确定最短路径的节点。
3. 重复以下步骤,直到visited[]包含所有节点:
   a. 从未访问的节点中选择一个距离最小的节点u,将其加入visited[]。
   b. 对于节点u的所有邻居节点v,更新其距离数组dist[]:
      - 如果通过节点u可以获得更短的路径,则更新dist[v]为新的最短距离。
4. 最终,dist[]数组中记录了起始节点到其他所有节点的最短距离。

三、算法流程


1. 初始化dist[]数组和visited[]集合。
2. 将起始节点的距离设为0。
3. 重复以下步骤,直到visited[]包含所有节点:
   a. 从未访问的节点中选择一个距离最小的节点u。
   b. 将节点u加入visited[]。
   c. 对于节点u的所有邻居节点v,更新其距离数组dist[]:
      - 如果通过节点u可以获得更短的路径,则更新dist[v]为新的最短距离。
4. 返回dist[]数组作为最短路径结果。

四、部分代码

import matplotlib.pyplot as plt
import math

show_animation = True


class Dijkstra:

    def __init__(self, ox, oy, resolution, robot_radius):
        """
        Initialize map for a star planning

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

        self.min_x = None
        self.min_y = None
        self.max_x = None
        self.max_y = None
        self.x_width = None
        self.y_width = None
        self.obstacle_map = None

        self.resolution = resolution
        self.robot_radius = robot_radius
        self.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 grid
            self.y = y  # index of grid
            self.cost = cost
            self.parent_index = parent_index  # index of previous Node

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

五、部分结果

六、完整Python代码

见下方联系方式

标签:index,路径,dist,Python,self,机器人,算法,节点
From: https://blog.csdn.net/weixin_46204734/article/details/136787695

相关文章

  • python中类的__new__方法和__init__方法
    python文章目录python一、python中类的__new__方法和__init__方法二、第三行解释说明instance=super().__new__(cls)三、__init__,__new__返回的是什么?四、debug代码运行中cls,instance,self都是什么东西怎么理解cls是<class'__main__.MyClass'>,instance是<__main__.......
  • 【Linux】linuxCNC+Qt+Opencascade+kdl+hal 实时6轴机器人控制器
    CNC机器人程序框架机器人模型笔记:debian重启后无法打开共享目录最新版搜狗输入法安装后不支持中文,需要安装旧版本的sogoupinyin_4.0.1.2800_x86_64.deb可用数控机器人在哪些领域应用有优势数控机器人在多个领域都展现出了显著的优势,特别是在需要高精度和......
  • Python进行金融特征的估计和分类,及如何构建深度RNN
    8.5金融特征RNN的应用不仅限于原始价格或收益率数据,还可以包括附加特征以改进它的预测性能。以下Python代码向数据集中添加了典型的金融特征。In[77]:data=generate_data()In[78]:data['r']=np.log(data/data.shift(1))In[79]:window=20data['mom']=......
  • 自学Python day 5
    今天是周日,时间比较多,所以今天的内容很多首先了解了什么是比较运算符以及如何使用result=10>5print(f"10>5的结果是:{result},类型是:{type(result)}")result="it"=="itt"print(f"字符串it和itt是否相等,结果是:{result},类型是:{type(result)}")#比较运算符的......
  • Python闭包是什么?
    问1:Python闭包是什么?在Python中,闭包(Closure)是一种函数,它能够记住自己被定义时的环境。闭包允许访问定义在闭包函数之外的变量。闭包有三个特点:必须有一个内嵌函数。内嵌函数必须引用外部函数中的变量。外部函数的返回值必须是内嵌函数。闭包的作用:闭包可以保持外部函数......
  • Python - 安装依赖包,发现与其他包版本冲突 ResolutionImpossible
    问题表现Tofixthisyoucouldtryto:1.loosentherangeofpackageversionsyou'vespecified2.removepackageversionstoallowpipattempttosolvethedependencyconflictERROR:ResolutionImpossibleERROR:Cannotinstalltensorboard==1.10.0,tens......
  • Python模块百科_操作系统接口_os[四]
    Python模块百科_操作系统接口_os[四]os---多种操作系统接口【第一部分】一、相关模块1.1os.path文件路径1.2fileinput文件读取1.3tempfile临时文件和目录1.4shutil高级文件和目录1.5platform操作系统底层模块二、关于函数适用性的说明2.1与操作系统相同的......
  • Python面向对象编程:合集篇(类、对象、封装、继承和多态)
    Python语言设计之初,就是为了面向对象。所以Python的面向对象更加易于理解。如果你以前学过Java、C++你大概就懂得什么是面向对象,但如果你是第一门编程语言就选择Python,那么也不要害怕。这篇文章,我们将会尽量详细的讲解,把Python面向对象编程的知识讲清楚。接下来我们先来简单的......
  • 基于Django高校校园二手书籍交易系统设计与实现(Pycharm+Python+Mysql)
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • python——代码格式化
    风格与PEP8编写可读代码的一种简单方式是遵循风格指南,它概述了软件项目应该遵循的一组格式化规则。Python改进提案(PythonEnhancementProposal 简称PEP8)就是由Python核心开发团队编写的这样一种风格指南。PEP8甚至还建议:知道什么时候应该不一致——风格指南的建议并非放之......