3. ROS2 环境搭建:安装 ROS2、配置环境、创建和管理工作空间

3.1 核心原理:从“系统层”到“用户层”的三级环境体系

ROS2 的环境搭建并非简单的“装一个软件”,而是建立一套从操作系统到用户开发目录的三级环境体系。理解这套体系,是后续所有开发的基础。

  • 第一级:系统依赖层(底层)——包括 Ubuntu 操作系统、Python3、编译器(gcc/g++)、CMake 等基础工具。ROS2 运行在这些系统库之上,因此系统版本与 ROS2 发行版的匹配至关重要(例如 Ubuntu 22.04 对应 ROS2 Humble)。
  • 第二级:ROS2 核心层(中间层)——即 ROS2 本体,包含核心通信库(rmw)、客户端库(rclcpp/rclpy)、常用工具(rviz2、gazebo)等。安装后通过 source /opt/ros/humble/setup.bash 引入环境变量,使 shell 能找到 ROS2 命令和库文件。
  • 第三级:工作空间层(用户层)——即用户创建的 dev_ws 等目录,用于存放自己的功能包(package)。通过 colcon build 编译后,再 source install/setup.bash 让系统识别新编译的包。

这三层是叠加关系:系统层 → ROS2 核心层 → 工作空间层。每次打开新终端,都需要重新 source 第二层和第三层的环境脚本,否则命令无法找到。

关键认知:环境变量是“会话级”的。每个终端是一个独立的 shell 会话,source 只对当前终端生效。因此,将 source 命令写入 ~/.bashrc 可免去每次手动输入的麻烦,但工作空间的 source 建议手动执行,避免多个工作空间互相覆盖。
ROS2 三级环境体系与 source 流程 第一级:系统依赖层 Ubuntu 22.04 · Python3 · gcc/g++ · CMake · 系统库 无需 source 第二级:ROS2 核心层 /opt/ros/humble/ · rclcpp/rclpy · rviz2 · gazebo source /opt/ros/humble/setup.bash 第三级:工作空间层(用户) ~/dev_ws/src · 自定义功能包 · colcon build 产物 source install/setup.bash

3.2 方法流程:安装、配置与工作空间创建

3.2.1 安装 ROS2(以 Humble 为例)

安装过程遵循“添加源 → 更新 → 安装 → 验证”四步法。核心命令如下:

# 1. 设置编码(确保 UTF-8)
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8

# 2. 添加 ROS2 软件源
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 3. 安装 ROS2 Humble(桌面版含 rviz2 等工具)
sudo apt update
sudo apt install ros-humble-desktop

# 4. 验证安装
ros2 --help
ros2 run demo_nodes_cpp talker   # 测试通信
常见坑:若 ros2 --help 提示“command not found”,说明未 source 环境。先执行 source /opt/ros/humble/setup.bash 再试。若仍失败,检查是否安装的是 ros-humble-ros-base(最小版)而非桌面版。

3.2.2 配置环境变量

为避免每次打开终端都手动 source,推荐将 ROS2 核心环境写入 ~/.bashrc:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc   # 立即生效

同时建议安装 colcon 编译工具和 argcomplete(用于命令补全):

sudo apt install python3-colcon-common-extensions python3-argcomplete

3.2.3 创建和管理工作空间

工作空间是 ROS2 项目的组织单元,标准结构为 src(源码)、build(中间文件)、install(安装产物)、log(日志)。创建流程如下:

# 1. 创建工作空间目录
mkdir -p ~/dev_ws/src
cd ~/dev_ws

# 2. 编译空工作空间(生成 build/install/log)
colcon build

# 3. 添加功能包(示例:创建 C++ 包)
cd ~/dev_ws/src
ros2 pkg create my_package --build-type ament_cmake --dependencies rclcpp

# 4. 回到根目录编译
cd ~/dev_ws
colcon build --packages-select my_package

# 5. source 工作空间
source install/setup.bash

# 6. 验证包是否可见
ros2 pkg list | grep my_package
目录/文件 作用 是否手动创建
src/ 存放所有功能包源码 是(mkdir -p)
build/ CMake 中间文件、编译缓存 否(colcon 自动生成)
install/ 编译后的可执行文件、库、环境脚本 否(colcon 自动生成)
log/ 编译日志、测试结果 否(colcon 自动生成)
setup.bash 工作空间环境变量脚本(在 install/ 下) 否(colcon 自动生成)

3.3 案例/场景:多工作空间切换与依赖管理

实际开发中,常遇到“多个工作空间并存”的场景。例如:

  • 基础工作空间 ~/ros2_ws:存放通用接口包(如自定义消息 msg_srv)。
  • 应用工作空间 ~/robot_ws:存放机器人具体功能包,依赖基础工作空间的接口。

此时需要先 source 基础工作空间,再 source 应用工作空间,形成“叠加覆盖”效果:

# 终端 1:先加载 ROS2 核心,再加载基础工作空间
source /opt/ros/humble/setup.bash
source ~/ros2_ws/install/setup.bash

# 终端 2:在应用工作空间编译时,需让 colcon 找到依赖
cd ~/robot_ws
source /opt/ros/humble/setup.bash
source ~/ros2_ws/install/setup.bash   # 让 colcon 能找到 msg_srv
colcon build --packages-select robot_bringup
复盘要点:若编译时提示“Package 'msg_srv' not found”,99% 是因为没有 source 包含该包的工作空间。记住:colcon build 只编译当前工作空间,但依赖解析依赖环境变量。务必先 source 依赖空间,再编译当前空间。

3.4 误区/复盘:环境搭建的五大典型错误

  1. 版本不匹配:Ubuntu 20.04 装 ROS2 Humble(应装 Foxy),导致依赖冲突。务必先查 rosdistro 兼容表。
  2. 忘记 source:新终端直接运行 ros2 命令报错。解决:将 source 写入 ~/.bashrc,或每次手动执行。
  3. 工作空间 source 顺序错误:先 source 应用空间再 source 基础空间,导致应用空间找不到基础包。必须从底层到上层依次 source。
  4. colcon build 在 src 目录执行:必须在工作空间根目录(含 src 的上级)执行,否则报“No package found”。
  5. 清理不彻底:修改 CMakeLists.txt 后未删除 build/install 缓存,导致旧文件残留。建议 rm -rf build install log 后重新编译。
快速自检清单:
  • 输入 echo $ROS_DISTRO 应输出 humble(或对应版本)。
  • 输入 which ros2 应显示 /opt/ros/humble/bin/ros2。
  • 在 ~/dev_ws 下执行 colcon build 后,install/ 目录存在且包含 setup.bash。
  • 新终端执行 ros2 pkg list 能看到自己创建的包。

环境搭建是 ROS2 开发的第一道门槛,也是后续所有章节(节点通信、参数、TF 等)的物理基础。只要理解“系统层 → 核心层 → 工作空间层”的叠加逻辑,并养成“先 source 再编译/运行”的习惯,就能避免绝大多数环境问题。建议读者在本地虚拟机中完整走一遍上述流程,并刻意制造一次“忘记 source”的错误,观察报错信息,加深记忆。