规划器选择与调优:RRT、RRT*、PRM、STOMP、CHOMP 的特点与适用场景
各位做机器人运动规划的朋友,大家好。今天我们来聊聊规划器选择这件事。
说实话,我刚入行那会儿,面对 MoveIt 里一堆规划器名字——RRT、RRT*、PRM、STOMP、CHOMP——真有点懵。每个都试一遍,哪个能跑出来就用哪个。后来踩了不少坑,才慢慢摸清门道。
规划器选对了,路径规划效率能翻倍。选错了,可能卡在那里半天出不来一条路径。今天我就把这几年的经验梳理一下,帮你快速找到最适合当前任务的规划器。
一、规划器核心分类:采样型 vs 优化型
首先,我们要搞清楚一个基本概念。MoveIt 里的规划器,大致分两类:
- 采样型规划器:RRT、RRT*、PRM 都属于这一类。它们通过在 C 空间(构型空间)里随机采样,逐步构建路径。
- 优化型规划器: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 把路径优化到墙角里去了,后来加了障碍物约束才解决。
三、如何根据任务选择最优规划器?
说了这么多,到底怎么选?我总结了一个简单的决策流程:
- 先问自己:我需要多快的响应?
- 实时性要求高(比如人机协作)→ 选 RRT
- 可以等几秒钟 → 选 RRT* 或 PRM
- 再问:路径质量重要吗?
- 路径越短越好、越平滑越好 → 选 RRT*、STOMP、CHOMP
- 只要不撞到东西就行 → 选 RRT
- 最后问:场景会变化吗?
- 固定场景,反复规划 → 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,探索更充分,路径反而更快找到。
好了,关于规划器选择与调优,今天就聊到这里。记住一句话:没有最好的规划器,只有最合适的规划器。多试、多调、多总结,你也能成为规划器调优的高手。
可可精品资料库