一、ROS2与Nav2初识:课程导论、环境总览、核心概念扫盲

各位同学,欢迎来到《ROS2与Nav2系统联调实战》的第一章。

我是你们这门课的主讲。在机器人行业摸爬滚打了快十年,从ROS1时代一路走到ROS2,踩过的坑、熬过的夜,真不算少。今天咱们要聊的,是整个课程的地基——ROS2和Nav2到底是什么,以及它们背后那套核心概念。

说白了,ROS2就是机器人的操作系统,而Nav2是它上面最成熟的导航框架。你想想看,一个机器人要自己走路,总得知道“我在哪”、“要去哪”、“怎么去”吧?Nav2就是干这个的。

1.1 课程导论:我们到底要学什么?

这门课不是纯理论,也不是简单的API调用。我的目标是:让你能亲手把一套完整的导航系统跑起来,并且知道出了问题怎么修。

我个人习惯把学习路径分成三段:

  • 基础扫盲(就是本章):搞懂ROS2的通信机制和Nav2的架构。
  • 环境搭建:装好所有依赖,让仿真环境跑起来。
  • 联调实战:修改参数、调试行为、处理异常。

我在项目中遇到过不少同学,装完ROS2就卡住了,为什么?因为不理解节点和话题的关系,出了问题根本不知道从哪查起。所以,咱们先把概念夯实了。

核心观点:ROS2是骨架,Nav2是血肉。不懂骨架,血肉就无处附着。

1.2 环境总览:你的工具箱里有什么?

先看看我们手头有哪些家伙事儿。我建议你至少准备以下环境:

组件 推荐版本 说明
Ubuntu 22.04 LTS 稳定,社区支持好
ROS2 Humble Hawksbill LTS版本,与Nav2兼容最佳
Nav2 Humble对应版本 跟随ROS2版本
Gazebo Ignition Fortress 或 Gazebo Classic 11 仿真环境

嗯,这里要注意:ROS2的版本和Ubuntu版本是绑定的。你用Ubuntu 22.04,就老老实实用Humble。我曾经见过有人硬要在20.04上装Humble,结果依赖冲突搞了三天——别走弯路。

我的建议:如果你刚入门,直接用Ubuntu 22.04 + ROS2 Humble。这是目前最稳的组合。

1.3 核心概念扫盲:节点、话题、服务、动作

这四个概念,是ROS2的基石。你想想看,一个机器人系统里,有激光雷达、有电机驱动、有路径规划……它们之间怎么说话?就是靠这四样东西。

1.3.1 节点(Node)

节点就是一个个独立的可执行程序。每个节点负责一件事。比如,/lidar_node只管发布激光数据,/motor_node只管接收速度指令去驱动轮子。

我刚开始学的时候,总想把所有功能写在一个文件里。后来发现,拆成节点才是正道——哪个节点崩了,不影响其他的,调试起来也方便。

1.3.2 话题(Topic)

话题是节点之间通信的“总线”。一个节点往话题上发数据(发布者),另一个节点从话题上收数据(订阅者)。这是ROS2里最常用的通信方式。

举个例子:激光雷达节点发布/scan话题,导航节点订阅它。数据流是单向的、持续的。

# 查看所有话题
ros2 topic list

# 查看某个话题的数据
ros2 topic echo /scan

避坑指南:我曾经在调试时发现话题数据一直收不到,查了半天,原来是发布者和订阅者的话题名字拼写不一致。ROS2不会报错,只会默默丢数据。所以,ros2 topic list是你的好朋友。

1.3.3 服务(Service)

服务是“请求-响应”模式。客户端发一个请求,服务端处理完返回一个结果。它适合那些需要即时反馈的操作,比如“打开摄像头”、“重置里程计”。

和话题不同,服务不是持续的流,而是一次性的问答。

# 调用服务示例
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2}"

1.3.4 动作(Action)

动作是服务的升级版。它也是“请求-响应”,但响应是异步的,而且可以反馈中间状态。Nav2里大量使用动作,比如“导航到目标点”。

你想想看,机器人去一个地方,路上可能遇到障碍、可能需要重新规划。动作可以告诉你“走到哪了”、“还剩多远”。服务做不到这一点。

一句话总结:话题用于持续数据流,服务用于一次性请求,动作用于长时间任务。

1.4 知识体系总览:一张图看懂

下面这张图,是我自己梳理的ROS2与Nav2核心关系。你看完应该能明白,这些概念是怎么串起来的。

ROS2 与 Nav2 核心概念关系图 ROS2 基础通信层 节点 (Node) 独立可执行单元 话题 (Topic) 持续数据流 服务 (Service) 请求-响应 动作 (Action) 带反馈的长时间任务 Nav2 导航应用层 行为树 (Behavior Tree) 控制导航逻辑流程 规划器 (Planner) 全局/局部路径规划 控制器 (Controller) 速度指令生成 基于 节点通过话题、服务、动作进行通信;Nav2在此基础上构建导航行为 实际运行示例 /lidar_node 发布 /scan 话题 → Nav2 规划器订阅 → 生成路径 → 通过动作发送给控制器 → 控制器发布 /cmd_vel 话题 → /motor_node 订阅并驱动电机

你看,从底层的节点通信,到上层的导航规划,整个链路是通的。理解了这张图,你就掌握了ROS2+Nav2的骨架。

1.5 本章小结

这一章,我们做了三件事:

  • 明确了课程目标——实战联调,不是纸上谈兵。
  • 梳理了环境需求——Ubuntu 22.04 + ROS2 Humble + Nav2。
  • 扫盲了四个核心概念——节点、话题、服务、动作。

我个人觉得,最难的不是记住概念,而是理解它们各自适合什么场景。记住我那句总结:话题用于流,服务用于问,动作用于跑。

下一章,我们会动手搭建开发环境。到时候,你就能亲手敲命令,看到节点在跑了。