Hybrid A* (混合A*)路径规划算法

HybridAStar算法是一种结合A*算法和车辆动力学的路径规划方法,它在连续空间上搜索最短路径并考虑车辆的非完整性约束。与A*不同,HybridA*不进行空间离散化,而是利用Dubins或Reeps-Shepp模型。算法通过两种可接受的启发式函数(constrained和unconstrained)进行节点扩展,兼顾障碍物和车辆限制。路径平滑是算法的一个关键方面,确保生成的轨迹实际可行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结

HybridAStar算法主要是在A* 基础上考虑车辆动力学相关的搜索算法,其放弃了A* 中对搜索空间离散化,利用Dubins或者Reeps-Shepp来考虑自车能够前进的位置,使得规划的轨迹满足车辆的非完整性约束,但是该Hybrid A* 牺牲了算法的完备性和最优性。
1.在连续空间上扩张节点搜索最短路径
2.路径平滑
Hybrid A* 算法与A* 算法的差异对比如下表所示
请添加图片描述如下图所示,最左侧图是A算法的结果,最右侧是Hybrid A算法。(中间为A* 算法变种)
在这里插入图片描述
Hybrid A* 算法结构与A*算法流程极其类似,核心区别在于(1)生成子节点,(2)启发式函数设计。其伪代码如下
在这里插入图片描述

车辆非完整性约束

在这里插入图片描述
假设简单单车运动学模型
请添加图片描述
可以发现车辆运动需要满足下列的条件:
请添加图片描述

节点扩展

节点扩展主要是利用不同转弯角度生成不同的短距离节点,首先会根据局部轨迹是否碰撞决定是否评估该节点。如果无碰撞,可以利用生成节点的弧长来决定cost,当然也可以考虑转向带来的cost和行进方向变化的cost。

对于每个子节点,考虑节点到达的格子,
1.如果节点到达格子,且该格子不在closed set,表明这个格子还未被扩展,那么继续扩展评估。

2.如果格子不在open set (表明这个格子还未被之前任意节点扩展到达)且如果父节点的cost-so-far加上扩展到子节点到当前格子的cost小于当前节点的cost-so-far, 该新节点被认为是父节点的子节点, 同时更新g函数,并利用启发式函数估计cost-to-come,同时把子节点加入到open set.
在这里插入图片描述
在这里插入图片描述

启发式函数

Hybrid A*中使用两种启发式函数: constrained heuristic和unconstrained heuristic,其代表不同的节点扩展(expansion)的方式。

Constrained heuristic考虑车辆非完全性限制忽略环境障碍物。该启发式函数考虑车辆当前方向角(heading)和转向半径(turning radius),为了自车接近目标节点时候能够保持正确的姿态。常用的启发式函数值可以使用Dubins和Reeps-Shepp曲线计算两点之间的最短距离,所以该启发式函数式是可接受的(admissible)。

Unconstrained heuristic只考虑障碍物忽视车辆非完全性限制。该启发式函数可以完全基于当前点到目标点的最短路径距离计算。常用的启发式函数可以使用欧式距离等,所以该启发式函数也是可接受的(admissible)。

因为两个启发式函数都是可接受的,只需要去两者之间的最大值作为最终的启发式函数值。

请添加图片描述其中,l ( x )为扩展节点距离函数, d(x,xg​)为当前节点到目标节点之间的函数。

为了提高算法的效率,该启发函数值可以被存在查找表(lookup table)。

在这里插入图片描述

路径平滑

请添加图片描述请添加图片描述

### 混合A*算法用于车辆路径规划的原理 混合A*Hybrid A*算法是在传统A*基础上发展而来,专门针对具有运动学约束的机器人或汽车等实体进行优化。此版本不仅考虑了从起点到终点的空间位置变化,还特别关注于物体的姿态调整,比如方向角度以及转弯半径等因素[^2]。 #### 启发式函数的设计 对于车辆而言,在接近目标节点的过程中维持正确的姿态至关重要。为此,启发式部分会引入特定参数来评估这些因素的影响。具体来说,常用的方法是采用Dubins或是Reeds-Shepp模型来估算两个配置间最短行驶轨迹长度,从而构建出一个合理的估计成本值。这样的设置确保了即使存在复杂的环境条件,也能找到一条既安全又高效的行车线路。 ```python import math def dubins_distance(start, end, turning_radius): """计算基于Dubins曲线的距离""" dx = start[0] - end[0] dy = start[1] - end[1] dtheta = abs(math.atan2(dy, dx) - start[2]) straight_line_dist = math.sqrt(dx ** 2 + dy ** 2) curve_length = min(dtheta * turning_radius, 2 * math.pi * turning_radius) return straight_line_dist + curve_length ``` ### 应用实例分析 假设有一个自动驾驶场景下的停车场内自动泊车任务。给定起始点S和目的地T的位置坐标及其初始朝向θ_s与期望到达后的最终朝向θ_t。此时就可以运用上述提到的技术框架来进行求解: - 初始化阶段:创建OpenList保存待探索的状态;CloseList记录已访问过的状态; - 迭代过程中:每次从未处理列表中选取F(n)=G(n)+H(n)最小的那个作为当前考察对象N_c,并将其移至Closed List; - 终止条件满足时停止循环——当发现某个候选方案正好位于终点附近并符合预设的方向要求,则回溯整个过程形成完整的行动序列输出结果。 通过这种方式,不仅可以有效避开静态障碍物,还能保证车辆按照预期的方式停靠到位,展示了混合A*算法的强大功能和灵活性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值