本章目标:在 Ubuntu 22.04 上完成 ROS2 Humble 的完整安装与配置,建立高效的开发工作流。作为嵌入式工程师,你可能已经习惯了 Keil/IAR/VSCode + STM32CubeIDE 的开发环境,本章将帮助你建立一套同样顺手的 ROS2 开发环境。
2.1 Ubuntu 22.04 安装与基础配置
2.1.1 为什么必须是 Ubuntu 22.04?
ROS2 Humble Hawksbill 是官方推荐的 LTS(长期支持)版本,其支持周期如下:
表格
| 发行版 | 发布日期 | 支持终止 | 支持的 Ubuntu 版本 |
|---|---|---|---|
| Humble Hawksbill | 2022.05 | 2027.05 | Ubuntu 22.04 (Jammy) |
| Iron Irwini | 2023.05 | 2024.11(已终止) | Ubuntu 22.04 |
| Jazzy Jalisco | 2024.05 | 2029.05 | Ubuntu 24.04 (Noble) |
选择 Humble 的理由:
LTS 稳定性:作为首个 5 年支持周期的 ROS2 发行版,Humble 经过了最充分的社区验证
嵌入式生态成熟:micro-ROS、Nav2、MoveIt2 等关键包在 Humble 上最稳定
Ubuntu 22.04 兼容性:与 NVIDIA Jetson、树莓派等嵌入式平台的官方镜像完美匹配
企业级采用率:工业界目前最广泛部署的 ROS2 版本
虽然 Jazzy 支持到 2029 年,但截至 2026 年,Humble 仍然是嵌入式/机器人领域的事实标准。如果你是初学者,跟随本书使用 Humble 是最稳妥的选择。
2.1.2 安装方式选择
根据你的硬件条件,有三种安装路径:
| 方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 物理机双系统 | 有闲置 PC/工控机 | 性能最佳,硬件直通 | 需要独立硬盘分区 |
| 虚拟机 (VMware/VirtualBox) | Windows 主力机 | 不影响现有系统 | 3D 加速受限,Gazebo 卡顿 |
| WSL2 (Windows Subsystem) | Windows 11 用户 | 与 Windows 深度集成 | 网络/串口设备映射较复杂 |
嵌入式工程师建议:如果你有闲置的 x86 工控机或旧笔记本(i5 及以上,8GB 内存),强烈建议物理机安装。因为后续章节涉及 Gazebo 仿真、RViz 可视化、以及 micro-ROS Agent 与 STM32 的串口通信,物理机的稳定性和硬件兼容性远胜虚拟化方案。
2.1.3 物理机安装步骤(简要)
下载 Ubuntu 22.04.5 LTS ISO
# 官方镜像(国内访问较慢) https://releases.ubuntu.com/22.04/ubuntu-22.04.5-desktop-amd64.iso # 推荐国内镜像源(清华/阿里云) https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/制作启动盘
Windows:使用 Rufus 或 Ventoy 写入 ISO 到 U 盘
Linux/macOS:
sudo dd if=ubuntu-22.04.5-desktop-amd64.iso of=/dev/sdX bs=4M status=progress
BIOS 设置
关闭 Secure Boot(ROS2 部分驱动需要)
选择 UEFI 模式启动
若安装后无法引导,检查 SATA 模式是否为 AHCI(非 RAID)
分区建议(256GB SSD 为例)
/boot/efi 512MB EFI 系统分区 /boot 1GB 内核与引导文件 / 80GB 根目录(系统+软件) /home 150GB 用户数据(代码、rosbag、仿真模型) swap 8GB 交换分区(内存≥16GB 可省略)
2.1.4 安装后的基础配置
1. 更换国内软件源(加速后续下载)
# 备份原配置 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 编辑源列表(选择你所在地区最快的镜像) sudo nano /etc/apt/sources.list将内容替换为清华源(Jammy 即 22.04 代号):
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiversebash
sudo apt update && sudo apt upgrade -y2. 安装基础工具链
# 构建工具 sudo apt install -y build-essential cmake git wget curl # Python 开发环境(ROS2 大量使用 Python) sudo apt install -y python3-pip python3-venv python3-colcon-common-extensions # 常用工具 sudo apt install -y htop vim net-tools can-utils # 串口工具(后续连接 STM32 需要) sudo apt install -y minicom picocom3. 配置 Git(代码版本管理)
git config --global user.name "Your Name" git config --global user.email "your.email@example.com" git config --global init.defaultBranch main4. 中文输入法(可选)
sudo apt install -y fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk4 # 注销后重新登录,在"设置→键盘"中添加中文输入法2.2 ROS2 Humble 安装
2.2.1 设置 Locale
ROS2 需要 UTF-8 编码支持:
locale # 检查当前设置 # 若未设置,执行以下命令 sudo apt update && sudo apt install -y locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 export LANG=en_US.UTF-8 locale # 再次验证注意:虽然可以设置为中文 locale,但 ROS2 社区大量文档和日志使用英文,建议保持
en_US.UTF-8以避免潜在编码问题。
2.2.2 添加 ROS2 软件源
# 安装依赖 sudo apt install -y software-properties-common sudo add-apt-repository universe # 添加 ROS2 GPG key sudo apt update && sudo apt install -y curl gnupg lsb-release sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg # 添加仓库到 sources.list echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://packages.ros.org/ros2/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null # 更新索引 sudo apt update国内用户加速:若 GitHub 访问缓慢,可使用清华镜像源替代官方源:
bash
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
2.2.3 安装 ROS2 Humble
ROS2 提供两种安装选项:
| 安装类型 | 命令 | 大小 | 适用场景 |
|---|---|---|---|
| Desktop 完整版(推荐) | ros-humble-desktop | ~2.5GB | 包含 RViz、Gazebo、仿真工具 |
| Base 基础版 | ros-humble-ros-base | ~1GB | 仅核心通信库,无 GUI 工具 |
对于本文学习,强烈推荐 Desktop 完整版:
sudo apt update sudo apt install -y ros-humble-desktop安装过程约 15-30 分钟(取决于网络速度)。安装完成后,系统已包含:
rclcpp/rclpy:C++/Python 客户端库
RMW 实现:默认 Fast DDS
ros2cli:命令行工具集
RViz2:3D 可视化工具
Gazebo:物理仿真器
TurtleSim:2D 教学仿真环境
2.2.4 安装开发工具与依赖
# 构建工具(colcon 是 ROS2 的构建系统,对应 ROS1 的 catkin) sudo apt install -y python3-colcon-common-extensions python3-rosdep # 初始化 rosdep(依赖解析工具,类似 apt 但针对 ROS 包) sudo rosdep init rosdep updaterosdep 常见问题:若
sudo rosdep init报错 "already initialized",说明系统已有初始化记录,可跳过。若rosdep update超时,多试几次或检查网络代理设置。
2.2.5 安装额外工具包(建议)
# 常用 CLI 工具增强 sudo apt install -y ros-humble-rqt* ros-humble-plotjuggler-ros # 导航与仿真相关(后续章节需要) sudo apt install -y ros-humble-navigation2 ros-humble-nav2-bringup sudo apt install -y ros-humble-turtlebot3* # 微控制器通信(micro-ROS 相关) sudo apt install -y ros-humble-ament* ros-humble-rmw*2.3 环境变量配置与验证
2.3.1 配置环境变量
ROS2 需要通过source命令加载环境变量。每次打开新终端时,都需要执行:
source /opt/ros/humble/setup.bash为避免每次手动输入,将其加入 shell 配置文件:
# 检查当前使用的 shell echo $SHELL # 通常是 /bin/bash # 追加到 ~/.bashrc echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc # 立即生效(或重新打开终端) source ~/.bashrc嵌入式工程师提示:这与你在 STM32 开发中设置
PATH包含交叉编译器链(如arm-none-eabi-gcc)是同一概念。setup.bash本质上就是设置了一系列环境变量(ROS_DISTRO、AMENT_PREFIX_PATH、PYTHONPATH等),让系统能找到 ROS2 的命令和库。
2.3.2 验证安装
1. 基础命令验证
# 检查 ROS2 版本 ros2 --version # 预期输出:ros2 命令的版本信息(如 0.18.3) # 查看已安装的 ROS2 发行版 ros2 distro list # 应显示 humble 等可用发行版 # 检查环境变量 printenv | grep -i ROS # 应显示 ROS_VERSION=2, ROS_DISTRO=humble 等2. 运行经典示例:Talker & Listener
打开两个终端,分别执行:
# 终端 1:发布者(Talker) source /opt/ros/humble/setup.bash # 若已加入 .bashrc 可省略 ros2 run demo_nodes_cpp talker# 终端 2:订阅者(Listener) ros2 run demo_nodes_cpp listener如果看到终端 1 持续输出Publishing: 'Hello World: 1',终端 2 同步输出I heard: [Hello World: 1],说明 ROS2 通信核心工作正常。
原理速览:这里运行的是 ROS2 的示例包
demo_nodes_cpp中的两个节点。talker节点在名为/chatter的 Topic 上发布字符串消息,listener节点订阅该 Topic 并打印接收到的内容。Topic 是 ROS2 中最基础的通信机制,后续章节会详细展开。
3. 可视化验证:TurtleSim
# 终端 1:启动仿真器 ros2 run turtlesim turtlesim_node # 终端 2:发送控制指令 ros2 run turtlesim turtle_teleop_key # 按键盘方向键控制小海龟移动如果弹出窗口显示小海龟并能用键盘控制,说明图形界面和事件循环也工作正常。
4. 节点与 Topic 查看
在第三个终端中:
# 查看当前运行的节点 ros2 node list # 输出:/turtlesim, /teleop_turtle # 查看活跃的 Topic ros2 topic list # 输出:/turtle1/cmd_vel, /turtle1/pose, /turtle1/color_sensor # 查看 Topic 数据类型 ros2 topic info /turtle1/cmd_vel # 输出:Type: geometry_msgs/msg/Twist # 实时打印 Topic 数据 ros2 topic echo /turtle1/pose2.3.3 常见问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
ros2: command not found | 环境变量未加载 | 执行source /opt/ros/humble/setup.bash |
Package 'demo_nodes_cpp' not found | 安装不完整 | sudo apt install ros-humble-demo-nodes-cpp |
| 多机通信失败 | DDS 发现配置问题 | 检查防火墙,设置ROS_LOCALHOST_ONLY=1 |
| Gazebo 启动黑屏/崩溃 | 显卡驱动问题 | 安装 proprietary 驱动,或设置LIBGL_ALWAYS_SOFTWARE=1 |
| 中文路径导致编译失败 | ROS2 不支持非 ASCII 路径 | 确保工作空间路径全为英文 |
2.4 VSCode + ROS2 插件配置
作为嵌入式工程师,你可能已经熟悉 VSCode 的 STM32 开发环境。本节将配置一套同样高效的 ROS2 C++/Python 开发环境。
2.4.1 安装 VSCode
# 方式 1:通过 snap 安装(推荐,自动更新) sudo snap install code --classic # 方式 2:手动下载 .deb 包 wget https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64 -O vscode.deb sudo dpkg -i vscode.deb sudo apt install -f # 修复依赖2.4.2 必装插件清单
打开 VSCode,按Ctrl+Shift+X进入扩展市场,安装以下插件:
| 插件名称 | 发布者 | 功能说明 |
|---|---|---|
| ROS | Microsoft | ROS 语法高亮、launch 文件支持、消息类型跳转 |
| C/C++ | Microsoft | C++ IntelliSense、调试、代码格式化 |
| Python | Microsoft | Python 语法高亮、Linting、调试 |
| CMake Tools | Microsoft | CMake 项目构建支持(ROS2 使用 ament_cmake) |
| ament_task_provider | nonanonno | ament/colcon 构建任务集成 |
| XML Tools | Red Hat | launch/param 文件格式化与验证 |
| YAML | Red Hat | YAML 配置文件支持 |
| Bracket Pair Colorizer | Coenraads | 括号匹配(阅读复杂 launch 文件时非常有用) |
搜索技巧:在扩展市场搜索
ROS2或ament,筛选下载量最高的插件。避免安装过多功能重复的插件。
2.4.3 工作区配置
ROS2 使用colcon作为构建系统(对应 ROS1 的 catkin_make/catkin build)。在 VSCode 中配置构建任务:
1. 创建工作空间
mkdir -p ~/ros2_ws/src cd ~/ros2_ws2. 配置 VSCode 工作区设置
在工作空间根目录创建.vscode/settings.json:
{ "ros.distro": "humble", "python.autoComplete.extraPaths": [ "/opt/ros/humble/lib/python3.10/site-packages" ], "python.analysis.extraPaths": [ "/opt/ros/humble/lib/python3.10/site-packages" ], "C_Cpp.default.intelliSenseMode": "gcc-x64", "C_Cpp.default.compilerPath": "/usr/bin/gcc", "C_Cpp.default.cppStandard": "c++17", "C_Cpp.default.includePath": [ "/opt/ros/humble/include/**", "${workspaceFolder}/install/**/include" ], "cmake.configureOnOpen": false, "files.associations": { "*.launch": "xml", "*.yaml": "yaml" } }3. 配置构建任务
创建.vscode/tasks.json:
{ "version": "2.0.0", "tasks": [ { "label": "colcon build", "type": "shell", "command": "colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo", "group": { "kind": "build", "isDefault": true }, "problemMatcher": [], "detail": "Build the workspace with colcon" }, { "label": "colcon test", "type": "shell", "command": "colcon test && colcon test-result --verbose", "group": "test", "problemMatcher": [] } ] }参数说明:
--symlink-install:以符号链接方式安装 Python 脚本和 launch 文件,修改后无需重新编译即可生效(开发阶段强烈建议)
-DCMAKE_BUILD_TYPE=RelWithDebInfo:带调试信息的发布模式,平衡性能与调试能力
4. 配置调试(C++ 节点)
创建.vscode/launch.json:
{ "version": "0.2.0", "configurations": [ { "name": "Debug ROS2 Node", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/install/<package_name>/lib/<package_name>/<node_name>", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [ {"name": "ROS_DISTRO", "value": "humble"}, {"name": "ROS_LOCALHOST_ONLY", "value": "1"} ], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] }嵌入式工程师对比:这与你在 VSCode 中配置
arm-none-eabi-gdb调试 STM32 类似,只是这里使用本地gdb而非远程 GDB Server。
2.4.4 代码风格配置
ROS2 有官方的代码风格规范(基于 Google C++ Style 的变体)。安装格式化工具:
sudo apt install -y clang-format pip3 install autopep8 # Python 格式化在 VSCode 中启用保存时自动格式化:
// 追加到 .vscode/settings.json { "editor.formatOnSave": true, "C_Cpp.clang_format_style": "file", "C_Cpp.clang_format_fallbackStyle": "Google", "python.formatting.provider": "autopep8" }2.5 可选:Docker 方式运行 ROS2
如果你希望保持主机系统"干净",或需要在同一台机器上快速切换 ROS2 版本,Docker 是理想选择。
2.5.1 安装 Docker
# 卸载旧版本 sudo apt remove docker docker-engine docker.io containerd runc # 安装依赖 sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release # 添加 Docker 官方 GPG key sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 设置仓库 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装 Docker Engine sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # 验证安装 sudo docker run hello-world # 免 sudo 使用 Docker(需重新登录生效) sudo usermod -aG docker $USER2.5.2 拉取 ROS2 Humble 镜像
# 官方镜像(包含 Desktop 环境) docker pull osrf/ros:humble-desktop-full # 或使用 ROS 官方基础镜像(更轻量) docker pull ros:humble-ros-base2.5.3 运行容器(带 GUI 支持)
由于 ROS2 大量使用 RViz、Gazebo 等 GUI 工具,需要配置 X11 转发:
# 允许本地 X Server 接收连接 xhost +local:docker # 运行容器 docker run -it \ --name ros2_humble \ --privileged \ --network host \ -e DISPLAY=$DISPLAY \ -e QT_X11_NO_MITSHM=1 \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v $HOME/ros2_ws:/root/ros2_ws \ -v /dev:/dev \ osrf/ros:humble-desktop-full \ bash参数说明:
--privileged:授予容器访问主机设备的权限(串口、USB 等,后续连接 STM32 需要)
--network host:使用主机网络栈(DDS 发现需要)
-v /dev:/dev:映射设备文件(访问/dev/ttyUSB0等串口)
-v $HOME/ros2_ws:/root/ros2_ws:挂载工作空间到容器内
2.5.4 创建便捷的启动脚本
在主机~/.bashrc中添加别名:
alias ros2-docker='xhost +local:docker && docker start ros2_humble && docker exec -it ros2_humble bash' alias ros2-docker-fresh='xhost +local:docker && docker run -it --rm --privileged --network host -e DISPLAY=$DISPLAY -e QT_X11_NO_MITSHM=1 -v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/ros2_ws:/root/ros2_ws -v /dev:/dev osrf/ros:humble-desktop-full bash'2.5.5 Docker vs 物理机的选择建议
| 维度 | 物理机安装 | Docker 方案 |
|---|---|---|
| 性能 | 100% 原生性能 | ~95-98%,GUI 略有开销 |
| 串口/硬件 | 直接访问 | 需--privileged映射 |
| DDS 多机通信 | 零配置 | 需--network host |
| 环境隔离 | 单一环境 | 可多版本并存 |
| 系统污染 | 软件包安装到系统 | 完全隔离 |
| 学习曲线 | 低 | 需了解 Docker 基础 |
建议:如果你是 ROS2 初学者,先用物理机安装走完本书所有示例。待熟悉后,若需要维护多个项目或版本,再迁移到 Docker。
2.6 环境验证清单
完成本章后,请确认以下检查项全部通过:
[ ] Ubuntu 22.04 成功启动,locale 设置为
en_US.UTF-8[ ]
ros2 --version返回版本号[ ]
ros2 run demo_nodes_cpp talker+listener跨终端通信成功[ ]
ros2 run turtlesim turtlesim_node图形界面正常显示[ ] VSCode 能打开
~/ros2_ws,C++ 代码有 IntelliSense 提示[ ]
Ctrl+Shift+B能触发 colcon build(虽然此时工作空间为空)[ ] (可选)Docker 容器内能运行
ros2 topic list
本章小结
Ubuntu 22.04 + ROS2 Humble 是本书的标准开发平台,Humble 作为首个 5 年 LTS 版本,是 2026 年最稳定、生态最成熟的选择。
环境变量配置是 ROS2 开发的基础,理解
setup.bash的作用等同于理解交叉编译工具链的PATH设置。VSCode + colcon 构成了 ROS2 的高效开发工作流,
--symlink-install是开发阶段必须掌握的编译选项。Docker 提供了环境隔离的备选方案,但在硬件交互(串口、DDS 多机)时需要额外配置。
在下一章,我们将创建你的第一个 ROS2 工作空间和功能包,正式踏上 ROS2 开发之旅。