第2章 · ROS2环境搭建

说实话,搭建开发环境这件事,看着琐碎,但却是整个机器人开发的地基。我见过太多同学在URDF模型上花了很多心思,结果因为ROS2环境没配好,跑起来各种报错,最后心态崩了。这一章咱们就把地基夯实——从Ubuntu系统安装,到ROS2 Humble的完整配置,再聊聊那几个你天天都会用到的核心概念。

ROS2 环境搭建 Ubuntu 22.04 安装 ROS2 Humble 安装 环境配置 & 工作空间 节点·话题·服务·动作 🔧 核心工具链 colcon · rosdep · rviz2 · rqt · teleop_twist_keyboard

2.1 Ubuntu系统安装 —— 选对版本,少走弯路

我个人习惯用 Ubuntu 22.04 LTS,因为它和ROS2 Humble是官方推荐的黄金搭档。你可能会问:「我用20.04行不行?」嗯,也能装,但有些依赖包会折腾你半天。我建议直接上22.04,省心。

  • 下载镜像:去Ubuntu官网下载桌面版iso,别下成server版了。
  • 制作启动盘:用Rufus(Windows)或者balenaEtcher(macOS/Linux),注意U盘要8GB以上。
  • 安装要点:分区时建议给根目录 / 至少50GB,如果你打算跑Gazebo仿真,最好留100GB。
💡 我的小习惯:装完系统第一件事,换国内源(清华或阿里)。不然你后面装ROS2包的时候,下载速度会让你怀疑人生。

2.2 ROS2 Humble 安装 —— 跟着步骤来,别跳步

ROS2的安装流程其实很固定,但很多人喜欢跳步,结果缺了依赖。我带你捋一遍核心步骤:

  1. 设置locale:确保UTF-8支持,不然有些工具会乱码。
  2. 添加ROS2 apt源:把官方源或镜像源加进sources.list。
  3. 安装桌面版:sudo apt install ros-humble-desktop,这个包包含了大多数常用工具。
  4. 安装开发工具:colcon、rosdep、vcstool 这些后面都会用到。
# 添加ROS2源(以清华镜像为例)
sudo apt update && sudo apt install curl gnupg lsb-release
sudo curl -sSL https://mirrors.tuna.tsinghua.edu.cn/ros2/ros.key | sudo apt-key add -
sudo sh -c 'echo "deb https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2.list'

# 安装桌面版
sudo apt update
sudo apt install ros-humble-desktop python3-colcon-common-extensions
⚠️ 我曾经踩过的坑:安装完成后忘了安装 python3-colcon-common-extensions,结果编译工作空间时找不到colcon命令。别笑,我至少帮三个同事排查过这个问题。

2.3 ROS2 环境配置 —— 让系统认识ROS2

装完只是第一步,你得让终端知道ROS2在哪。说白了就是source一下环境变量。

# 每次打开终端都要执行
source /opt/ros/humble/setup.bash

# 或者直接写进 ~/.bashrc,一劳永逸
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

我个人习惯把工作空间的setup也加进去,这样每次打开终端就能直接用。你想想看,如果每次都要手动source,多烦人。

✅ 验证安装:运行 ros2 run demo_nodes_cpp talker,如果能看到“Hello World”输出,说明环境没问题。

2.4 ROS2 核心概念 —— 节点、话题、服务、动作

这四个概念是ROS2的骨架。我刚开始学的时候也觉得抽象,但后来发现,说白了就是机器人系统里不同模块之间「说话」的方式。

概念一句话解释类比
节点 (Node)一个可执行程序,负责某一项具体任务就像公司里的一个员工
话题 (Topic)节点之间发布/订阅的异步数据流像公司广播,谁都能听
服务 (Service)一对一的请求-响应通信像你打电话问前台一个问题
动作 (Action)带反馈的长时间任务,可取消像你叫外卖:下单→等待→收到

节点是ROS2里的最小单元。每个节点只干一件事,比如一个节点控制电机,另一个节点处理激光雷达数据。我习惯把节点想象成「微服务」——职责单一,互相配合。

话题是最常用的通信方式。发布者只管发,订阅者只管收,双方不需要知道对方的存在。举个例子,激光雷达节点不断发布 /scan 话题,导航节点订阅它,就这么简单。

服务适合那种一问一答的场景,比如你让机器人「拍一张照片」,它返回图片数据。注意,服务是同步的,调用之后必须等结果。

动作是为长时间任务设计的。比如让机器人走到某个点,过程中你可以查询进度,也可以中途取消。我在做移动机器人项目时,动作几乎成了标配。

🔍 快速体验:打开两个终端,一个运行 ros2 run demo_nodes_cpp talker,另一个运行 ros2 run demo_nodes_cpp listener。你会看到talker发布消息,listener接收并打印。这就是话题通信最直观的例子。

好了,环境搭好了,概念也理清了。下一章我们就要开始动手写URDF了——不过在那之前,我建议你把本章的安装步骤再走一遍,确保每个命令都跑通。相信我,后面你会感谢现在这个认真的自己。