自动驾驶路径规划五大常用算法(Dijkstra/人工势场/图搜索等)

2023-05-16

编辑 | 希骥智能网联汽车

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【规划控制】技术交流群

后台回复【规划控制综述】获取自动驾驶、智能机器人规划控制最新综述论文!

无人驾驶系统的核心可分为四个部分:感知、定位、规划和控制。规划承接环境感知,并下启车辆控制,是实现无人驾驶的关键技术之一。

规划是指无人车为了到达某一目的地而做出决策和计划的过程,其规划出来的轨迹是带速度信息的路径,对于无人驾驶车辆而言,这个过程包括从起始地到达目的地,要避开障碍物,同时要不断优化行车路线和轨迹行为,以保证车辆安全舒适到达目的地。

根据这两点要求可将路径规划分为全局路径规划和局部路径规划,全局路径规划为静态规划,局部路径规划为动态规划。全局路径规划需要掌握所有的环境信息,根据环境地图的所有信息进行路径规划;局部路径规划只需要与传感器实时采集环境信息,了解环境地图信息,然后确定出所在地图的位置及其局部的障碍物分布情况,从而可以选出从当前结点到某一子目标结点的最优路径。

常用路径规划算法大致可分为以下几类:

01 最常用的传统经典算法

1.算法

Dijkstra算法是由计算机科学家Edsger W. Dijkstra在1956年提出的。Dijkstra算法用来寻找图形中节点之间的最短路径的算法。采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。Dijkstra算法在扩展的过程中,都是取出未访问结点中距离该点距离最小的结点,然后利用该结点去更新其他结点的距离值。

优点:如果最优路径存在,那么一定能找到最优路径。

缺点:有权图中可能是负边;扩展的节点很多,效率低。

2.A*算法

A* 算法发表于1968年,A* 算法是将Dijkstra算法与广度优先搜索算法(BFS, Breath First Search)二者结合而成,通过借助启发式函数的作用,能够使该算法能够更快的找到最优路径。A*算法是静态路网中求解最短路径最有效的直接搜索方法。

贪婪的最佳优先搜索算法与Dijkstra有着类似的工作方式,但是使用的是以每个节点到达终点的距离作为优先级,Dijkstra是以每个节点距离起点的移动代价进行优先级排序的,优先选择代价最小的作为下一个遍历的节点。最佳优先搜索算法比Dijkstra算法运行更快。

Dijkstra算法不同之处在于,A* 算法是一个“启发式”算法,它已经有了一些我们告诉它的先验知识,如“朝着终点的方向走更可能走到”。它不仅关注已走过的路径,还会对未走过的点或状态进行预测。因此A* 算法相较于Dijkstra而言,调整了进行BFS的顺序,少搜索了哪些“不太可能经过的点”,更快地找到目标点的最短路径。另外一点,由于H选取的不同,A * 算法找到的路径可能并不是最短的,但是牺牲准确率带来的是效率的提升。

优点:利用启发式函数,搜索范围小,提高了搜索效率;如果最优路径存在,那么一定能找到最优路径。

缺点:A*算法不适用于动态环境;不适用于高维空间,计算量大;目标点不可达时会造成大量性能消耗。 

3.D*算法

D* 算法(Dynamic A Star)是卡耐基梅隆机器人中心的Stentz在1994年提出的主要用于机器人探路,并且美国火星探测器上就是应用的D* 路径规划算法。A* 算法适用于在静态路网中寻路,在环境变化后,往往需要replan,由于A* 不能有效利用上次计算的信息,故计算效率较低。D* 算法由于储存了空间中每个点到终点的最短路径信息,故在重规划时效率大大提升。A* 是正向搜索,而D* 特点是反向搜索,即从目标点开始搜索过程。在初次遍历时候,与Dijkstra算法一致,它将每个节点的信息都保存下来。

优点:适用于动态环境的路径规划,搜索效率高

缺点:不适用于高维空间,计算量大

02 人工势场法

人工势场法是由Khatib在1985年提出的一种基于虚拟力场的局部路径规划算法,该算法的基本思想是:假设行驶目标点对车辆产生引力,而障碍物对车辆产生斥力,控制车辆沿势场中“势峰”间的“势谷”前进。其中,引力与车辆到行驶目标点的距离成正比,斥力与车辆到障碍物的距离成反比。通过求解车辆所受引力和斥力的合力作为车辆的合外力来控制车辆的行驶速度和运动方向。该方法具有易于数学表达、反应速度快、易于实现算法与环境形成闭环控制等优点,但它在求解过程中极易出现局部最优解而导致产生死锁现象。

优点:规划出的路径一般是比较平滑且安全;人工势场法是一种反馈控制策略,具有一定的鲁棒性

缺点:容易陷入局部最优的问题;距离目标点较远时,引力特别大,斥力相对较小,可能会发生碰撞;当目标点附近有障碍物时,斥力非常大,引力较小,很难到达目标点

03 基于图搜索的运动规划方法

路径规划首先需要建立规划模型,利用状态空间法描述规划模型是建立非线性优化模型的关键,图搜索算法可以很好地解决该问题。

基本思想是:将车辆的初始位姿和目标位姿映射到一个状态空间,然后将状态空间离散化,并将其构成一个图,随后从图中搜索满足约束条件的最优轨迹。目前主流的方法主要包括Voronoi图、栅格地图与代价地图、Lattice状态图、驾驶通道图等。为了兼顾实时性与障碍物约束空间处理能力,一般采用Lattice和通道图方法生成安全轨迹。

图搜索算法包括Dijkstra算法和A*算法等,以及A*算法的变种。

04 基于随机采样的路径规划算法

随机采样方法的基本思想是在构型空间中随机采样,并筛选出满足性能需求的最优采样点,具备概率完备性,但其最大的缺点是舒适性较差,且计算效率随着障碍物数量的增长而下降。最常用的方法包括概率路标算法(PRM)以及快速搜索随机树算法(RRT)。

1.概率路线图方法(PRM)

PRM算法首先在可行使空间中进行离线采样,构造出路线网络图(Roadmap),随后根据起始点与目标点在路线网络图中进行查询,得到可行的行驶路径。整个过程分为预处理阶段和查询阶段。

1.预处理阶段:对状态空间内的安全区域均匀随机采样n个点,每个采样点分别与一定距离内的邻近采样点连接,并丢弃掉与障碍物发生碰撞的轨迹,最终得到一个连通图。

2.查询阶段:对于给定的一对初始和目标状态,分别将其连接到已经构建的图中,再使用搜索算法寻找满足要求的轨迹。

优点:适用于高维空间和复杂约束的路径规划问题;搜索效率高,搜索速度快

缺点:概率完备但不是最优

2.快速扩展随机树方法(RRT)

RRT算法是适用于高维空间,通过对状态空间中的采样点进行碰撞检测,避免了对空间的建模,较好地处理带有非完整约束的路径规划问题,有效地解决了高维空间和复杂约束的路径规划问题。该算法是概率完备但不是最优的算法。

05 基于曲线插值方法

曲线插值法的核心思想就是基于预先构造的曲线类型,根据车辆期望达到的状态(位置、速度、加速度、航向角等),将这些期望值作为边界条件代入曲线类型进行方程求解,获得曲线的相关系数。所有系数计算出后,曲线轨迹规划完成。包括多项式参数化模型、样条曲线、螺旋线、回旋曲线和贝塞尔曲线等变种参数化曲线方法。

1.多项式参数化模型

设计思想是根据车辆的初始状态和目标状态对变道轨迹进行规划,使车辆在指定的时间到达相邻车道。试图在用函数f(x,y,t)描述的函数族类中寻找一条轨迹,能充分描述车辆从起始位置过渡到目标位置整个过程的动态特性。随着多项式次数的变大,曲线的拟合效果越好,但次数的增多也会导致参数求解的运算量指数增长,通常选用五次多项式进行变道轨迹的规划。在x方向、y方向分别选用五次多项式构造变道轨迹的曲线簇,如下式所示。

5d6bf45d6c6fb6467693849c5a3b6faf.png

在道路结构的约束下,由五次多项式规划的曲线无论是在纵向上还是在侧向上都能达到期望的位置,车辆能在规定的变道时间内平顺的完成变道,且轨迹曲线的曲率在起始点和终了点都能达到零的期望值。

但是,基于多项式的轨迹规划方法也存在变道时间和终了点必须预先已知的局限,对多项式中参数的确定需要有较充分的条件,对纵向车速变化的情况和实际车辆变道过程中终了点并不唯一的机动性和自适应性较差。

多项式曲线通常有三次、五次和七次多项式曲线,每个能确定的每一个期望点的维度数不一样,三次多项式是位置和速度;五次多项式是位置、速度和加速度;七次多项式是位置、速度、加速度和加加速速度。

2.贝塞尔曲线

贝塞尔曲线于1962年,由法国工程师皮埃尔·贝济埃(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计,贝塞尔曲线最初由保尔·德·卡斯特里奥于1959年运用德卡斯特里奥算法开发,以稳定数值的方法求出贝塞尔曲线。

基于贝塞尔缺陷的路径规划方法通过控制点的选取来改变曲线的形状,通常定义N阶贝塞尔曲线由N+1个控制点组成。

 da5373d4ba8784118bbd89876f82914f.jpeg

贝塞尔曲线表达式为:

 c0847b56608c361d120d054ca2390516.jpeg

Pi、t分别是控制点i的坐标值与时间参数,上图中式子2是Bi(t)是Bernstein多项式。

因其线条光滑且曲率值小的特点而被广泛地应用于轨迹曲线规划中。 

以上几种算法简单总结:

最经典普适的Dijkstra算法,如有最优路径存在一定能找到最与路径,但是扩展的结点多,效率低下;和A*算法适合全局路径规划,利用启发式函数,搜索范围小,提高了搜索效率,但不适用于高维空间,计算量大;D*算法适用于局部路径规划,搜索效率高,但是计算量大。

图搜索法适合做全局规划,算法收敛慢,环境建模复杂,计算效率低;随机采样法适用于局部范围场景,计算速度较快,但是难以胜任复杂条件下的运动规划问题。

曲线插值法求解路径的速度较快,并且能够满足路径平滑性、可行性,但是无法充分发挥车辆的全部运动能力;人工势场法计算速度快,实时性也好,但存在局部最优解、复杂势场难以搭建的情况。

以上为几大常见规划算法分享。

来源:汽车学堂Automooc

3257cc606200444df69c001befe6e888.png

自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、规划控制、模型部署落地、自动驾驶仿真测试、硬件配置、AI求职交流等方向;

加入我们:自动驾驶之心技术交流群汇总!

自动驾驶之心【知识星球】

想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球(三天内无条件退款),日常分享论文+代码,这里汇聚行业和学术界大佬,前沿技术方向尽在掌握中,期待交流!

5454004a7b941f455b63e64c0e4be7e0.jpeg

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动驾驶路径规划五大常用算法(Dijkstra/人工势场/图搜索等) 的相关文章

随机推荐

  • Ubuntu20.04由于分辨率问题安装界面显示不完整

    使用vmware安装ubuntu的时候 xff0c 由于分辨率的问题 xff0c 导致安装界面显示不完整 xff0c button被隐藏 xff0c 无法进行下一步鼠标操作 同学遇到的问题 xff0c 迟迟不能解决 xff0c 参考别人的解
  • 数据结构排序算法及代码整理

    排序 xff1b 1 插入排序 xff08 直接插入排序和希尔排序 xff09 2 选择排序 xff08 直接选择排序和堆排序 xff09 3 交换排序 xff08 冒泡排序和快速排序 xff09 4 归并排序 5 基数排序 xff0d x
  • 排序算法性能比较

    各种排序方法的综合比较 结论 排序方法 平均时间 最坏时间 辅助存储 简单排序 O n2 O n2 O 1 快速排序 O nlogn O n2 O logn 堆排序 O nlogn O nlogn O 1 归并排序 O nlogn O nl
  • c++标准容器类(表格介绍)

    1 STL有6种序列容器类型 xff08 1 xff09 vector 它提供对元素的随即访问 xff0c 在尾部添加和删除元素的时间是固定的 xff0c 在头部或中部插入和删除元素的复杂度为线性时间 xff08 2 xff09 deque
  • 各大公司薪水一览表

    转自 http blog sina com cn s blog 4997a23a0100b2xc html 最近终于把自己给卖了 xff0c 这几个月来自己陆陆续续的面试的有30多家公司 xff0c 主要是IT公司 xff0c 准备把今年我
  • strtol

    转自 xff1a http hi baidu com qwpsmile blog item 9bc44efa4f41018a9f514637 html 今天 xff0c 在review 一些代码的时候 xff0c 看到了strtol 这个函
  • 学会做自己的朋友

    转自 http www 5xue com modules article view article php a2233 你是否经历过 xff1a 我们常会怪罪自己 xff0c 给自己很低的评价 xff0c 也习惯对结果做最坏的打算 xff1
  • 二值信号量和互斥信号量的区别

    互斥信号量和二进制信号量的区别 互斥型信号量必须是同一个任务申请 xff0c 同一个任务释放 xff0c 其他任务释放无效 同一个任务可以递归申请 二进制信号量 xff0c 一个任务申请成功后 xff0c 可以由另一个任务释放 二进制信号量
  • 敏捷开发

    这两个圆圈表示不同的视角上的敏捷实践 xff0c 包括开发者视角和项目管理的视角 接下来从里向外进行介绍 xff0c 因为有些实践我了解得不清楚 xff0c 如果下面有哪些说得不对的地方也请大家指出 Test Driven Developm
  • c++结构体的二进制文件,python如何解析

    c 43 43 结构体的二进制文件 xff0c python如何解析 场景分析 现有如下场景 xff1a 有一个二进制文件需要解析成可读数据已知条件 xff1a 该文件符合c 43 43 结构体对应的结构体数据 xff0c 因此我们可以通过
  • LeetCode刷题记录(Python3)——线性表

    LeetCode27 移除元素 简单 问题描述 xff1a 给定一个数组nums和一个值val xff0c 你需要原地 移除所有数值等于val的元素 xff0c 并返回移除后数组的新长度 不要使用额外的数组空间 xff0c 必须仅使用 O
  • 使用百度网盘上传大文件到云服务器

    因为需要把几个7G大小左右的数据上传至服务器 xff0c 但无奈使用的是共享服务器 xff0c 上传速度非常慢 管理员建议可以用奶牛快传 xff08 目前收费 xff09 中转 xff0c 百度搜了一下 xff0c 百度网盘有相同作用 xf
  • ubuntu操作系统中TCP客户端和服务器端的开发

    网络编程在Python中的应用 xff0c 三次握手和四次挥手的理解 TCP客户端和服务器端流程图 xff1a TCP客户端开发流程 xff1a 1 创建客户端套接字 2 和服务端套接字建立连接 3 发送数据 4 接收数据 5 关闭客户端套
  • sphinx 文档_Sphinx轻松漂亮的文档

    sphinx 文档 Sphinx是允许开发人员以纯文本格式编写文档的工具 xff0c 可轻松生成满足各种需求的格式的输出 使用版本控制系统跟踪更改时 xff0c 这将很有帮助 纯文本文档对于跨不同系统的协作者也很有用 纯文本是当前可用的最可
  • 经典激光雷达SLAM系统:LeGO-LOAM

    作者 密斯特李 编辑 汽车人 原文链接 xff1a https zhuanlan zhihu com p 511968459 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之
  • 经典激光雷达SLAM系统:LOAM-Livox

    作者 密斯特李 编辑 汽车人 原文链接 xff1a https zhuanlan zhihu com p 515732721 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之
  • SLAM中姿态估计的图优化方法比较(g2o/Ceres/GTSAM/SE-Sync)

    编辑 深蓝AI 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 后台回复 SLAM综述 获取视觉SLAM 激光SLAM RGBD SLAM等多篇综述 xff01 本文是对论文 A Compari
  • 多传感器融合 | 详解PointPainting和MVP

    作者 谷溢 编辑 深蓝AI 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心技术交流群 后台回复 多传感器融合综述 获取图像 激光雷达 毫米波雷达融合综述等干货资料 xff
  • 2022最新!视觉SLAM综述(多传感器/姿态估计/动态环境/视觉里程计)

    目录 摘要 视觉SLAM算法的发展 相关综述 VSLAM 设置标准 传感器和数据采集 目标环境 视觉特征处理 系统评估 语义等级 基于主要目标的VSLAM方法 目标一 xff1a 多传感器处理 目标二 xff1a 姿态估计 目标三 xff1
  • 自动驾驶路径规划五大常用算法(Dijkstra/人工势场/图搜索等)

    编辑 希骥智能网联汽车 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心 规划控制 技术交流群 后台回复 规划控制综述 获取自动驾驶 智能机器人规划控制最新综述论文 xff