一、💡 项目简介
RRT (快速随机树)是一种在高维处理中常见的路径规划算法,实用性高。本文基于经典 RRT 算法,提出了一种基于 障碍物密度感知和树展尺调节的自适应采样 方案,提升路径规划成功率和效率。
二、🔧 算法原理分析
功能 | 描述 |
---|---|
自适应采样 | 根据树展尺和当前节点与目标点距离条件,调节采样半径和目标偏移概率 |
障碍密度感知 | 判断周围障碍物数量,强化逻辑 |
动态步长 | 障碍物密集区减少步长,避免快速挑战复杂路径 |
三、🦜 核心类解析
【Environment】环境类
-
展示区域和障碍物,使用 shapely 判断碰撞
-
支持多边形和圆形
【RRT】
-
get_adaptive_sample
:根据树展尺+障碍密度 条件同时调节采样半径和 goal bias -
calculate_obstacle_density
:定量半径内的 intersect 障碍物数 -
steer
:根据障碍密度调整动态步长 -
plan
:实际路径规划逻辑
四、📊 性能验证
总进行 80 次路径规划,得到数据统计:
成功率: 93.75%
平均路径长度: 1120.54
平均迭代次数: 198.12
平均计算时间: 0.54s
分析:
-
成功率高:合理证明自适应采样效果显著
-
路径长度 & 迭代次数合理
-
速度快,适合实时场景
五、🎨 动画可视化
增加 matplotlib.animation
代码,每次拼接新节点时动画展示 RRT 树扩展,配合 gif 导出:
QQ录屏20250423212611
import matplotlib.animation as animation
fig, ax = plt.subplots()
env.plot(ax)
lines = []
for node in rrt.tree:
if node.parent:
lines.append([[node.x, node.parent.x], [node.y, node.parent.y]])
line_objs = [ax.plot([], [], 'k-')[0] for _ in lines]
def update(i):
if i < len(lines):
line_objs[i].set_data(lines[i][0], lines[i][1])
return line_objs
ani = animation.FuncAnimation(fig, update, frames=len(lines), interval=10, blit=True)
ani.save("rrt_path.gif", writer="pillow")
六、🔍 展望与总结
-
算法改进的思路简洁而高效