从RRT到Informed-RRT*:采样路径规划算法的演进与优化

张开发
2026/4/11 15:19:16 15 分钟阅读

分享文章

从RRT到Informed-RRT*:采样路径规划算法的演进与优化
1. 从随机游走到智能优化RRT算法的诞生与局限我第一次接触RRT算法是在2013年做移动机器人项目时。当时团队尝试了A*、Dijkstra等栅格搜索算法但在复杂环境中经常遇到计算量爆炸的问题。直到有位师兄扔给我一篇Steven LaValle的论文才真正打开了基于采样的路径规划新世界。RRT快速扩展随机树的核心思想就像在陌生森林里扔飞镖。你站在起点位置每次随机往地图某处扔个飞镖采样点然后从现有路径中找到离飞镖最近的节点朝飞镖方向生长一小段树枝路径扩展。重复这个过程直到有树枝碰到目标点。这种随机探索方式在三维空间或高维构型空间中特别高效因为不需要像栅格搜索那样处理整个地图。但实际使用中我很快发现了RRT的三个致命伤路径质量不稳定由于完全随机采样有时能找到不错的路径有时得到的路径却绕远得离谱。有次demo时机器人竟然画出了U形路线被同事戏称为观光模式。收敛性不可控算法何时终止完全取决于运气。在狭窄通道场景下可能需要上万次采样才能找到通路。资源浪费严重大约70%的采样点都落在了障碍物或无效区域这点在MATLAB可视化时特别明显——大量红色碰撞点遍布地图。# 基础RRT的核心代码结构 def rrt_plan(start, goal, map): tree [start] # 初始化树 for _ in range(max_iter): rand_point random_sample() # 随机采样 nearest find_nearest(tree, rand_point) # 找最近节点 new_point steer(nearest, rand_point) # 步长控制 if collision_free(nearest, new_point, map): tree.add_edge(nearest, new_point) # 扩展树 if distance(new_point, goal) threshold: return extract_path(tree) # 提取路径 return None这些痛点直接催生了RRT的第一次重要进化——RRT-Connect。这个改进版让我想起了玩《贪吃蛇》时的策略从起点和终点同时生长两棵树让它们像双向奔赴的贪吃蛇一样快速接头。实测下来在相同迭代次数下路径发现速度提升了3-5倍。但遗憾的是路径质量的问题依然存在。2. 渐进最优的突破RRT*的数学之美2015年参与无人机项目时我们遇到了更严苛的需求不仅要求找到路径还必须是燃料消耗最优的路径。这时RRT*进入了我的视野它通过两个精妙的改进实现了渐进最优重布线Rewiring机制就像给路径网络装上了智能导航。每次新增节点时算法会检查周围半径r内的所有邻居计算通过新节点到达这些邻居是否更划算。这类似于现实生活中发现新捷径后我们会更新自己的通勤路线。在代码实现时这个半径r需要精心设计r min(γ*(log(n)/n)^(1/d), η)其中n是当前节点数d是空间维度η是步长上限。这个公式确保随着节点增多搜索范围能智能收缩。代价传播特性则像多米诺骨牌效应。当某个节点的父节点变更导致代价降低时其所有子节点的代价都会递归更新。有次调试时我观察到仅仅因为一个关键节点的优化整条路径长度就缩短了15%。这种链式反应使得路径优化呈现指数级加速。不过RRT*也有成长的烦恼。在三维空间测试时我发现前500次迭代路径改善明显但之后优化速度大幅放缓。有组对比数据很能说明问题算法版本收敛到90%最优解所需迭代次数RRT∞ (无法保证最优)RRT*8500±1200Informed-RRT*3200±500 (后文详述)3. 椭圆采样革命Informed-RRT*的几何智慧真正让我惊艳的是Informed-RRT*的椭圆采样策略。这个灵感来源于高中几何知识椭圆上任意点到两个焦点的距离之和相等。算法在找到初始路径后以起点和终点为焦点构造一个长轴等于当前路径长度的椭圆。之后的采样全部限制在这个椭圆内因为更优路径必然存在于这个区域。实现时有个精妙的技巧通过线性变换将椭圆转换为超球面采样。具体步骤是构造旋转矩阵使椭圆长轴对齐x轴应用缩放矩阵将椭圆变形为单位圆在单位球内均匀采样用逆变换将采样点映射回原空间def informed_sample(c_best, start, goal): # 构造从椭圆到单位球的变换矩阵 rotation compute_rotation(start, goal) scaling np.diag([c_best/2, sqrt(c_best**2 - c_min**2)/2]) T rotation scaling while True: # 在单位球内采样 sample uniform_sphere_sample() # 映射回原空间 yield T sample (start goal)/2实测数据显示这种有偏采样使优化效率提升惊人在机械臂规划任务中收敛速度加快2.8倍无人机复杂环境路径优化时间从12.3s降至4.7s采样点利用率从约30%提升到65%以上4. 工程实践中的调参秘籍经过多个项目实战我总结出RRT系列算法的调参黄金法则步长η的选择需要平衡探索与精度过大如地图尺寸的1/5会导致碰撞检测失败率高过小如1/100会使收敛速度过慢推荐初始值设为环境特征尺度的1/10~1/20重布线半径γ的设定更需谨慎# 自适应半径调整策略 def dynamic_radius(n, d2): unit_ball_volume np.pi if d2 else 4/3*np.pi gamma 2*(11/d)**(1/d)*(free_volume/unit_ball_volume)**(1/d) return gamma * (np.log(n)/n)**(1/d)碰撞检测优化往往被忽视但却至关重要。我常用的加速技巧包括多级检测先用AABB包围盒快速筛选再用精确几何检测空间哈希对动态障碍物建立空间索引并行检测对批量采样点使用GPU加速在自动驾驶项目中我们还将Informed-RRT*与语义地图结合限制采样椭圆主要位于车道线区域内这样得到的路径既符合交通规则又满足运动学约束。这种领域知识的引入使规划成功率从72%提升到94%。

更多文章