[具身智能-799]:NAV2-速度指令执行层(底层・动作执行)是nav2_controller,还是ros2_controller?
·
核心结论
- nav2_controller → 属于NAV2 局部规划中层,不是底层执行层
- ros2_controller(ros2_control 框架) → 才是真正的底层速度指令执行层、动作执行层
一、三层架构严格对应 ROS2/NAV2 组件
1)全局规划层
功能包:nav2_planner
节点:planner_server
作用:A * 规划全局路径,定远方路线、目标、战略方向
2)局部轨迹规划层(中层)
功能包:nav2_controller
节点:controller_server
内置插件:DWA/DWB、TEB、MPPI、纯追踪
核心工作
- 接收全局路径
- 视野内路径拆分、动态避障、轨迹生成、行走纠偏
- 计算出期望运动指令:发布
/cmd_vel(线速度 + 角速度)
本质
只负责决策走路策略,下达行走命令不懂电机、不懂 PID、不碰硬件,不属于执行层
3)底层动作执行层(最终落地)
框架:ros2_control
常用控制器:diff_drive_controller(差速底盘)
俗称:ros2_controller
核心工作(纯执行层)
- 订阅中层发来的
/cmd_vel速度指令 - 运动学解算:把 v、ω 换算成左右轮目标转速
- 底层 PID 闭环调速:修正打滑、电压波动、阻力偏差
- 对接硬件驱动,输出 PWM / 电平控制电机转动
- 读取编码器、IMU,融合生成里程计
/odom向上回传 - 实现缓启停、限速、堵转保护等硬件安全逻辑
本质
只执行命令,不做任何路径规划、不做避障
完全对应定义的:轨迹分解、运动控制、本体硬件执行
二、完整数据流(层级流转)
plaintext
nav2_planner 全局规划
↓ 全局路径path
nav2_controller 中层局部规划
↓ 输出 /cmd_vel 速度指令(发号施令)
ros2_control(ros2_controller) 底层执行层
↓ 解算+PID → 驱动电机转动
↓ 编码器反馈 → 发布 /odom 回馈导航系统
三、二者核心区别对照表
| 对比项 | nav2_controller | ros2_controller(ros2_control) |
|---|---|---|
| 所属层级 | 导航中层・战术规划层 | 硬件底层・动作执行层 |
| 核心定位 | 算轨迹、避障、决策行走方式 | 转轮子、稳速度、精准执行指令 |
| 输入数据 | 全局路径、局部代价地图、定位 | /cmd_vel 速度指令、电机编码器 |
| 输出内容 | /cmd_vel 期望速度 | 电机驱动信号、实际里程 odom |
| 核心算法 | DWA/TEB/MPPI 轨迹规划算法 | 运动学解算、速度环 PID 闭环 |
| 调试内容 | 避障权重、轨迹平滑、跟随精度 | 轮距轮径、PID 参数、加减速、行走顺滑度 |
| 运行频率 | 10~50Hz 决策级频率 | 50~200Hz 硬实时硬件控制 |
| 是否管硬件 | 完全不管 | 直接管控电机与底盘硬件 |
四、结合你之前的定义完美匹配
- 全局规划层:nav2_planner → 管远方、定大局、定路线目标
- 局部中层:nav2_controller → 管眼前、拆路线、避障碍、纠偏差
- 底层动作执行层:ros2_controller → 管本体、拆轨迹、控电机、稳运动
五、最通俗人话讲解
- nav2_controller = 驾驶员想好往哪走、躲行人、决定车速方向,只说出行驶指令
- ros2_controller = 汽车底盘执行机构收到车速方向指令,自动控制左右车轮转速、稳住速度、平稳行驶,是真正动手干活的底层执行单元
六、易错点澄清
很多人混淆:controller 翻译都是控制器
- NAV2 里的 controller 是导航行为控制器(规划类)
- ROS2 Control 里的 controller 是硬件运动控制器(执行类)
速度指令从下发到落地:nav2_controller 负责生成,ros2_controller 负责执行。
更多推荐
所有评论(0)