• 632查看
  • 0回复

[规划决策] ADAS-路径规划算法A*算法详解与C++实战

[复制链接]


该用户从未签到

发表于 26-8-2023 14:58:40 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


“ 汽车智能路径规划应用已经深入我们的日常生活之中。随着城市交通的不断拥堵和汽车出行的普及,如何高效地规划行车路径成为了一个重要的挑战。A*算法作为导航早期应用一种启发式搜索算法,能够快速找到最短路径或最优解,被广泛应用于早期的汽车导航系统中。今天,我们将为您介绍A*算法的原理以及实现,您将学习了解到如何利用A*算法进行实时路径规划,运用在您的当下设计之中。”
ADAS-路径规划算法A*算法详解与C++实战w1.jpg

01—导航算法现状
导航算法是为了在给定的起点和终点之间找到最佳路径而设计的。它在现代社会中起着重要的作用,被广泛应用于汽车导航、物流配送、机器人AGM编队运等领域。

ADAS-路径规划算法A*算法详解与C++实战w2.jpg
常见的导航算法如下:Dijkstra算法:Dijkstra算法是一种基于图论的最短路径算法,它通过计算起点到所有其他节点的最短路径来确定最佳路径。尽管Dijkstra算法在小规模地图上表现良好,但在大规模地图和复杂网络中的效率较低。A*算法:
A*算法是一种常用的启发式搜索算法,本质上是对Dijkstra算法的优化,被广泛应用于路径规划和导航系统中。它通过评估当前节点的代价和启发函数的估计来选择最佳路径,并在时间和空间上提供了较高的效率。

基于实时交通信息的导航算法:

现代导航系统通常会考虑实时交通信息,以帮助驾驶者选择最佳路径,典型的如微软发布的CRP算法。这些算法使用实时交通数据,如道路速度、拥堵情况和事故报告等,来动态调整路径规划。

蚁群算法:

蚁群算法是一种模拟蚂蚁觅食行为的启发式算法,用于解决路径规划问题。蚁群算法通过模拟蚂蚁在搜索过程中释放信息素的行为,以找到最佳路径。它在动态环境和多目标优化中表现出一定的优势。

机器学习和深度学习:

近年来,机器学习和深度学习技术在导航算法中得到了广泛应用。通过训练神经网络模型,可以学习驾驶者的偏好和行为模式,并为其提供个性化的路径推荐。

导航算法正处于不断发展和创新的阶段。随着技术的不断进步和数据的丰富性,我们可以期待未来导航算法的更高效、个性化和智能化。接下来我们将介绍经典的A*算法以及动态规划是如何基于已知地图来完成最优的路径规划。

02—A*算法介绍
[2.1] 算法图例详解
A*算法是一种常用的启发式搜索算法,它结合了贪婪算法和Dijkstra算法的优点,能够高效地找到最佳路径。A*算法的主要有两个流程:初始化过程:将起点设置为当前节点,并将起点的代价设为0。创建一个开放列表和一个关闭列表,用于记录已访问和待访问的节点。
ADAS-路径规划算法A*算法详解与C++实战w3.jpg
循环搜索:进入一个循环,直到达到终点或开放列表为空,在每次循环中:a.选择下一个扩展节点并扩展邻居节点:从开放列表中选择一个节点,该节点被认为是最有可能的路径,这是通过估价函数计算得出的。然后将该点的邻居节点进行遍历,并计算每个邻居节点的代价。通常使用启发式函数(heuristic function)来估计,一般是当前节点到终点的预估代价。
ADAS-路径规划算法A*算法详解与C++实战w4.jpg
*假设只能上下左右移动,每个格的距离为1b. 移动到下一个节点:将选择的节点作为当前节点,并将其从开放列表中移至关闭列表中,表示已访问。
ADAS-路径规划算法A*算法详解与C++实战w5.jpg
*右侧格子代价为4,代价最小,因此右移。右移后上下代价相同,默认上下移动均可c. 更新邻居节点的代价和路径:对于每个邻居节点,如果它不在开放列表中,则将其添加到开放列表中,并更新其路径代价。如果它已经在开放列表中,比较新的代价与当前代价,如果新的代价更低,则更新代价和路径。最终最小路径搜索结果如下:
ADAS-路径规划算法A*算法详解与C++实战w6.jpg
*open/close转移示例与最小路径规划d. 判断是否到达终点:如果当前节点是终点,说明已找到最佳路径,算法结束。构建最佳路径:当达到终点时,通过回溯每个节点的父节点,可以构建出最佳路径。 A*算法通过启发式函数的选择和代价估计的更新,不断更新开放列表中节点的顺序,以便更快地找到最佳路径。它能够有效地平衡搜索效率和路径优化的需求,广泛应用于路径规划、游戏AI和机器人导航等领域。
[2.2] 算法实现
笔者使用github上一份开源代码修了一份基于c++在shell上可视化的A*算法,用户可以修改代码来进行地图搜索过程的动态显示,可以直观的表现算法运行的过程,源代码GitHub链接:https://github.com/JokerEyeAdas/AStarShellMapSearch在GitHub中我们也提供了一份可以在windows下直接运行的app,app在启动时会随机生成一张地图,并通过shell打印出来,需要注意的是,执行exe的shell要支持颜色显示,笔者实测使用git bash可以正常显示,powershell显示则会有问题。地图生成后软件会自动搜索最短路径并进行打印,显示结果如下:
ADAS-路径规划算法A*算法详解与C++实战w7.jpg

如果网络不好或者直接想要编译好的测试工程的同学可以后台私信我关键词《AStar算法源码》获取。03—结束语

感谢您阅读我们的公众号关于A*算法的介绍!希望我们的文章能够为您带来关于这一强大算法的深入了解。A*算法作为一种启发式搜索算法,在路径规划和导航领域发挥着重要的作用。它通过巧妙地结合贪婪搜索和Dijkstra算法的思想,能够高效地找到最佳路径,为用户提供准确而优化的导航体验。希望通过我们的文章,您对A*算法的工作原理和应用有了更清晰的认识。无论您是研究者、开发者还是对路径规划和导航感兴趣的读者,我们相信A*算法都能为您的工作和学习带来启发和价值。

如果您有任何问题、建议或者想要了解更多特定主题,请在评论区留言,我们将非常乐意与您交流和解答。感谢您的支持和关注,让我们继续探索和分享A*算法的精彩世界!

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 22-12-2024 17:27 , Processed in 0.266988 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.