核心结论

  1. nav2_controller → 属于NAV2 局部规划中层,不是底层执行层
  2. ros2_controller(ros2_control 框架) → 才是真正的底层速度指令执行层、动作执行层

一、三层架构严格对应 ROS2/NAV2 组件

1)全局规划层

功能包:nav2_planner

节点:planner_server

作用:A * 规划全局路径,定远方路线、目标、战略方向

2)局部轨迹规划层(中层)

功能包:nav2_controller

节点:controller_server

内置插件:DWA/DWB、TEB、MPPI、纯追踪

核心工作

  1. 接收全局路径
  2. 视野内路径拆分、动态避障、轨迹生成、行走纠偏
  3. 计算出期望运动指令:发布 /cmd_vel(线速度 + 角速度)

本质

只负责决策走路策略,下达行走命令不懂电机、不懂 PID、不碰硬件,不属于执行层

3)底层动作执行层(最终落地)

框架:ros2_control

常用控制器:diff_drive_controller(差速底盘)

俗称:ros2_controller

核心工作(纯执行层)

  1. 订阅中层发来的 /cmd_vel 速度指令
  2. 运动学解算:把 v、ω 换算成左右轮目标转速
  3. 底层 PID 闭环调速:修正打滑、电压波动、阻力偏差
  4. 对接硬件驱动,输出 PWM / 电平控制电机转动
  5. 读取编码器、IMU,融合生成里程计 /odom 向上回传
  6. 实现缓启停、限速、堵转保护等硬件安全逻辑

本质

只执行命令,不做任何路径规划、不做避障

完全对应定义的:轨迹分解、运动控制、本体硬件执行


二、完整数据流(层级流转)

plaintext

nav2_planner 全局规划
        ↓ 全局路径path
nav2_controller 中层局部规划
        ↓ 输出 /cmd_vel 速度指令(发号施令)
ros2_control(ros2_controller) 底层执行层
        ↓ 解算+PID → 驱动电机转动
        ↓ 编码器反馈 → 发布 /odom 回馈导航系统

三、二者核心区别对照表

对比项nav2_controllerros2_controller(ros2_control)
所属层级导航中层・战术规划层硬件底层・动作执行层
核心定位算轨迹、避障、决策行走方式转轮子、稳速度、精准执行指令
输入数据全局路径、局部代价地图、定位/cmd_vel 速度指令、电机编码器
输出内容/cmd_vel 期望速度电机驱动信号、实际里程 odom
核心算法DWA/TEB/MPPI 轨迹规划算法运动学解算、速度环 PID 闭环
调试内容避障权重、轨迹平滑、跟随精度轮距轮径、PID 参数、加减速、行走顺滑度
运行频率10~50Hz 决策级频率50~200Hz 硬实时硬件控制
是否管硬件完全不管直接管控电机与底盘硬件

四、结合你之前的定义完美匹配

  1. 全局规划层:nav2_planner → 管远方、定大局、定路线目标
  2. 局部中层:nav2_controller → 管眼前、拆路线、避障碍、纠偏差
  3. 底层动作执行层:ros2_controller → 管本体、拆轨迹、控电机、稳运动

五、最通俗人话讲解

  • nav2_controller = 驾驶员想好往哪走、躲行人、决定车速方向,只说出行驶指令
  • ros2_controller = 汽车底盘执行机构收到车速方向指令,自动控制左右车轮转速、稳住速度、平稳行驶,是真正动手干活的底层执行单元

六、易错点澄清

很多人混淆:controller 翻译都是控制器

  • NAV2 里的 controller 是导航行为控制器(规划类)
  • ROS2 Control 里的 controller 是硬件运动控制器(执行类)

速度指令从下发到落地:nav2_controller 负责生成,ros2_controller 负责执行。

Logo

聚焦RDK与具身智能,汇集机器人开发教程、开源案例和技术交流

更多推荐