hybrid a*(混合A星算法-hybrid a star)

版权声明:本文为博主原创文章,转载注明来源。

  2010年,斯坦福首次提出一种满足车辆运动学的算法(Hybrid A*),并在(DARPA)的城市挑战赛中得以运用。

2Hybrid A*A*区别

 

 

Hybrid A*

A*

维数

H(n)

Max(Rends_Shepp, A*)

     Manhattan/Euclidean  

节点

车辆的运动学模型为节点(2)

二维平面坐标点(1)

节点与节点连接处

交点可以不是栅格顶点(4)

交点是栅格顶点(3)

缺点

不具有完备性

不满足车辆运动学特性

        (1)                       (2)                         (3)                                (4)

注:在实现Hybrid A*的过程中,要维持好A* 搜索树(和RRT类似)。当我们成功使用Reeds-Shepp曲线时,我们需要从节点反向从树枝到树根保留路径(在反向保留路径时,不仅仅是路径点,而是上图(2)中的一个运动模式----一段一段保存),然后在加上Reeds-Shepp曲线。一共两个部分,共同构成了Hybrid A*的路径。

 

注:本人在具体实现过程中,启发函数只用A*算法来进行估计,因为在斯坦福使用该算法的时候,使用Reeds-shepp来估计H(n)时,是离线的(貌似提前在计算出各个点到各个点的Reeds-shepp距离,然后直接调用加快速度)。

相关视频,欢迎访问

https://www.bilibili.com/video/av53164012/?p=1(本人使用ROS系统实现的hybrid a*)

 

### 混合A*算法实现路径规划 混合A*(Hybrid A*) 是一种扩展的经典A*算法,专门针对具有运动约束的移动机器人或车辆设计。相比于传统的A*算法仅考虑离散网格中的最短路径,混合A*引入了连续空间的概念,并结合车辆的动力学模型来生成平滑且可行的轨迹。 #### 原理概述 混合A*的核心思想是在传统A*的基础上增加对车辆动力学特性的建模。其主要特点如下: - **启发式函数**:除了计算从起点到当前节点的实际代价 \( g(n) \),还通过估算从当前节点到达目标点的成本 \( h(n) \) 来指导搜索方向[^1]。 - **状态表示**:不仅记录位置坐标 (x, y),还包括朝向角度 θ 和其他可能的状态变量,从而满足车辆的非完整约束条件[^4]。 - **动作集合**:定义一系列允许的动作集合作为候选转移操作,这些动作需符合特定类型的车辆动态特性,例如Reeds-Shepp曲线或者Dubins路径[^3]。 #### 关键步骤解析 以下是利用混合A*进行路径规划的主要组成部分: ##### 1. 初始化参数设置 初始化阶段需要指定初始状态、目标区域以及障碍物分布情况。此外还需调整权重因子以平衡探索效率与解的质量之间的关系[^2]。 ##### 2. 定义评价标准 对于每一个待评估的新节点\( n' \),总成本由两部分组成: \[ f(n') = g(n') + w_h \cdot h(n'),\] 其中, - \( g(n')\) 表示从起始点至该新节点的真实累计开销; - \( h(n')\) 则是对剩余路程的一个乐观估计值; - 参数\( w_h>0\) 控制着两种因素的重要性比例。 ##### 3. 动力学兼容性验证 每一步尝试扩展时都要检查所选行动是否会违反物理规律或是超出边界范围之外。只有那些既合法又合理的选项才会被加入开放列表继续考察。 ##### 4. 终止条件判断 当找到通往目的地的有效序列或者是穷尽所有可能性之后停止迭代过程。如果成功构建了一条完整的路线,则返回这条最优方案;反之则报告失败并退出程序执行流程。 #### MATLAB代码框架实例 下面给出一段简单的伪代码展示如何运用MATLAB编写一个基础版的混合A*求解器: ```matlab function path = hybrid_astar(startPose, goalRegion, mapData) % Initialization phase omitted here... openList = PriorityQueue(); closedSet = {}; push(openList,[startPose; computeCostToCome(startPose)]); while ~isempty(openList) currentNode = popLowestFValueNode(openList); if isGoalReached(currentNode,goalRegion) reconstructPathAndReturn(); end neighbors = generateValidNeighborsWithDynamicsConstraints(currentNode,mapData); foreach neighbor in neighbors do tentativeGScore = getGScoresOfParent() + costBetweenNodes(parentChildPair); if notInClosedSet(neighbor,closedSet) || betterThanExistingEntry(tentativeGScore) updateNeighborInfo(neighbor,tentativeGScore,...); insertIntoOpenListIfNecessary(neighbor,openList); markAsExplored(closedSet,neighbor); end endforeach; endwhile endfunction ``` #### 总结 综上所述,混合A*提供了一个强大的工具箱用来解决复杂环境下的自主导航挑战。尽管如此,在实际部署前仍需仔细权衡各种配置参数的选择及其潜在影响。
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值