第2章:OMPL规划器家族——选对工具,事半功倍
说到OMPL规划器,我刚开始接触MoveIt时,面对那一长串名字——RRT、RRT-Connect、PRM、LazyPRM……说实话,有点懵。每个规划器都号称自己很牛,但到底该用哪个?
后来踩了不少坑,慢慢摸出了一些门道。今天我就把这些经验掰开揉碎,跟你聊聊。
2.1 先看一张图,理清脉络
下面这张图是我自己总结的OMPL规划器选择逻辑。你把它当个地图用,走哪条路心里就有数了。
2.2 RRT系列:快速探索的利器
RRT(Rapidly-exploring Random Tree),说白了就是随机撒点、快速生长。它不保证最优,但保证能找到一条路——只要存在的话。
我记得有一次做仓储机器人的路径规划,环境里全是货架,通道很窄。用RRT试了一下,虽然路径歪歪扭扭的,但确实能穿过去。当时我就想,这玩意儿在复杂环境里还挺靠谱。
适用场景:
- 高维空间(7自由度以上机械臂)
- 环境复杂但不需要最优路径
- 快速原型验证阶段
RRT-Connect 是RRT的升级版。它同时从起点和终点生长两棵树,然后让它们「握手」。这个改进很巧妙——速度能快上好几倍。
我建议你在做实时规划时优先考虑RRT-Connect。比如协作机器人避障,要求毫秒级响应,RRT-Connect基本能满足。我在一个产线项目中,用RRT-Connect把规划时间从200ms降到了30ms,效果立竿见影。
我的小技巧: 如果RRT-Connect在狭窄通道里老是失败,可以试试增大range参数。默认是0.1,我有时会调到0.3。但别太大,否则路径质量会下降。
2.3 PRM系列:多查询场景的王者
PRM(Probabilistic Roadmap) 的思路是:先花时间建一张「地图」,然后在这张地图上反复查询路径。它分两步走——预处理阶段和查询阶段。
你想想看,如果你的机器人每天要在同一个环境里跑几千次路径,每次都用RRT从头规划,是不是太浪费了?PRM就是为这种场景设计的。
我曾经给一个焊接机器人做过路径规划。它每天要焊几百个点,环境完全不变。用PRM建好图之后,每次查询只需要几毫秒。嗯,这才是工业级的表现。
| 规划器 | 预处理时间 | 查询时间 | 适用场景 |
|---|---|---|---|
| PRM | 较长(建图) | 极短 | 多查询、静态环境 |
| LazyPRM | 较短(延迟碰撞检测) | 中等 | 环境部分已知、快速建图 |
| RRT | 无 | 中等 | 单次查询、动态环境 |
LazyPRM 是PRM的「懒人版」。它建图时不检查碰撞,等到查询路径时才去验证。这样做的好处是建图飞快,但坏处是查出来的路径可能无效,需要重新规划。
避坑指南: 我曾经在动态障碍物较多的场景里用LazyPRM,结果频繁出现路径无效的情况。后来我加了一个max_reruns参数,限制重试次数,才稳定下来。记住:LazyPRM适合障碍物稀疏的环境,别在密集场景里硬用。
2.4 进阶选择:RRT* 与 Informed RRT*
如果你不满足于「找到路径」,还想要「最优路径」,那就得上RRT*了。它在RRT的基础上加了优化机制——每次添加新节点后,会尝试重新连接附近的节点,让路径逐渐收敛到最优。
但代价也很明显:慢。RRT*的规划时间通常是RRT的5-10倍。所以我的建议是:只在需要高质量路径时用,比如精密装配、医疗手术等场景。
Informed RRT* 是RRT*的加速版。它只在一个椭圆区域内采样——这个椭圆以起点和终点为焦点。说白了,就是不去探索那些明显没用的区域,集中火力在可能产生最优路径的地方。
我记得在一个7轴机械臂的避障任务中,Informed RRT*比普通RRT*快了将近3倍,而且路径质量几乎一样。如果你对路径质量有要求,又嫌RRT*太慢,可以试试它。
2.5 我的选择策略总结
说了这么多,最后给你一个简单粗暴的选择策略:
- 先试RRT-Connect——它是最通用的选择,80%的场景都能搞定
- 如果环境固定且需要反复规划——换成PRM
- 如果对路径质量有要求——上Informed RRT*
- 如果环境动态变化——用RRT*,配合动态障碍物检测
- 如果以上都不满意——检查一下你的碰撞检测是不是太慢了,有时候问题不在规划器
记住: 没有万能的规划器。我见过太多人死磕一个规划器,调参数调到怀疑人生。其实换个规划器,问题可能就迎刃而解了。灵活一点,别钻牛角尖。
好了,这一章就聊到这儿。下一章我们会深入每个规划器的参数调优,到时候我会拿出一些实际项目的配置案例,咱们一起看看怎么把参数调出花来。