
基于A星与DWA算法融合的动态路径规划:实现静态避障及动态避障
深夜撸代码的时候突然想到,路径规划这玩意儿不就是既要全局最优又得能躲开外卖小哥吗?传统
A星在静态地图里确实好用,但遇到动态障碍物直接傻眼。DWA(Dynamic Window Approach)虽然能实时避
障,可全局路线容易跑偏。这俩货要是能组CP,效果应该不错吧?
先整点A星的干货。核心思想其实就一句话:把地图网格化,用优先队列找最短路径。咱们用Python
简单实现个节点类:
```python
class Node:
def __init__(self, parent=None, position=None):
self.parent = parent
self.position = position
self.g = 0 # 实际代价
self.h = 0 # 启发式估计
self.f = 0 # 总代价
def __eq__(self, other):
return self.position == other.position
def __lt__(self, other):
return self.f < other.f
```
重点在代价计算这块,g值是真实走过的距离,h值用曼哈顿距离做启发。有个小技巧是在计算相邻
节点时,可以给障碍物设置惩罚项,让路径自然远离危险区域:
```python
# 在扩展节点时加入障碍物检测
if grid[new_x][new_y] > obstacle_threshold:
current_node.g += penalty_cost # 惩罚系数根据实际情况调整
```
然后是DWA的骚操作,这算法像老司机开车——不断根据当前速度预测未来轨迹。速度采样是关键,别
傻乎乎全遍历,用动态窗口缩小范围:
```python
def velocity_samples(v_current, w_current, dt):