规划器选择与调优:RRT、RRT*、PRM、STOMP、CHOMP 的特点与适用场景

各位做机器人运动规划的朋友,大家好。今天我们来聊聊规划器选择这件事。

说实话,我刚入行那会儿,面对 MoveIt 里一堆规划器名字——RRT、RRT*、PRM、STOMP、CHOMP——真有点懵。每个都试一遍,哪个能跑出来就用哪个。后来踩了不少坑,才慢慢摸清门道。

规划器选对了,路径规划效率能翻倍。选错了,可能卡在那里半天出不来一条路径。今天我就把这几年的经验梳理一下,帮你快速找到最适合当前任务的规划器。

一、规划器核心分类:采样型 vs 优化型

首先,我们要搞清楚一个基本概念。MoveIt 里的规划器,大致分两类:

  • 采样型规划器:RRT、RRT*、PRM 都属于这一类。它们通过在 C 空间(构型空间)里随机采样,逐步构建路径。
  • 优化型规划器:STOMP、CHOMP 是代表。它们从一个初始路径出发,通过梯度下降或随机优化来平滑路径。

你想想看,这两类规划器的思维方式完全不同。采样型是「先找路,再优化」,优化型是「先有条路,再修路」。理解了这个区别,后面就好办了。

核心观点:没有万能的规划器。只有最适合当前场景的规划器。

规划器选择决策树 规划器选择 采样型规划器 优化型规划器 RRT RRT* PRM STOMP CHOMP 适用场景 高维空间、快速探索 渐进最优、精度要求高 多查询、离线规划 平滑路径、避障 梯度优化、光滑轨迹

二、各规划器特点详解

1. RRT(快速随机扩展树)

RRT 是最基础的采样型规划器。它的思路很简单:从起点开始,随机向周围撒点,每次把新点连到最近的已有节点上,像树一样生长。

优点:速度快,尤其在高维空间里表现不错。我记得有一次做 7 轴机械臂的避障规划,RRT 几乎秒出结果。

缺点:路径质量一般。它找到的路径往往很绕,不是最优的。说白了,它只管「有没有路」,不管「路好不好」。

我的经验:RRT 适合做「快速可行性验证」。比如你刚搭好一个场景,想看看机械臂能不能绕过障碍物到达目标点,用 RRT 先跑一遍,心里有个底。

2. RRT*(渐进最优 RRT)

RRT* 是 RRT 的升级版。它多了一个「重连」步骤——每次加入新节点后,会检查附近有没有更短的路径可以替换。随着采样点增多,路径会逐渐收敛到最优。

嗯,这里要注意:RRT* 虽然路径质量好,但收敛速度慢。我曾经在一个复杂场景里等 RRT* 跑了 5 分钟才收敛到一条像样的路径。

避坑指南:我曾经在实时性要求高的项目里用了 RRT*,结果机器人半天不动,被客户投诉了。后来我改成先跑 RRT 快速出路径,再用 RRT* 做后台优化,效果好了很多。

3. PRM(概率路线图)

PRM 的思路和 RRT 不同。它先在整个 C 空间里随机采样,构建一张「路线图」(Roadmap),然后在图上做路径搜索。

PRM 最大的特点是:一次建图,多次查询。如果你需要在同一个场景里反复规划路径(比如机器人每天在固定工位间移动),PRM 非常合适。

规划器 适用场景 路径质量 实时性 我的推荐指数
RRT 快速探索、高维空间 一般 高 ⭐⭐⭐⭐
RRT* 渐进最优、精度要求高 优秀 低 ⭐⭐⭐
PRM 多查询、离线规划 良好 中(建图后高) ⭐⭐⭐⭐
STOMP 平滑路径、避障 优秀 中 ⭐⭐⭐
CHOMP 梯度优化、光滑轨迹 优秀 中 ⭐⭐⭐

4. STOMP(随机轨迹优化运动规划器)

STOMP 是优化型规划器。它不靠随机采样找路径,而是从一个初始轨迹出发,通过随机扰动来优化路径。

我个人习惯用 STOMP 来处理「路径已经存在,但需要平滑」的场景。比如你用手动示教了一条轨迹,但走起来很抖,用 STOMP 跑一遍,轨迹就顺滑多了。

5. CHOMP(协变哈密顿优化运动规划器)

CHOMP 和 STOMP 类似,但它用的是梯度下降法。它把路径优化看作一个能量最小化问题——既要避开障碍物,又要让路径平滑。

CHOMP 的收敛速度比 STOMP 快,但容易陷入局部最优。我遇到过几次 CHOMP 把路径优化到墙角里去了,后来加了障碍物约束才解决。

三、如何根据任务选择最优规划器?

说了这么多,到底怎么选?我总结了一个简单的决策流程:

  1. 先问自己:我需要多快的响应?
    • 实时性要求高(比如人机协作)→ 选 RRT
    • 可以等几秒钟 → 选 RRT* 或 PRM
  2. 再问:路径质量重要吗?
    • 路径越短越好、越平滑越好 → 选 RRT*、STOMP、CHOMP
    • 只要不撞到东西就行 → 选 RRT
  3. 最后问:场景会变化吗?
    • 固定场景,反复规划 → PRM 建图后飞快
    • 场景动态变化 → RRT 或 RRT* 更灵活

我的个人经验:如果你实在拿不准,先用 RRT 跑一遍。RRT 是「万金油」,大部分场景都能出结果。然后根据结果再决定要不要换更优的规划器。别一上来就追求最优,先跑起来再说。

四、调优小技巧

选对了规划器,还要调参数。这里分享几个我常用的调优方向:

  • RRT/RRT*:调整 max_planning_time(最大规划时间)。时间越长,RRT* 路径越优。我一般设 5-10 秒。
  • PRM:调整采样点数量。采样点越多,路线图越密,但建图时间也越长。我习惯设 1000-3000 个点。
  • STOMP:调整迭代次数和噪声标准差。噪声太大路径会乱跳,太小又优化不动。我一般从 0.1 开始试。
  • CHOMP:调整学习率。学习率太大容易震荡,太小收敛慢。我常用 0.01-0.05。
# 示例:在 MoveIt 中配置 RRT* 规划器
planner_configs:
  RRTstar:
    type: geometric::RRTstar
    max_planning_time: 10.0  # 最大规划时间(秒)
    goal_bias: 0.05          # 目标偏置概率
    range: 0.5               # 扩展步长
    rewire_factor: 1.5       # 重连因子

避坑指南:我曾经把 goal_bias 设得太大(0.3),结果 RRT 一直往目标方向扩展,遇到障碍物就卡住了。后来改成 0.05,探索更充分,路径反而更快找到。

好了,关于规划器选择与调优,今天就聊到这里。记住一句话:没有最好的规划器,只有最合适的规划器。多试、多调、多总结,你也能成为规划器调优的高手。

可可精品资料库