返回专辑
·Johan·3 分钟阅读

Nav2 规划与控制:分开评价,避免互相补偿

路径质量与跟踪误差分测;选型看底盘算力,增益勿从仿真硬抄。

Nav2 规划与控制:分开评价,避免互相补偿

1. 「能到但不稳」往往是互相补偿

全局路径贴墙擦过、局部控制器疯狂减速抖振——调大 global costmap 的 inflation_radius 后路径离墙远了,跟踪却更飘;再拧 FollowPath 的 critic 权重,路径又开始贴障。这是规划与控制互相补偿:两个子系统各吃一半错,报表上成功率还行,真机却既慢又不稳。分开评价之前,任何「手感调参」都不可证伪。

2. 分工与数据流

planner_server 订阅 global costmap,输出 nav_msgs/Pathcontroller_server 订阅 local costmap + path,输出 geometry_msgs/Twist/cmd_vel。全局管拓扑(能不能到),局部管动力学(怎么跟、怎么避)。两者参数空间独立,但共用 costmap 世界模型——地图错了,两边一起错。

yaml
planner_server:
  ros__parameters:
    planner_plugins: ["GridBased"]
    GridBased:
      plugin: "nav2_navfn_planner/NavfnPlanner"
      tolerance: 0.5

controller_server:
  ros__parameters:
    controller_plugins: ["FollowPath"]
    FollowPath:
      plugin: "dwb_core::DWBLocalPlanner"
      max_vel_x: 0.5
      max_vel_theta: 1.0

3. 选型看底盘约束与算力

控制器特点适用
DWB采样轨迹 + critic 评分,可配差速通用室内,算力中等
Regulated Pure Pursuit路径跟踪直观,动态避障弱开阔场地 + 可靠 local costmap
MPPI优化采样,算力需求高动态障碍多、GPU/强 CPU

差速底盘不能侧移——用假设全向的局部规划,会出现「路径漂亮、跟踪失败」。仿真延迟低、地面理想,增益照搬真机必抖或必怯。选型先看 cmd_vel 接口约束(),再看 CPU 预算。

4. 分开评价的三列指标

禁止用一张「总分数」——它会重新鼓励互相补偿:

维度指标谁负责
路径质量长度、最小间隙、拐弯苛刻度planner + global costmap
跟踪质量横向误差、速度跟踪、振荡幅度controller + local costmap
任务结果到点成功率、耗时、碰撞次数端到端

同一地图固定 10 个目标点,先冻结 controller 调 planner(只看路径质量列),再冻结 planner 调 controller(只看跟踪列)。跨子系统同 PR 禁止。

5. 膨胀与速度的取舍

更保守的全局路径(更大 inflation_radius)降低局部难度,但增加绕路和时间。更激进的控制器(更高 max_vel_x)缩短时间,但对 costmap 噪声敏感——残影一格,激进控制器就撞。经验顺序:先让 costmap 诚实,再调 planner tolerance,最后才动 controller 速度界限。

6. 实验协议

记录:假设、改动项(单簇)、观测(路径截图/误差曲线/成败)、结论。成功标准量化——例如 10 次 ≥9 成功、碰撞 0、最大横向误差 < 0.15 m。真机先降速验证通过性与安全,再逐步放开 max_vel_x;仿真只验证顺序,不验证绝对增益。

bash
ros2 topic echo /plan --once          # 看全局路径
ros2 topic echo /local_plan --once    # 看局部轨迹
ros2 topic hz /cmd_vel                # 看控制输出频率

7. 验收

  • 系统测试输出路径间隙与跟踪误差两列,禁止只输出成功率。
  • planner 与 controller 参数 PR 分开;跨子系统改动需双列对比。
  • 真机降速验证通过后再抬速;仿真增益不得原样上车。
  • 最小间隙 < footprint 裕量时,先查 costmap 再查 controller。

规划管「路对不对」,控制管「跟不跟得上」——分开评价,补偿无处躲。

8. critic 权重与轨迹采样

DWB 每周期采样多条轨迹,用 critic 加权评分。常见 critic:PathAlignPathDistGoalDistObstacleFootprintOscillation。调权重前先确认 costmap 诚实——ObstacleFootprint 在残影格上会否决所有轨迹,表现为「不动」而非「跟踪差」。sim_timevx_samples/vtheta_samples 决定采样密度;算力不足时减样本数,不是盲目加 critic。

MPPI 用优化采样,对动态障碍更鲁棒,但 CPU/GPU 开销大。RPP 几乎不算力,但遇突发障碍依赖 local costmap 更新及时——costmap 延迟大时 RPP 先撞。

9. 案例:仿真 DWB 增益上车抖振

仿真里 path_dist_scale: 32.0 跟踪完美;真机同样值横向振荡 ±15 cm。根因:仿真 costmap 更新无延迟、地面无滑移。真机降到 path_dist_scale: 24.0 并加 transform_tolerance: 0.2,路径质量列未变,跟踪列振荡消失。不是 DWB 不行,是增益不能跨环境复制。

← 全部文章

johan's blog