课程导入:学习目标、课程结构、ROS2与路径规划概述

1.1 为什么需要学习ROS2路径规划

移动机器人从A点安全、高效地移动到B点,是自主导航最核心的能力之一。无论是仓储物流中的AGV、餐厅里的送餐机器人,还是户外巡检的无人车,其底层都依赖一套完整的路径规划系统。ROS2作为新一代机器人中间件,凭借其分布式通信、实时性支持和工业级可靠性,已成为机器人开发的主流框架。掌握ROS2下的路径规划,意味着你能够独立搭建从传感器数据到运动指令的完整导航链路,这是迈向高级机器人工程师的关键一步。

本课程不局限于调用现成API,而是深入剖析路径规划的内部机制,从全局地图构建、代价地图膨胀,到全局路径搜索与局部轨迹优化,再到控制指令下发,每一环节都会结合代码与仿真进行验证。学完本课程,你将具备以下能力:

  • 理解ROS2 Navigation2(Nav2)框架的整体架构与核心模块职责。
  • 掌握代价地图(Costmap)的图层结构、膨胀半径与障碍物处理逻辑。
  • 熟练配置并调优全局规划器(NavFn、Smac Planner)与局部规划器(DWB、Regulated Pure Pursuit)。
  • 能够使用Gazebo仿真环境搭建测试场景,并完成真实机器人导航部署。
  • 具备路径规划常见故障(规划失败、抖动、穿越障碍)的系统排查能力。
学习建议:本课程每个章节都配有可运行的代码示例与仿真环境,建议你边学边练,不要只停留在阅读层面。遇到问题时,先尝试根据日志和可视化工具(如RViz2)自行定位,再对照课程中的排障思路进行验证。

1.2 课程整体结构与学习路径

本课程共30章,按照“基础→核心→进阶→实战”四个阶段递进。前5章帮助你建立ROS2导航的宏观认知与环境准备;第6~15章深入Nav2框架的各个功能包,从代价地图到行为树,逐层拆解;第16~22章聚焦算法原理与参数调优,涵盖全局与局部规划器的对比实验;第23~28章进入实战环节,包括多机器人协同、动态避障以及真实机器人部署;最后两章进行综合项目复盘与常见问题速查。下表展示了各阶段的核心主题与对应章节范围:

阶段 章节范围 核心内容
基础入门 第1~5章 ROS2环境搭建、TF变换、传感器数据可视化、导航框架总览
核心机制 第6~15章 代价地图图层、规划器插件、行为树导航、恢复行为
算法进阶 第16~22章 A*/Dijkstra原理、Smac Hybrid-A*、DWB参数深度调优
实战部署 第23~28章 多机器人协同、动态避障、真实机器人部署与调试
复盘总结 第29~30章 综合项目复盘、高频故障速查表

建议你按照章节顺序学习,因为后续章节会频繁引用前面建立的概念。如果你已有ROS1基础,可以重点关注ROS2中通信机制(DDS)与参数管理的变化,以及Nav2相较于move_base的架构改进。

1.3 ROS2与路径规划的核心概念

在正式进入代码之前,我们需要建立几个关键认知。ROS2中的路径规划并非单一节点,而是一组协同工作的功能包集合,统称为Nav2。其核心设计思想是模块化与插件化:每个功能模块(如全局规划器、局部规划器、代价地图)都通过插件接口实现,用户可以根据机器人特性选择或编写不同的算法实现,而无需修改框架本身。

整个导航流程可以概括为以下步骤:

  1. 地图输入:加载预先构建的静态地图(SLAM生成或手工绘制),作为全局参考。
  2. 定位:通过AMCL(自适应蒙特卡洛定位)或Cartographer等提供机器人在全局地图中的位姿。
  3. 代价地图构建:将静态地图、传感器实时障碍物、膨胀区域等多层信息融合为2D代价地图。
  4. 全局规划:在代价地图上搜索从当前位置到目标点的最优路径(考虑路径长度与代价)。
  5. 局部规划:根据全局路径和实时传感器数据,生成机器人实际执行的速度指令(线速度与角速度)。
  6. 控制执行:将速度指令发送给底盘驱动节点,完成运动闭环。

下面这张图展示了Nav2框架中核心节点与数据流的关系,帮助你建立整体架构印象:

Nav2 核心节点与数据流架构 地图服务 map_server 静态地图 / SLAM AMCL 定位 粒子滤波 /odom /scan 代价地图 Costmap 静态层 / 障碍层 / 膨胀层 代价值 0~254 footprint 膨胀 /global_costmap /local_costmap 行为树 BT Navigator NavigateToPose 恢复行为 / 回退策略 全局规划器 NavFn / Smac Planner A* / Hybrid-A* 局部规划器 DWB / Regulated Pure Pursuit 轨迹采样 / 速度指令 Controller Server /cmd_vel 输出 map odom+scan global costmap local costmap compute path global path twist 传感器输入 /scan (LiDAR) /odom (轮式里程计) sensor data Goal 目标点 /goal_pose (2D Pose Estimate) 图例: 地图/定位 代价地图 行为树 规划器 控制输出 代价地图数据流

从图中可以看到,行为树(BT Navigator)是导航决策的核心调度器,它根据目标点和当前状态,依次调用全局规划器计算路径,再交给局部规划器生成速度指令。代价地图则贯穿全局与局部两层,为规划器提供障碍物信息。这种分层设计使得系统具备良好的扩展性——你可以替换任意一个插件而不影响其他模块。

1.4 典型应用场景与课程案例

为了让你更直观地理解路径规划的实际作用,我们来看一个典型的仓储物流场景。假设一台AGV需要在货架间穿梭,将货物从A区搬运到B区:

  • 全局规划:AGV根据仓库地图,规划出一条从当前位置到B区的粗路径,避开货架、立柱等静态障碍。
  • 局部规划:在行驶过程中,如果前方突然出现工作人员或临时堆放的货物,局部规划器会实时调整轨迹,绕开动态障碍后重新回到全局路径上。
  • 恢复行为:如果AGV被完全困住(例如被叉车挡住),行为树会触发恢复策略——原地旋转、后退重试,甚至重新规划全局路径。

本课程的核心实战项目将围绕一个差速驱动机器人展开,在Gazebo仿真环境中搭建包含静态障碍、移动障碍和狭窄通道的测试场地。你将逐步实现从建图、定位到自主导航的完整流程,并最终完成一个“多点巡检”任务——机器人按照预设顺序依次到达多个目标点,并在每个点停留数秒。这个项目会综合运用课程中几乎所有知识点,帮助你形成系统性的工程思维。

1.5 常见误区与学习提醒

误区一:只调参数,不理解原理。很多初学者遇到规划失败时,习惯盲目调整 inflation_radius、max_vel_x 等参数,却不知道这些参数背后的代价计算逻辑。例如,膨胀半径过大会导致路径过度绕行,过小则可能让机器人贴近障碍物。建议每次调参前,先在RViz2中打开代价地图图层,观察障碍物膨胀效果,再结合机器人实际尺寸进行合理设置。
误区二:忽略TF变换的正确性。路径规划依赖准确的坐标变换。如果TF树不完整或频率过低,即使规划算法再优秀,机器人也无法正确执行。在开始任何导航任务前,务必使用 ros2 run tf2_tools view_frames 检查TF树,并确认 odom→base_link 与 map→odom 的变换发布正常。

另一个常见问题是混淆全局规划与局部规划的职责。全局规划器负责在已知地图上寻找最优路径,计算频率较低(通常1~5Hz);局部规划器则负责实时避障与轨迹跟踪,计算频率较高(10~20Hz)。如果局部规划器频繁报错“无法找到有效轨迹”,往往是因为全局路径过于贴近障碍物,或者局部代价地图的传感器数据更新不及时,而不是局部算法本身的问题。