第 2 章:ROS2开发环境搭建
2026/7/24 19:30:45 网站建设 项目流程

本章目标:在 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 Hawksbill2022.052027.05Ubuntu 22.04 (Jammy)
Iron Irwini2023.052024.11(已终止)Ubuntu 22.04
Jazzy Jalisco2024.052029.05Ubuntu 24.04 (Noble)

选择 Humble 的理由

  1. LTS 稳定性:作为首个 5 年支持周期的 ROS2 发行版,Humble 经过了最充分的社区验证

  2. 嵌入式生态成熟:micro-ROS、Nav2、MoveIt2 等关键包在 Humble 上最稳定

  3. Ubuntu 22.04 兼容性:与 NVIDIA Jetson、树莓派等嵌入式平台的官方镜像完美匹配

  4. 企业级采用率:工业界目前最广泛部署的 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 物理机安装步骤(简要)
  1. 下载 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/
  2. 制作启动盘

    • Windows:使用 Rufus 或 Ventoy 写入 ISO 到 U 盘

    • Linux/macOS:

      sudo dd if=ubuntu-22.04.5-desktop-amd64.iso of=/dev/sdX bs=4M status=progress
  3. BIOS 设置

    • 关闭 Secure Boot(ROS2 部分驱动需要)

    • 选择 UEFI 模式启动

    • 若安装后无法引导,检查 SATA 模式是否为 AHCI(非 RAID)

  4. 分区建议(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 multiverse

bash

sudo apt update && sudo apt upgrade -y

2. 安装基础工具链

# 构建工具 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 picocom

3. 配置 Git(代码版本管理)

git config --global user.name "Your Name" git config --global user.email "your.email@example.com" git config --global init.defaultBranch main

4. 中文输入法(可选)

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 update

rosdep 常见问题:若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_DISTROAMENT_PREFIX_PATHPYTHONPATH等),让系统能找到 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/pose
2.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进入扩展市场,安装以下插件:

插件名称发布者功能说明
ROSMicrosoftROS 语法高亮、launch 文件支持、消息类型跳转
C/C++MicrosoftC++ IntelliSense、调试、代码格式化
PythonMicrosoftPython 语法高亮、Linting、调试
CMake ToolsMicrosoftCMake 项目构建支持(ROS2 使用 ament_cmake)
ament_task_providernonanonnoament/colcon 构建任务集成
XML ToolsRed Hatlaunch/param 文件格式化与验证
YAMLRed HatYAML 配置文件支持
Bracket Pair ColorizerCoenraads括号匹配(阅读复杂 launch 文件时非常有用)

搜索技巧:在扩展市场搜索ROS2ament,筛选下载量最高的插件。避免安装过多功能重复的插件。

2.4.3 工作区配置

ROS2 使用colcon作为构建系统(对应 ROS1 的 catkin_make/catkin build)。在 VSCode 中配置构建任务:

1. 创建工作空间

mkdir -p ~/ros2_ws/src cd ~/ros2_ws

2. 配置 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 $USER
2.5.2 拉取 ROS2 Humble 镜像
# 官方镜像(包含 Desktop 环境) docker pull osrf/ros:humble-desktop-full # 或使用 ROS 官方基础镜像(更轻量) docker pull ros:humble-ros-base
2.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


本章小结

  1. Ubuntu 22.04 + ROS2 Humble 是本书的标准开发平台,Humble 作为首个 5 年 LTS 版本,是 2026 年最稳定、生态最成熟的选择。

  2. 环境变量配置是 ROS2 开发的基础,理解setup.bash的作用等同于理解交叉编译工具链的PATH设置。

  3. VSCode + colcon 构成了 ROS2 的高效开发工作流--symlink-install是开发阶段必须掌握的编译选项。

  4. Docker 提供了环境隔离的备选方案,但在硬件交互(串口、DDS 多机)时需要额外配置。

在下一章,我们将创建你的第一个 ROS2 工作空间和功能包,正式踏上 ROS2 开发之旅。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询