【ROS】move_base 导航节点概述
- 前言
- move_base 架构
- move_base 内部模块
- move_base 外部数据
前言
本章介绍 ROS 导航系统中的核心节点 move_base
,它负责路径规划和导航控制,是系统的调度中心。我们将简要讲解其内部模块结构,以及运行所需的外部节点数据,为后续内容做铺垫。
我的环境:
本教程使用的环境是:实体 ROS 小车,Ubuntu 18.04,ROS1 Melodic
参考资料:
- move_base,年轻人的第一次导航
- ROS Wiki - move_base
move_base 架构
从 move_base
的架构图可以看出,在输入导航目标点后,move_base
会持续输出速度控制指令,引导机器人底盘朝目标点移动。
该节点内部集成了五个核心模块:全局规划器、局部规划器、全局代价地图、局部代价地图和恢复行为模块。
这些模块协同工作,实现路径规划、障碍物避让、动态调整以及异常恢复等功能,最终生成实时的速度控制指令,确保机器人高效、稳定地到达目标点。
move_base 内部模块
move_base
作为 ROS 导航的核心节点,其功能实现依赖以下五个关键模块:
- 全局规划器(Global Planner):根据机器人当前位置与目标点,生成一条全局可行路径。
- 局部规划器(Local Planner):在全局路径的基础上,结合周围环境信息,实时计算可执行的速度指令。
- 全局代价地图(Global Costmap):构建全局环境模型,辅助全局路径规划。
- 局部代价地图(Local Costmap):基于实时传感器数据构建,用于避障与路径微调。
- 恢复行为模块(Recovery Behaviors):导航失败或受阻时,执行预设策略尝试恢复导航任务。
这五个模块密切配合,支撑导航系统完成路径规划、动态避障与异常处理等关键任务。
move_base 外部数据
为了使 move_base
正常运行,除了其内部模块的配置外,还需依赖多个外部节点提供必要的数据支持,包括地图信息、传感器数据、定位结果以及目标点等。具体如下:
- 地图发布节点:
map_server
节点负责发布静态地图数据(需预先建图,并启动该节点)。 - 激光雷达节点:激光雷达驱动发布
/scan
数据(需启动雷达对应的 launch 文件)。 - 底盘驱动节点(含里程计):小车底盘驱动发布
/odom
话题(需启动底盘的 launch 文件)。 - AMCL 定位节点:通过融合激光雷达
/scan
数据与地图/map
,推算出小车的当前位置,并发布map -> base_link
的 tf(需启动amcl
节点)。 - 导航目标点发布节点:导航目标通常由 RViz 手动发布(测试阶段),也可以通过自定义节点自动发布导航目标点。
- TF 坐标变换关系:各传感器间的 tf 通常在对应的 launch 文件中设置为静态发布,一般无需手动干预。
只要以上外部数据能够正常提供并连通,move_base
节点即可完成路径规划与导航控制任务。