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 建议手动执行,避免多个工作空间互相覆盖。
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 误区/复盘:环境搭建的五大典型错误
- 版本不匹配:Ubuntu 20.04 装 ROS2 Humble(应装 Foxy),导致依赖冲突。务必先查
rosdistro兼容表。 - 忘记 source:新终端直接运行
ros2命令报错。解决:将 source 写入~/.bashrc,或每次手动执行。 - 工作空间 source 顺序错误:先 source 应用空间再 source 基础空间,导致应用空间找不到基础包。必须从底层到上层依次 source。
- colcon build 在 src 目录执行:必须在工作空间根目录(含
src的上级)执行,否则报“No package found”。 - 清理不彻底:修改 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”的错误,观察报错信息,加深记忆。