0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

自动驾驶中基于图搜索的常用路径规划算法介绍

汽车工程师 来源:智车科技 作者:智车科技 2021-04-25 18:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

自动驾驶汽车从A点行驶到B点,需要轨迹规划算法来进行全局规划,而具体都有哪些算法呢?这篇文章想和大家分享一下一类最常用的轨迹规划算法,基于图搜索的规划算法。

在开始介绍图搜索算法之前,先简单介绍一下自动驾驶中的规划问题:规划模块处于自动驾驶软件框架中的中间位置,其接收感知、定位、地图发来的上游信息,输出一条安全、平稳、舒适的轨迹给到控制模块,因此起到了一个承上启下的作用,可以说是影响自动驾驶中舒适性及安全性最重要的一环。而传统意义上的规划问题可以分为两个步骤。

前端负责粗粒度的路径查找,搜索出一条可行路径;后端负责细粒度的轨迹生成,生成出一条控制模块可以很好执行的平滑轨迹。而这篇文章想要探讨的,就是前端路径搜索中一种最常用的方法,基于图搜索的路径规划算法。

图搜索基础

图是数据结构中非常重要的一个概念,包含了节点和边。在自动驾驶中,通常可以将地图存储为栅格地图,每一格就代表了图的节点,格与格之间的连线就代表了边。

上图展示了一种无向图,即节点之间的连线是没有指向的。而在实际场景中,往往每条边(道路)不仅仅需要考虑距离信息,还需要考虑方向信息、路口拥堵情况、车流量等等,因此自动驾驶中往往构建的为有向图、权重图等等。除此之外,合理地对自动驾驶场景下的地图进行分割也是保证规划效果的一个很重要的基础,不能分割太密集导致规划搜索的效率太低,也不能太粗略从而导致某些场景下明明存在可行解却无法搜索到。 构建完图之后,具体的规划过程其实就是一个搜索的过程,即如何在给定起点及终点的条件下快速搜索出一条满足期望的最优路径。在代码实现上,整个过程需要维护一个容器(container),具体的操作分为三个步骤:移除、扩展、塞入,以此不停循环,直至搜索到终点。下面介绍几种最常用的搜索算法。

搜索算法DFS & BFS

了解了图搜索的基础之后,接下来介绍两种最基础的搜索算法:深度优先搜索(DFS)和广度优先搜索(BFS)。深度优先顾名思义,从起点开始,按照某个顺序一条路走下去,直至不能再继续为止,然后回到上一节点,再换另一条路走下去;而广度优先则是每一步都扩展同一层的所有可能节点,一层一层扩展下去,直到某一层搜索到终点为止。可以看到深度优先搜索的过程是一条路走到底后,最后访问的节点最先拿来处理,整个过程可以用栈(stack)来表示,符合“后进先出”的原则;而广度优先搜索的过程是一层中先访问的节点拿来处理,可以用队列(queue)来表示,符合“先进先出”的原则。

那对于搜索算法来说,哪一种算法好一些呢?可以看下下面这张图,相同的场景下,BFS可以给出一条最短路径,而DFS虽然速度很快,但随机性很大,无法给出一条最优路径,这一缺陷使得我们不得不抛弃DFS,目前的主流基于图搜索的规划算法,原理其实都是基于BFS延伸出来的。

但是BFS其实也有一个很严重的问题,就是其遍历的无效节点过多,从而导致搜索效率太慢,上面左图中的深灰色格点就展示了在搜索过程中,所需要访问的节点,可以看出大多数的访问其实都是无用的,不能给最终的搜索提供任何帮助。针对这一缺陷,就引入了Heuristic Search(启发式搜索),即加入终点信息,从而使得搜索的目标更明确,避免过多的无效搜索。而基于这一改进提出的算法就是GBFS(Greedy Breath-First Search)。

BFS和DPS是根据先入或者后入的顺序来选择要处理的节点,之中不考虑任何终点相关的信息,而GBFS则是将与终点的距离考虑进来,构造一个规则来挑选依次要访问的节点。与终点的距离有多种形式,最常用的三种为Euclidean Distance、Manhattan Distance以及Diagonal Distance。

举个例子,在实现BFS算法时,上图中起点周围的8个邻居节点会一起存储进容器中,由于右上角的节点距离终点更近,因此再弹出时首先弹出该节点,基于该节点再进行扩展,从而加快了搜索效率。从下图中可以看出,算法过程中所访问的节点减少了很多,搜索的目标性更加明确,从而极大提升了搜索效率。

Dijkstra算法和A*算法

有了上面的基础,理解路径规划中的Dijkstra和A*算法就很容易了。Dijkstra算法其实BFS的进阶版,其可以用于处理带权重边的地图,因此更适合在实际场景中使用。在该算法中,通常采用优先队列(priority queue)来作为访问容器,这是由于优先队列(《key, value》这种形式)可以根据设定的key值自动进行排序,在Dijkstra中key值可以设定为和起点的距离,由于没考虑和终点的距离信息,因此还不能显示出优先队列的优势,但之后的A*算法里可以看出利用这种结构的方便性。Dijkstra算法的伪代码如下图所示:

A*算法和Dijkstra算法的唯一区别就在于优先队列中排序的依据不同,即key值不同。不同于Dijkstra,A*在存储节点时,还会考虑和终点的距离(可以类比GBFS之于BFS),其key值计算可以表示为:

278f66ee-a4b7-11eb-aece-12bb97331649.png

其中即为Heuristic Function,有了这个指向信息,A*算法可以更快地找到终点,避免了许多的无效搜索。其伪代码如下图所示:

这里我们可以看出优先队列的优势了,我们只需要每次计算的值并将其存储进优先队列,它就会自动根据其值进行排序,因此每次就可以取出容器的顶部值即为的最小值。在同一场景下,它们的实际效果如下图所示,可以看出由于A*避免了许多无效节点的访问,效率提升很多。 而这又引出了另一个问题,Dijkstra由于无差别的搜索可以保证最短路径,A*带有强指向型的搜索方式,能保证结果最优吗?这其实取决于A*的启发函数设定,为了保证最优性,需要保证启发函数是admissible的,即启发函数的值需要小于等于实际上该点到终点的距离。

27ce5df4-a4b7-11eb-aece-12bb97331649.png

如果启发式函数是admissible的,那么A*的最终搜索结果就是最优的。其实这也很好理解,因为如果启发函数的选择实际上大于到终点的实际距离,那么依据该规则进行的排序搜索,必然会漏掉距离最短的那条路。因此如果我们需要A*给出最短路径的话,我们可以将启发函数设定为欧式距离或者对角距离,而不是曼哈顿距离。

以上就是基于图搜索的常用路径规划算法介绍,欢迎大家交流指正。

原文标题:技术|自动驾驶规划算法解析——图搜索篇

文章出处:【微信公众号:汽车工程师】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    89

    文章

    38111

    浏览量

    296657
  • 自动驾驶
    +关注

    关注

    791

    文章

    14671

    浏览量

    176538

原文标题:技术|自动驾驶规划算法解析——图搜索篇

文章出处:【微信号:e700_org,微信公众号:汽车工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    VLA能解决自动驾驶的哪些问题?

    、语言表达和动作控制这三者整合到一个统一的模型框架。 与传统自动驾驶系统将感知、预测、规划、控制拆解为多个独立模块的做法不同,VLA可以缩短“看见什么”和“如何行动”之间的鸿沟,构建一个能直接将视觉输入和语言描述映射到具体动作
    的头像 发表于 11-25 08:53 178次阅读
    VLA能解决<b class='flag-5'>自动驾驶</b><b class='flag-5'>中</b>的哪些问题?

    语言模型是否是自动驾驶的必选项?

    [首发于智驾最前沿微信公众号]自动驾驶的发展并非一成不变,在传统自动驾驶系统,通常采用分层的体系架构。最底层是感知层,负责将摄像头、雷达、激光雷达等传感器数据转化为车辆能够“看到”的环境信息;其上
    的头像 发表于 11-14 16:23 3498次阅读
    语言模型是否是<b class='flag-5'>自动驾驶</b>的必选项?

    无引导线的左转场景下,自动驾驶如何规划轨迹?

    对于很多新手司机来说,在无引导线左转的场景,开车会非常谨慎,但依旧会很好地处理好这一操作。但对于自动驾驶汽车来说,其行驶需要有较为明显的参考线,在没有白色虚线、没有箭头感知“我的车道在哪儿”的交通
    的头像 发表于 09-18 09:12 438次阅读
    无引导线的左转场景下,<b class='flag-5'>自动驾驶</b>如何<b class='flag-5'>规划</b>轨迹?

    边聊安全 | 高效信息管理模块:支持自动驾驶安全的数据库解决方案

    的危害事件。ISO21448标准涵盖了感知、规划和控制系统的验证和确认,确保车辆在安全性和可靠性方面表现优异。尤其是规划算法的有效性,直接影响自动驾驶
    的头像 发表于 09-05 16:19 4820次阅读
    边聊安全 | 高效信息管理模块:支持<b class='flag-5'>自动驾驶</b>安全的数据库解决方案

    低速自动驾驶与乘用车自动驾驶在技术要求上有何不同?

    [首发于智驾最前沿微信公众号]自动驾驶技术的发展正朝着多元化方向迈进,其中低速自动驾驶小车(以下简称“低速小车”)因其在物流配送、园区运维、社区服务等场景的独特价值而受到广泛关注,且现阶段已经深入
    的头像 发表于 07-14 09:10 672次阅读
    低速<b class='flag-5'>自动驾驶</b>与乘用车<b class='flag-5'>自动驾驶</b>在技术要求上有何不同?

    自动驾驶汽车是如何准确定位的?

    [首发于智驾最前沿微信公众号]随着自动驾驶技术的快速发展,车辆的精准定位成为安全驾驶路径规划的核心基础。相比于传统人类驾驶依赖路标和视觉判
    的头像 发表于 06-28 11:42 884次阅读
    <b class='flag-5'>自动驾驶</b>汽车是如何准确定位的?

    AGV小车的动态路径规划算法揭秘

    在现代仓储、物流和制造业自动导引车(AGV)的身影日益普遍。它们如同勤劳的工蚁,在复杂的环境自主穿梭,高效地完成物料搬运任务。而支撑AGV实现智能导航的核心技术之一,便是路径
    的头像 发表于 06-17 15:54 1162次阅读
    AGV小车<b class='flag-5'>中</b>的动态<b class='flag-5'>路径</b><b class='flag-5'>规划算法</b>揭秘

    新能源车软件单元测试深度解析:自动驾驶系统视角

    焦点是否落在目标物体上。某自动驾驶公司借此发现模型在夜间过度关注路灯而非行人。 ‌ 实时性保障: ‌时间感知测试框架(TAF)注入时间戳探针,监控函数执行耗时。例如,某路径规划算法因内存泄漏导致响应
    发表于 05-12 15:59

    具身智能工业机器人路径规划算法成为破局关键

    在工业4.0与智能制造深度融合的今天,传统路径规划算法已难以满足动态生产环境的需求。面对复杂场景下的高精度避障、实时决策与多任务协同挑战,具身智能工业机器人路径规划算法成为破局关键。作
    的头像 发表于 03-28 15:01 730次阅读

    自动驾驶规控算法验证到底需要什么样的场景仿真软件?

    ModelBase-AD凭借其优秀的静态场景模型、随机交通流模型、整车动力学模型,为各大主机厂和供应商提供了准确的自动驾驶规控算法验证仿真环境,提升了自动驾驶规控算法验证效率。
    的头像 发表于 02-11 14:16 1986次阅读
    <b class='flag-5'>自动驾驶</b>规控<b class='flag-5'>算法</b>验证到底需要什么样的场景仿真软件?

    2024年自动驾驶行业热点技术盘点

    感知轻地图以及纯视觉等。这些技术的出现,也代表着自动驾驶正从概念走向现实,今天就给大家来盘点2024年自动驾驶行业出现的那些技术热点!   城市NOA:迈向精细化驾驶的关键路径 城市N
    的头像 发表于 01-14 10:48 1151次阅读

    从《自动驾驶地图数据规范》聊高精地图在自动驾驶的重要性

    自动驾驶地图作为L3级及以上自动驾驶技术的核心基础设施,其重要性随着智能驾驶技术的发展愈发显著。《自动驾驶地图数据规范》(DB11/T 2041-2022)由北京市
    的头像 发表于 01-05 19:24 2869次阅读
    从《<b class='flag-5'>自动驾驶</b>地图数据规范》聊高精地图在<b class='flag-5'>自动驾驶</b><b class='flag-5'>中</b>的重要性

    【「具身智能机器人系统」阅读体验】2.具身智能机器人的基础模块

    方法和增量搜索方法。 另外,还有基于强化学习的自动驾驶规划等等。 个人觉得,这部分内容是整个具身智能的基石,没有具身智能的基础模块就不会有具身智能的自主性和智能型。
    发表于 01-04 19:22

    如何实现自动驾驶规控算法的仿真验证

    随着自动驾驶技术的不断进步,市场需求的持续增长,自动驾驶产业迎来广阔的发展前景。L3及以上级别的自动驾驶技术有望逐步落地普及,为人们带来更加安全、便捷、高效的出行体验。
    的头像 发表于 12-30 09:39 1582次阅读
    如何实现<b class='flag-5'>自动驾驶</b>规控<b class='flag-5'>算法</b>的仿真验证