前言

在 ROS 2 机器人开发中,路径规划(Path Planning)是导航堆栈(Nav2)的核心。无论是做课程论文,还是实际的项目开发,面对众多的开源算法(A*、Dijkstra、DWA、TEB…),我们该如何选择?

本文将基于 ROS 2 Humble 仿真环境,深度对比 5 种主流规划算法,拆解它们的实现逻辑、适用环境及优缺点


一、 算法对比矩阵:一表看全貌

在 Nav2 框架下,路径规划通常分为 Global Planner(全局规划)Local Planner(局部/控制插件)

插件类型 算法名称 核心逻辑 擅长场景 核心优缺点
全局 A (A-Star)* 启发式搜索 静态、结构化环境 效率极高,路径最优;但在动态环境灵活性稍差。
全局 Dijkstra 穷举式搜索 小型地图、确保最优 逻辑简单,必能找到最优解;但计算开销比 A* 大。
全局 Smac Planner Hybrid-A* 扩展 室外、非完整约束车辆 考虑车辆动力学(如倒车);计算复杂度显著增加。
局部 DWA 速度空间采样 室内、差分驱动机器人 实时性极强,避障果断;容易陷入局部最优(死胡同)。
局部 TEB 图优化 (g2o) 异形机器人、复杂动态场景 路径极其平滑,支持非圆型;极度消耗 CPU 资源

二、 深度解析:算法背后的“选型逻辑”

1. A* 算法:效率与最优的平衡点

A* 是目前最常用的全局规划器。它通过代价函数 f(n)=g(n)+h(n)f(n) = g(n) + h(n)f(n)=g(n)+h(n) 快速锁定目标。

  • 适用: 仓储物流机器人、静态已知地图。
  • 经验: 如果你在 Rviz2 中发现全局路径延迟高,优先检查 A* 的启发函数配置。

2. TEB (Timed Elastic Band):优雅的舞者

与 DWA 的暴力采样不同,TEB 将路径规划看作一个多目标优化问题。

  • 适用: 需要频繁倒车、或机身呈长方形的机器人。
  • 痛点: 它的参数(权重)极多,调试不好容易产生路径震荡。

3. DWA (Dynamic Window Approach):果断的避障者

Nav2 默认常用的局部规划器,直接在机器人速度空间(v, w)内搜索。

  • 适用: 室内移动避障。
  • 经验: 遇到狭窄门口进不去?可能是 DWA 的 sim_time 设置得太短。

三、 仿真实验总结:如何完成高质量对比?

在撰写课程论文或博文时,建议增加以下对比维度

  1. 路径平滑度: 观察轨迹是否包含突兀的转角(A* 通常是折线,TEB 是圆滑曲线)。
  2. 算力消耗: 在 Ubuntu 终端使用 htop 查看算法运行时各个核心的占用情况。
  3. 极端场景测试:
    • U型弯: 测试算法是否会陷入局部最优。
    • 动态障碍物: 模拟行人走动,观察局部避障的响应时间。

四、 开源参考与学习建议

  • Nav2 官方仓库: github.com/ros-navigation/navigation2
  • 推荐文献:
    • Optimal pathfinder for robots (Hart et al.)
    • The Dynamic Window Approach to Collision Avoidance (Fox et al.)

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐