2. 环境搭建:安装Ubuntu Linux、ROS2发行版(如Humble),配置环境变量,验证安装

2.1 核心原理:为什么从Ubuntu开始?

ROS2并非一个独立的操作系统,而是构建在操作系统之上的机器人中间件框架。它依赖Linux内核提供的进程调度、网络协议栈、设备驱动(尤其是摄像头、激光雷达、串口等传感器接口)以及文件系统权限管理。Ubuntu是ROS2官方支持最完善、社区文档最丰富的发行版,绝大多数教程、驱动包和预编译二进制都优先针对Ubuntu发布。选择Ubuntu LTS(长期支持)版本,意味着你能获得长达5年的安全更新,且与ROS2的LTS发行版(如Humble Hawksbill)形成稳定的版本配对。

理解版本对应关系至关重要:Ubuntu 22.04 Jammy 对应 ROS2 Humble;Ubuntu 20.04 Focal 对应 ROS2 Foxy。混用版本会导致依赖库冲突(如Python版本、OpenSSL、编译器版本不匹配),这是初学者最常见的安装失败原因。

版本配对速查:若你使用虚拟机或双系统,请务必先确认Ubuntu版本再选择ROS2发行版。使用 lsb_release -a 可查看当前Ubuntu版本号。
Ubuntu 与 ROS2 版本配对关系 Ubuntu 22.04 LTS 代号:Jammy Jellyfish Ubuntu 20.04 LTS 代号:Focal Fossa ROS2 Humble Hawksbill LTS · 支持至2027年 ROS2 Foxy Fitzroy LTS · 支持至2023年 ⚠ 版本不匹配 → 依赖冲突、编译失败、运行时崩溃

2.2 方法流程:从零到可运行的完整步骤

环境搭建遵循“系统准备 → 软件源配置 → 核心安装 → 环境配置 → 验证”五步法。每一步都有明确的检查点,避免在错误基础上继续叠加问题。

步骤一:系统准备与更新

安装Ubuntu 22.04后,首先确保系统包索引和已安装软件均为最新。打开终端(Ctrl+Alt+T),执行:

sudo apt update
sudo apt upgrade -y
sudo apt install -y curl gnupg2 lsb-release software-properties-common
注意:不要跳过 apt upgrade。旧内核或旧库可能导致ROS2的DDS通信层无法正常工作,尤其是网络发现机制会因内核防火墙规则过旧而失效。

步骤二:配置ROS2软件源

ROS2官方二进制包托管在packages.ros.org。需要先添加ROS2的GPG密钥,再将软件源写入系统列表:

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 $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

sudo apt update

此步骤的核心是密钥验证机制——apt通过GPG密钥确认软件包来自官方源,防止中间人攻击。若网络受限,可尝试使用镜像源(如清华TUNA、阿里云)替换URL中的域名。

步骤三:安装ROS2 Humble桌面版

桌面版包含机器人开发所需的全部核心工具、可视化工具(RViz2、Gazebo)和示例程序,适合学习阶段:

sudo apt install -y ros-humble-desktop

若磁盘空间紧张(需约4-5GB),可安装基础版:

sudo apt install -y ros-humble-ros-base

安装完成后,还需安装开发工具链——编译工作空间所需的colcon、测试框架和命令行工具:

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

步骤四:配置环境变量

ROS2的环境变量脚本会设置AMENT_PREFIX_PATH、LD_LIBRARY_PATH、PYTHONPATH等关键路径。每次打开新终端都需要手动source,但更高效的做法是写入shell配置文件:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

若使用zsh,则将.bashrc替换为.zshrc。验证环境变量是否生效:

printenv | grep ROS
# 预期输出包含 ROS_DISTRO=humble 和 AMENT_PREFIX_PATH=/opt/ros/humble

步骤五:验证安装

运行ROS2自带的talker-listener示例,这是验证DDS通信是否正常的最快方式。打开两个终端:

终端1(发布者):

ros2 run demo_nodes_cpp talker

终端2(订阅者):

ros2 run demo_nodes_py listener

若终端2持续输出[INFO] I heard: [Hello World: N],说明节点发现、话题通信、进程间通信全部正常。再使用ros2 doctor做全面体检:

ros2 doctor
# 输出 "All 4 checks passed" 表示环境健康

2.3 案例/场景:虚拟机与双系统的选择

不同硬件条件下的安装策略差异显著。以下对比帮助你在实际场景中做出合理选择:

场景 推荐方案 关键考量
Windows笔记本(8GB内存) VMware/VirtualBox虚拟机 分配4GB内存、2核CPU;启用3D加速;磁盘预分配40GB
Mac M1/M2芯片 UTM虚拟机(ARM版Ubuntu) 需下载ARM64架构的Ubuntu镜像;ROS2 Humble支持arm64
高性能台式机(16GB+) 双系统(Ubuntu独占磁盘) 获得完整GPU加速和实时性能;注意备份Windows引导
树莓派4B Ubuntu Server 22.04 + ROS2 Humble 安装ros-base而非desktop;编译需数小时,建议直接apt安装
实操建议:虚拟机网络模式务必选择“桥接模式”而非“NAT模式”。NAT模式下ROS2的DDS多播发现机制可能失效,导致两个终端无法互相发现节点。若已使用NAT且通信失败,可临时设置环境变量 export ROS_DOMAIN_ID=42 并改用单播发现。

2.4 误区/复盘:常见安装失败原因与排查

根据社区数千条问题反馈,以下五个误区占据了安装失败原因的80%以上。逐一对照排查,能大幅缩短排障时间。

  • 误区一:版本不匹配。在Ubuntu 20.04上强行安装Humble,或使用apt install ros-humble-desktop时出现依赖错误。复盘:先执行lsb_release -a确认系统版本,再对照官方兼容矩阵。
  • 误区二:忘记source环境变量。新开终端直接运行ros2命令报“command not found”。复盘:检查~/.bashrc末尾是否有source行;若手动source后可用,说明写入配置时路径有误。
  • 误区三:GPG密钥过期或网络代理拦截。apt update报错“The following signatures couldn't be verified”。复盘:重新下载密钥文件,或配置apt代理:sudo apt -o Acquire::http::Proxy="http://代理IP:端口" update。
  • 误区四:Python版本冲突。系统自带Python3.10,但用户安装了Anaconda导致colcon无法识别。复盘:ROS2命令前使用/usr/bin/python3显式指定解释器,或暂时移除Anaconda的PATH。
  • 误区五:防火墙或VPN干扰DDS通信。talker和listener在同一台机器上却无法通信。复盘:执行sudo ufw disable关闭防火墙测试;若使用VPN(如公司网络),尝试断开后重试。
终极排障命令:当所有检查都通过但通信仍失败时,执行 ros2 doctor --report 生成完整诊断报告,重点查看“Network Configuration”和“RMW Implementation”两节。报告会明确提示是共享内存问题、多播路由问题还是DDS实现冲突。