规划控制 | 详解自动驾驶轨迹规划Hybrid A*算法

作者 | 涅索斯衬衫  编辑 | 汽车人

原文链接:https://zhuanlan.zhihu.com/p/610206756?

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

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心技术交流群

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

传统的A*算法是一种基于图搜索(Graph Search)的启发式搜索算法,启发式搜索在一定程度上避免了无效的搜索路径,提高了搜索效率。它作为一种最优优先策略的搜索算法,在规划中将车辆看作一个质点,但仅考虑了(x, y)两个维度。

2907a929dd83af19a8e1cbc919e17ab2.png
Fig.1 A*与Hybrid A*算法对比

传统的A* 算法能够在二维网络中生成一条粗略的路径,它保证了空间的联通性,却并未充分考虑车辆的运动学约束。不同于差速、全向机器人等不存在运动约束的场景,其生成的轨迹几乎无法被车辆直接跟踪执行。而作为改进后的A* 算法(Hybrid A*)增加了theta维度,优化了节点拓展的方式,它不仅考虑位置方向(x,y)的拓展,还考虑了运动方向theta的拓展,是三维的(x, y, theta),状态是连续的。相较于A* 算法的四叉树或八叉树的方法来扩展节点(如图所示),其规划的路径更符合车辆的运动特性,保证了轨迹的可行驶性。

9de6547d2f310cb11afd893128175d84.png
Fig.2 A* 与Hybrid-A* 节点拓展示意图

Hybrid-A*算法在规划路径时主要分为如下几个步骤:

  1. 搜索空间的离散化:将空间划分成小网格(grid);

  2. 搜索树的扩展(Analytic Expansions):利用RS/Dubins等曲线连接当前节点与目标节点,并对该轨迹进行碰撞检测,若无碰撞,则结束搜索,其规划轨迹为当前路径到目标节点的path1+当前节点回溯到起始节点的路径path2;若碰撞,则放弃该曲线,并从Open List中重新寻找节点,继续搜索;

  3. 路径优化:经过Hybrid-A*得出的路径往往不是最优的,通常存在不必要的转向,为了获得更好的预期驾驶行为,还需对轨迹进行进一步优化(如轨迹平滑/插值等);

773ca33159b26aaeb037ccbf653b9057.png
Fig.3 梯度下降法平滑轨迹
  • 启发式的选择

对于A* 算法而言,在某一结点n处的代价函数可以表示为:

f(n) = g(n) + h(n)

式中,g(n)为状态空间中从初始点到当前节点n的实际代价;

------h(n)为当前节点n到目标节点最佳路径的估计代价;

在代价函数的选择上,Hybrid-A*结合实际运行情况以及车辆当前的位姿,对车辆的航向、档位、曲率以及方向等施加惩罚,使其更符合实际运动场景。

在A* 算法中,启发式一般采用两个节点间的距离之和,而Hybrid-A*算法完善了启发式函数h的定义,主要采用了如下两种启发式以提高搜索效率。

  1. non-holonomic-without-obstacles-heuristic:考虑车辆的运动约束但不考虑障碍物,一般使用RS曲线、Dubins曲线等;

  2. holonomic-with-obstacles-heuristic:考虑障碍物,不考虑车辆的运动约束;

66394538625883332b7da3c159d05e98.png
Fig.4 启发式对比
  • 项目参考

[1] karlkurzer/path_planner

该项目为karl kurzer的硕士课题,其论文及链接:Path Planning in Unstructured Environments: A Real-time Hybrid A* Implementation for Fast and Deterministic Path Generation for the KTH Research Concept Vehicle

8733e639cb3e2857d97c2ce762acc24a.png
Fig.5 规划轨迹

[2] HAStar_ParkingPlanner

该项目主要是基于Apollo开源项目中Hybrid A* 算法实现泊车的路径规划方法,分别进行了垂直和水平车位的测试,算是一个阉割版,效果有待提升。

5d212cdb6d71518e50c041b2eeb160e8.png
Fig.6 垂直车位

[3] Matlab Hybrid_A*

该项目为Hybrid- A*的Matlab版本实现,对于理解其实现的原理比较有帮组。

06c3bd8b4d4b722860b69ffd81e50d3d.png
Fig.7 泊车示意图
  • 参考文献

[1] Dolgov D , Thrun S , Montemerlo M , et al. Practical Search Techniques in Path Planning for Autonomous Driving[J]. ann arbor, 2008.

[2] Dolgov D , Thrun S , Montemerlo M , et al. Path Planning for Autonomous Vehicles in Unknown Semi-structured Environments[J]. The International Journal of Robotics Research, 2010, 29(5):485-501.

[3]古月居_混合A*算法研究

[4] 自动驾驶运动规划-Hybird A*算法

[5] Gradient-Informed Path Smoothing for Wheeled Mobile Robots (GRIPS) (github.com)

国内首个自动驾驶学习社区

近1000人的交流社区,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

9679f396a858047e2f16b2f3d91e302e.jpeg

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

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

2647fdc09f8f4b6a5239ba52622eab68.jpeg

添加汽车人助理微信邀请入群

备注:学校/公司+方向+昵称

Hybrid A*算法Hybrid A* Algorithm)是一种用于路径规划算法,在Matlab中的代码详解如下: 1. 创建网格地图:首先,在Matlab中创建一个二维网格地图,用数字表示不同的地形或障碍物。可以使用Matlab中的矩阵来表示地图,其中不同的元素值代表不同的地形。 2. 定义启发式函数:Hybrid A*算法使用启发式函数来评估每个节点的代价值,其中代价值越小代表距离目标点越近。常用的启发式函数有欧几里得距离和马哈顿距离。在Matlab中,可以直接定义一个函数来计算启发式函数的值。 3. 实现A*算法:A*算法是一个经典的搜索算法,用于在网格地图上搜索最短路径。在Matlab中,可以实现A*算法的搜索过程,包括对节点的扩展、计算节点的代价值和更新节点的信息等步骤。 4. 实现车辆运动模型:Hybrid A*考虑了实际车辆的运动特性,因此需要定义一个车辆的运动模型。一般可以使用一些简化模型来表示车辆的运动,比如转向角和转向速度等。在Matlab中,可以通过函数来实现车辆的运动模型。 5. 进行路径搜索:在Matlab中,可以使用上述实现的A*算法和车辆运动模型来进行路径搜索。首先从起点开始,根据A*算法搜索下一个最佳节点,然后使用车辆运动模型生成一系列的候选路径。从这些候选路径中选择与目标点最接近的路径作为最终的路径。 6. 可视化路径结果:最后,可以将搜索得到的路径在Matlab中进行可视化展示。可以使用Matlab中提供的绘制函数来绘制地图、起点、目标点和搜索得到的路径等。 需要注意的是,具体的Hybrid A*算法的实现细节可能会有所差异,以上只是一个大致的框架。实际应用中,还需要根据具体的问题进行一些自定义的修改和调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值