混合A*算法---Hybrid A Star


0 Lattice Graph

考虑机器人运动模型下的路径规划中说道,不管是离散控制空间还是状态空间,生成的图形都是Lattice Graph。

在这里插入图片描述

但是,加入在离散的过程当中,发现因为当时份数选择的更多,就会导致离散时候彼此连接的很近,所以可以进行剪枝的操作。

在这里插入图片描述

那如何进行剪枝?最有效的是使用栅格地图直接网上套,即可完成,栅格地图的代表就是A Star算法。所以,所谓的混合A Star算法就是将A*与Lattice Graph相关联。

在这里插入图片描述


1 Hybrid A Star

在这里插入图片描述

之后,在搜索的过程当中选取不同的Control Input往前驱动我的系统向前积分(就是会有很多feasible motion connections,例如图上的弯弯的线,从中找出最优的),积分出来的这个State,我保持在栅格地图的这个节点方格里都只记录一个机器人的State。

在这里插入图片描述

因为现在是保持在栅格地图当中,每个节点方格只记录一个机器人的State,如上图所示,现在进入到同一个栅格中有两条线,所以要不要把原来的那个节点进行更新呢?看Cost,不过这里的Cost不是我们狭义理解的线段的长度,而是一种广义的Cost,比如上次说过的BVP问题当中,Cost可以是时间、消耗的能量、路径的长度、终端状态惩罚项的累加等等。如果新的节点比老节点的Cost要少,就进行更新。

综上,永远保证一个网格当中只有一个节点。


2 Hybrid A Star伪代码

关于A*的伪代码详解
在这里插入图片描述

在这里插入图片描述

Hybrid A Star

在这里插入图片描述

A*算法当中最重要的一点就是找它的邻居(neighbors),其实就是上下左右斜对角。

在找邻居的过程当中,如果发现栅格原先没有被记录,那么就进行一个记录,如果在找邻居发现栅格已经被记录,则看Cost,之后对比决定是否进行更新。


3 启发式函数选择

启发式函数的选择与普通的A*可以是不一样的。在这里插入图片描述

看是否设计动力学模型(&是否考虑障碍物)。


4 One Shot

在这里插入图片描述

这种方法就是HA*扩散到一定的程度的时候,直接在某一点计算与终点的理论距离,如果得出来的路径上没有障碍物且符合运动学约束的话那就直接走(因为这就是最优的路径了),可以设置扩散到第几个节点(N = ?)的时候去做一下这个One Shot,相当于买彩票一样的,在无人机的路径规划上还是挺有用的。


5 Application

在这里插入图片描述

6 总结

混合A算法产生的路径并非最优的,需要进行两个阶段进行优化:

  1. 对轨迹上的顶点进行非线性优化,以改善解的长度和平滑度。
  2. 执行非参数插值。
### 混合A*算法概述 混合A*Hybrid A*算法是一种扩展的传统A*搜索方法,特别适用于具有连续状态空间和非全方向运动约束的环境中的路径规划问题[^1]。此算法不仅考虑了从起始位置到目标位置之间的最短路径,还兼顾了车辆动力学特性,使得所生成的路径既安全又可行。 #### 实现原理 为了适应自动泊车的需求,在标准A*的基础上加入了对转向角度变化率等因素考量,从而形成了一套完整的解决方案。具体来说: - **启发式估计**:采用曼哈顿距离或其他形式的距离度量作为启发式的成本估算方式; - **动作集定义**:针对不同类型的汽车设计了一系列可能的动作集合,比如前进、后退以及左右转弯等操作; - **碰撞检测机制**:每当尝试新的移动方案时都会执行一次碰撞测试以确保新姿态不会与其他物体发生干涉; ```matlab function path = hybrid_astar(start, goal, map) % Hybrid A-star implementation for autonomous parking openList = PriorityQueue(); closedSet = {}; startNode = Node(start); put(openList, startNode); while ~isempty(openList) currentNode = getMin(openList); if isGoal(currentNode, goal) return reconstructPath(currentNode); end add(closedSet, currentNode); neighbors = expandNeighbors(currentNode, map); for each neighbor in neighbors tentative_gScore = gScore[currentNode] + distBetween(currentNode, neighbor); if notInClosed(neighbor, closedSet) && noCollision(neighbor, map) if !existsInOpenOrBetterGscore(neighbor, openList, tentative_gScore) cameFrom{neighbor} = currentNode; gScore[neighbor] = tentative_gScore; fScore[neighbor] = tentative_gScore + heuristicCostEstimate(goal, neighbor); put(openList, neighbor); end end end end error('Failed to find a valid path'); end ``` #### 优化措施 通过对传统A*算法进行如下几个方面的改进,提高了混合A*算法在实际应用中的效率和效果[^3]: - 使用更加精确的状态表示方法来描述机器人位姿; - 引入随机采样的手段探索未知区域内的潜在路线选项; - 结合局部最优解构建全局近似最优解的过程; - 对已访问过的节点实施剪枝策略减少重复计算次数。 #### 特点总结 - 支持任意形状障碍物建模并能有效避开它们; - 可处理带旋转限制条件下的导航任务; - 较好地平衡了求解速度与质量之间关系; - 易于集成其他高级功能模块如动态避障等。 #### 应用场景举例 除了上述提到的自主停车外,混合A*同样适合应用于无人配送车的城市道路行驶规划、无人机低空飞行航线制定等多个领域内涉及复杂地形条件下自动化运输工具的操作控制方面[^5]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值