自动驾驶:路径规划概述

自动驾驶:路径规划概述

  • 全局路径规划
    • Dijkstra算法
    • A*算法
    • RRT(随机快速探索树)算法
    • PRM(概率路线图)算法
  • 局部路径规划
    • DWA(动态窗口法)算法
    • TEB(时间弹性带)算法
    • Lattice Planner算法
    • EM Planner算法

本博客从一些常见的全局路径规划算法和局部路径规划算法出发,介绍了它们的工作原理和优缺点。

全局路径规划

以全局地图,起始点和终点为输入,全局轨迹为输出,规划出一条无碰撞、路径最短且较为平滑的路径。

Dijkstra算法

Dijkstra算法是一种用于图中最短路径搜索的经典算法,由荷兰计算机科学家Edsger W. Dijkstra于1956年提出。它被广泛应用于网络路由、地图导航、运输规划等领域。Dijkstra算法通过找到从一个起始节点到所有其他节点的最短路径来解决问题。

原理

  1. 初始化:选择一个起始节点,将起始节点的距离设置为0,将所有其他节点的距离设置为无穷大。
  2. 选取最近节点:从未处理的节点中选择距离起始节点最近的节点。初始时,这个节点就是起始节点。
  3. 更新距离:对于选中的节点,计算从起始节点经过它到达其邻居节点的距离。如果通过选中节点到达邻居节点的距离小于邻居节点当前的距离,更新邻居节点的距离为新计算的距离。
  4. 标记为已处理:将选中的节点标记为已处理,表示已找到从起始节点到达它的最短路径。
  5. 重复步骤2至4:重复选取最近节点、更新距离和标记为已处理的过程,直到所有节点都被处理或者目标节点被处理。
  6. 路径回溯:一旦目标节点被处理,可以从目标节点回溯到起始节点,构建最短路径。

优点

  • 确保最优解: Dijkstra算法保证找到的路径是从起始节点到目标节点的最短路径,前提是所有边的权重必须为非负数。
  • 适用于单源最短路径问题: Dijkstra算法通常用于解决单源最短路径问题,即从一个起始节点到所有其他节点的最短路径。
  • 易于理解和实现: 算法逻辑相对简单,易于理解和实现。

缺点

  • 无法处理负权重边: Dijkstra算法不能处理带有负权重边的图,因为它的工作原理基于不断减小节点的距离,负权重边可能导致无限循环。
  • 不适用于大规模图: 在大规模图中,Dijkstra算法的计算复杂度较高,可能不适用于实时应用。

A*算法

A算法(A-star算法)是一种启发式搜索算法,用于在图或图类问题中找到从起点到目标点的最短路径。这个算法结合了Dijkstra算法的最短路径性质和启发式搜索的优势,被广泛应用于路径规划、游戏AI、机器人导航和地图路线规划等领域。

原理

  1. 初始化:选择一个起始节点,将起始节点的代价设置为0,并将其放入一个待探索节点列表中。同时,为每个节点记录一个估计到目标节点的代价,通常使用启发式函数(heuristic function)来估计。
  2. 选择节点:从待探索节点列表中选择一个节点,通常是具有最小总代价(实际代价加上估计代价)的节点。初始时,起始节点是唯一的候选。
  3. 扩展节点:对于选中的节点,遍历它的邻居节点。计算从起始节点经过当前节点到达邻居节点的实际代价,并加上从邻居节点到目标节点的估计代价。如果这个总代价比邻居节点当前的总代价小,更新邻居节点的总代价,并将当前节点设置为邻居节点的父节点。
  4. 标记节点:将选中的节点标记为已探索,从待探索节点列表中移除。
  5. 重复步骤2至4:重复选择、扩展和标记节点的过程,直到找到目标节点或者待探索节点列表为空。
  6. 路径回溯:一旦找到目标节点,可以从目标节点回溯到起始节点,构建最短路径。

优点

  • (有条件)确保最优解: A*算法保证找到的路径是从起始节点到目标节点的最短路径,前提是启发式函数满足一定条件(被称为“一致性”或“单调性”)。
  • 高效性: A*算法通常比纯粹的Dijkstra算法更快,因为它有能力通过启发式函数引导搜索,减少不必要的节点扩展。
  • 适用性广泛: A*算法适用于各种问题,包括路径规划、游戏AI、机器人导航和地图路线规划等。

缺点

  • 启发式函数选择: A*算法的性能高度依赖于所选择的启发式函数。选择不合适的启发式函数可能导致算法不准确或不高效。

  • 存储需求: A*算法需要存储和管理待探索节点列表,对于大规模问题可能需要较多的内存。

RRT(随机快速探索树)算法

RRT(Randomized Rapidly-Exploring Tree)是一种用于路径规划的随机采样算法,最初由Steven M. LaValle于1998年提出。RRT旨在解决机器人或其他自主体的运动规划问题,使它们能够在未知或复杂的环境中找到有效路径。

原理

  1. 初始化:从起始点开始,创建一棵树,该树仅包含起始点。
  2. 随机采样:在地图空间中随机生成一个点,这个点通常是随机的,但也可以考虑环境的先验知识。
  3. 连接到树:找到离采样点最近的树上的节点,然后从这个节点向采样点生成一条边。这个边的生成通常遵循一些规则,例如最大距离限制,以确保树的扩展不会太快。
  4. 重复:重复步骤2和3,直到生成树的一部分接近目标区域。在每一步,RRT都在树上添加一个新节点和一条新边,以逐步扩展搜索空间。
  5. 连接到目标:一旦树的一部分靠近目标点,就可以在树上找到一条路径,从起始点连接到目标点。
  6. 路径优化(可选):可以对生成的路径进行优化,以提高路径的平滑性和效率。

优点

  • 适应高维度环境: RRT适用于高维度状态空间,因此对于具有大量自由度的机器人或问题来说非常有用。
  • 多样化的路径: 由于随机性质,RRT能够生成多样化的路径,有助于克服局部最小值问题。
  • 实时规划: RRT的增量性质使其适用于实时路径规划,可以在机器人运动时重新规划路径。

缺点

  • 不能确保最优路径: RRT不一定总是找到全局最优路径,它更关注于搜索过程的快速探索和多样性。
  • 收敛速度不确定: RRT的收敛速度依赖于随机采样和树的生长规则,因此在某些情况下可能需要较长时间才能找到合适的路径。
  • 有限的环境模型: RRT假设了机器人可以自由移动,不考虑动力学约束,因此在某些情况下可能不适用。

PRM(概率路线图)算法

PRM(Probabilistic Roadmap)是一种用于路径规划的概率算法,特别适用于高维度和复杂的环境。PRM算法通过在地图上随机生成一组采样点,然后连接这些点来构建一个图,从而生成路径。PRM算法在机器人导航、运动规划和自主机器人领域得到广泛应用。以下是PRM算法的基本工作原理:

原理

  1. 采样:随机在地图上生成一组采样点,这些点通常是机器人可以合法到达的位置。采样点的数量和分布可以根据问题的复杂性和需求进行调整。
  2. 连接采样点:对于每个采样点,检查其附近是否有其他采样点,如果有,则将它们连接起来,形成边。连接两个采样点的边通常表示机器人可以在这两个点之间移动的路径。
  3. 检查可通行性:对于连接的边,进行可通行性检查,以确保路径不会与障碍物相交。如果某条边不满足可通行性要求,将其删除。
  4. 路径搜索:使用标准路径搜索算法(如Dijkstra或A*)在生成的图上查找最短路径。起始点和目标点通常与最近的采样点连接,从而确保路径在图中。
  5. 路径优化(可选):可以对生成的路径进行优化,以提高路径的平滑性和效率。

优点

  • 适应高维度环境: PRM算法适用于高维度状态空间,对于具有大量自由度的机器人或问题非常有用。
  • 支持多个运动约束: PRM算法可以轻松地集成多个运动约束,例如最小转弯半径、最大速度、最大加速度等,以满足不同机器人的运动要求。
  • 全局路径规划: PRM算法可以用于全局路径规划,确保找到连接起始点和目标点的路径。
  • 预先规划多个路径: 通过生成一组采样点,PRM算法可以预先规划多个路径,以备不时之需。

缺点

  • 构建路线图需要时间: 构建PRM的路线图可能需要大量计算时间,特别是在高维度环境中。
  • 路径搜索复杂度: 路径搜索阶段的计算复杂度取决于图的大小和形状,可能在某些情况下较高。
  • 不一定最优: PRM算法不一定总是找到全局最优路径,它的性能取决于采样点的分布和数量。

局部路径规划

以局部地图,周围环境信息作为输入,局部轨迹为输出,规划出一条无碰撞满足运动学或动力学约束的轨迹,常用于避免碰撞、满足舒适性等要求和实时根据周围环境进行路径的调整。

DWA(动态窗口法)算法

DWA(Dynamic Window Approach)算法是一种用于移动机器人路径规划和避障的实时控制方法。它通常用于机器人在动态环境中避免碰撞和实时规划路径。DWA算法是一种模型预测控制方法,它通过在机器人的状态空间中生成一系列可能的运动轨迹,然后评估每个轨迹的性能来选择最佳行动。

原理

  1. 状态空间建模:将机器人的状态空间表示为位姿(位置和方向)和速度(线速度和角速度)的组合。这个状态空间描述了机器人在环境中的位置和运动状态。
  2. 生成运动轨迹:在状态空间中生成一系列可能的运动轨迹,通常通过在速度空间(线速度和角速度)中采样来实现。这些轨迹代表了机器人可能的运动选择。
  3. 评估轨迹:对于每个生成的轨迹,评估它们的性能。性能评估通常包括两个方面:运动轨迹能否到达目标位置(目标导向性),以及轨迹是否避开了障碍物(避障性)。这些评估指标通常基于预测模型和环境感知。
  4. 选择最佳行动:选择性能最佳的轨迹作为机器人的下一步行动。通常,最佳轨迹被定义为在目标导向性和避障性之间取得平衡的轨迹。
  5. 控制机器人:执行选择的行动,控制机器人进行移动。机器人执行当前轨迹上的运动命令,然后重新进行路径规划以进行下一步移动。
  6. 实时更新:重复上述步骤以实现实时路径规划和避障,不断更新机器人的运动。

优点

  • 实时性: DWA算法适用于实时运动规划,能够在机器人移动时快速生成适应环境变化的轨迹。
  • 适应性: 由于DWA算法的实时性,它能够适应动态环境中的障碍物移动和变化。
  • 避障能力: DWA算法通过避免评估避障性能来避免碰撞,使机器人能够在复杂环境中导航。

缺点

  • 局部搜索: DWA算法通常是局部搜索方法,因此不一定总是找到全局最优路径。
  • 性能依赖于参数: DWA算法的性能高度依赖于参数的选择,特别是与性能评估相关的参数。这需要进行调试和优化。

TEB(时间弹性带)算法

TEB(Time-Elastic Band)算法是一种用于机器人运动规划和轨迹优化的方法,特别适用于移动机器人在动态环境中的路径规划。TEB算法旨在解决机器人在复杂和动态环境中的路径规划问题,以确保机器人能够安全、高效地移动。

原理

  1. 初始化:
    确定机器人的初始状态,包括位置和速度。
    设置时间分辨率(时间步长)和速度分辨率(速度步长)等参数。
    建立一个时间-空间轨迹,包含初始状态。

  2. 目标设定:
    确定机器人的目标位置。

  3. 路径生成:
    在时间-空间轨迹中,逐个时间步骤生成可能的位置-速度对(位姿和速度)。
    考虑机器人的动力学模型,以确保生成的轨迹在物理上合理。
    考虑速度分辨率,生成多个不同速度的轨迹分支。

  4. 避障检测:
    对于每个生成的轨迹,检查轨迹上的每个时间步骤是否与障碍物相交。
    如果某个时间步骤与障碍物相交,将该轨迹标记为不合法。

  5. 性能评估:
    对于合法的轨迹,评估它们的性能。
    性能评估通常包括目标导向性(轨迹是否接近目标位置)、避障性(轨迹是否避开障碍物)以及平滑性等。

  6. 轨迹选择:
    根据性能评估选择最佳的轨迹或轨迹分支作为机器人的下一步行动。
    最佳轨迹通常是在目标导向性和避障性之间取得平衡的轨迹。

  7. 控制机器人:
    执行选择的轨迹上的运动命令,将机器人移动到下一个状态。

  8. 实时更新:
    在机器人移动过程中,不断更新轨迹和重新规划,以适应环境的动态变化。

  9. 达到目标:
    当机器人接近目标位置并满足终止条件时,算法结束。

优点

  • 动态适应性: TEB算法具有动态调整轨迹的能力,可以在实时感知到的环境信息下进行路径的重新规划。这使得它适用于处理动态障碍物和环境变化的情况。
  • 轨迹平滑性: TEB算法倾向于生成平滑的轨迹,有助于提高机器人的运动舒适性和稳定性。
  • 速度控制: TEB算法允许对机器人的速度进行动态调整,以适应环境中的障碍物密度和机器人的运动能力。
  • 支持多个运动约束: TEB算法可以轻松地集成多个运动约束,例如最小转弯半径、最大速度、最大加速度等,以满足不同机器人的运动要求。

缺点

  • 计算复杂度: TEB算法的计算复杂度相对较高,特别是在高维度状态空间中,可能导致实时性方面的挑战。
  • 对参数敏感: TEB算法依赖于许多参数,如时间分辨率、空间分辨率等。选择适当的参数对算法的性能至关重要,但可能需要一些调试。

Lattice Planner算法

Lattice Planner是一种基于采样的路径规划算法,适用于高维度状态空间和具有复杂运动约束的机器人。它将机器人的状态空间建模为一个高维度格点图,通过采样生成候选轨迹、利用各项指标评估来寻找最佳路径。

原理

  1. 状态空间建模: 将机器人的状态空间表示为高维度格点图。
  2. 生成候选轨迹: 在状态空间中生成一组候选轨迹,每个轨迹代表机器人可能的运动路径。
  3. 碰撞检测: 对每个候选轨迹进行碰撞检测,确保轨迹不与障碍物相交。
  4. 性能评估: 对合法的轨迹进行性能评估,考虑目标导向性、避障性、平滑性和舒适性等指标。
  5. 选择最优轨迹: 确定从起始状态到目标状态的最优路径。
  6. 轨迹优化: 可选地对生成的路径进行优化。

优点

  • 适应高维度状态空间和复杂运动约束。
  • 支持多个运动约束。

缺点

  • 计算复杂度较高。
  • 参数选择对性能影响较大。

EM Planner算法

EM Planner是一种采用期望最大化(Expectation-Maximization, EM)方法的路径规划算法,用于解决机器人在未知环境中的路径规划问题。它通过估计未知环境的概率分布来规划路径。

环境建模: 使用传感器数据构建环境的概率地图,其中包括障碍物的位置和不确定性。
EM算法: 使用EM算法来估计未知环境的概率分布,包括障碍物的分布和不确定性。
路径规划: 基于估计的环境概率分布,使用路径规划算法来规划路径。
轨迹执行: 执行规划的路径,同时不断更新环境模型和路径以适应新的传感器数据。

优点

  • 适用于未知环境和不确定的环境,能够估计环境的概率分布。

缺点

  • 较高的计算复杂度。

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

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

相关文章

pandas读取文件的时候出现‘OSError: Initializing from file failed’

报错原因: pandas.read_csv() 报错 OSError: Initializing from file failed,一般由两种情况引起:一种是函数参数为路径而非文件名称,另一种是函数参数带有中文。 原代码: data pd.read_csv(csv文件.csv) data导入文…

QT:绘图

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPaintEvent> //绘图事件class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent 0);~Widget();void paintEvent(QPaintEvent *event); //重写绘图事件void timerEve…

计算机竞赛 深度学习猫狗分类 - python opencv cnn

文章目录 0 前言1 课题背景2 使用CNN进行猫狗分类3 数据集处理4 神经网络的编写5 Tensorflow计算图的构建6 模型的训练和测试7 预测效果8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习猫狗分类 ** 该项目较为新颖&a…

【自定义类型】--- 位段、枚举、联合

&#x1f493;博客主页&#xff1a;江池俊的博客⏩收录专栏&#xff1a;C语言进阶之路&#x1f449;专栏推荐&#xff1a;✅C语言初阶之路 ✅数据结构探索&#x1f4bb;代码仓库&#xff1a;江池俊的代码仓库&#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐ 文…

OCI 发布了容器运行时和镜像规范!

7 月 19 日是开放容器计划Open Container Initiative&#xff08;OCI&#xff09;的一个重要里程碑&#xff0c;OCI 发布了容器运行时和镜像规范的 1.0 版本&#xff0c;而 Docker 在这过去两年中一直充当着推动和引领的核心角色。 我们的目标是为社区、客户以及更广泛的容器行…

问答区混赏金的集合贴

此贴专记录CSDN问答社区里面&#xff0c;一些回答者在临近结题时胡乱回答&#xff0c;只为分取结题赏金的人。 为了截图方便&#xff0c;给回答者点赞和点踩不是对其回答的认可和不认可&#xff0c;只是为了方便截图而已 文章目录 第一位——夜深人静的哝玛 (PS:与本人的头像和…

为什么都说NFS读写性能差,如何进行优化?

使用基于NFS协议存储系统的同学经常遇到的问题是在小文件比较多的情况下性能会比较差。小文件访问性能差本身是可以理解的,但是NFS确实是太差了。不知大家是否深层次分析过,为什么NFS访问小文件性能会这么差? NFS文件系统与本地文件系统的差异在于多了一个网络传输的过程。…

基于or-tools的人员排班问题建模求解(JavaAPI)

使用Java调用or-tools实现了阿里mindopt求解器的案例&#xff08;https://opt.aliyun.com/platform/case&#xff09;人员排班问题。 这里写目录标题 人员排班问题问题描述数学建模编程求解&#xff08;ortoolsJavaAPI&#xff09;求解结果 人员排班问题 随着现在产业的发展&…

OpenGL之光照贴图

我们需要拓展之前的系统,引入漫反射和镜面光贴图(Map)。这允许我们对物体的漫反射分量和镜面光分量有着更精确的控制。 漫反射贴图 我们希望通过某种方式对物体的每个片段单独设置漫反射颜色。我们仅仅是对同样的原理使用了不同的名字:其实都是使用一张覆盖物体的图像,让我…

通讯网关软件013——利用CommGate X2ORACLE实现Modbus RTU数据转储ORACLE

本文介绍利用CommGate X2ORACLE实现从Modbus RTU设备读取数据并转储至ORACLE数据库。CommGate X2ORACLE是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;实现从Modbus RTU设备读取数据并转储至ORACL…

洛谷P5732 【深基5.习7】杨辉三角题解

目录 题目【深基5.习7】杨辉三角题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1传送门 代码解释亲测 题目 【深基5.习7】杨辉三角 题目描述 给出 n ( n ≤ 20 ) n(n\le20) n(n≤20)&#xff0c;输出杨辉三角的前 n n n 行。 如果你不知道什么是杨辉三角&#xf…

Android Jetpack组件架构:ViewModel的原理

Android Jetpack组件架构&#xff1a;ViewModel的原理 导言 本篇文章是关于介绍ViewModel的&#xff0c;由于ViewModel的使用还是挺简单的&#xff0c;这里就不再介绍其的基本应用&#xff0c;我们主要来分析ViewModel的原理。 ViewModel的生命周期 众所周知&#xff0c;一般…

【进阶C语言】自定义类型

本节内容大致目录如下&#xff1a; 1.结构体 2.位段 3.枚举 4.联合&#xff08;共用体&#xff09; 以上都是C语言中的自定义类型&#xff0c;可以根据我们的需要去定义。 一、结构体 一些基础知识在初阶C语言的时候已经介绍过&#xff0c;在这里粗略概括&#xff1b;重…

C++17中std::filesystem::directory_entry的使用

C17引入了std::filesystem库(文件系统库, filesystem library)。这里整理下std::filesystem::directory_entry的使用。 std::filesystem::directory_entry&#xff0c;目录项&#xff0c;获取文件属性。此directory_entry类主要用法包括&#xff1a; (1).构造函数、…

Flutter笔记:滚动之-无限滚动与动态加载的实现(GetX简单状态管理版)

Flutter笔记 无限滚动与动态加载的实现&#xff08;GeX简单状态管理版&#xff09; 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq…

阿里云RDS关系型数据库详细介绍_多版本数据库说明

阿里云RDS关系型数据库大全&#xff0c;关系型数据库包括MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等&#xff0c;NoSQL数据库如Redis、Tair、Lindorm和MongoDB&#xff0c;阿里云百科分享阿里云RDS关系型数据库大全&#xff1a; 目录 阿里云RDS关系型数据库大全 …

通过containerd部署k8s集群环境及初始化时部分报错解决

目录 一.基础环境配置&#xff08;每个节点都做&#xff09; 1.hosts解析 2.防火墙和selinux 3.安装基本软件并配置时间同步 4.禁用swap分区 5.更改内核参数 6.配置ipvs 7.k8s下载 &#xff08;1&#xff09;配置镜像下载相关软件 &#xff08;2&#xff09;配置kube…

【视频去噪】基于全变异正则化最小二乘反卷积是最标准的图像处理、视频去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

stl格式-3D三角形

文章目录 什么是stl文件?格式首选stl的语法1.这是一个stl格式的文件:(ASCII码)2.下面先举个例子(难度略微提示)补充:关于\<\<我试了一下:这个法线你随便写好像也没问题\>> 3.来个立方体4.最后再写一个由三个直角形组成的立方体(直棱锥)5.amend 修正(右手定则,法线…

毛玻璃态计算器

效果展示 页面结构组成 从上述的效果可以看出&#xff0c;计算机的页面比较规整&#xff0c;适合grid布局。 CSS3 知识点 grid 布局 实现计算机布局 <div class"container"><form class"calculator" name"calc"><input type…