3、ROS2环境搭建:安装ROS2发行版、配置环境、验证安装、使用Docker
3.1 核心原理:发行版选择与系统兼容性
ROS2采用发行版(Distribution)机制管理版本迭代,每个发行版对应特定的Ubuntu LTS版本和Python版本。截至当前,主流发行版包括Humble Hawksbill(Ubuntu 22.04,长期支持至2027年)、Iron Irwini(Ubuntu 24.04,短期支持)以及Jazzy Jalisco(Ubuntu 24.04,长期支持)。选择发行版的核心原则是:优先匹配你的Ubuntu版本,其次考虑团队生态兼容性。若使用非LTS的Ubuntu版本(如23.10),官方不提供预编译包,只能源码编译,这会显著增加环境复杂度。
libfastrtps-dev)正确安装,否则后续节点间通信会出现“发现不了对方”的诡异问题。
3.2 方法流程:二进制安装与配置
官方推荐的安装方式是二进制包安装(apt源),相比源码编译节省数小时且便于后续卸载。核心流程分为四步:添加源 → 安装 → 配置环境 → 验证。以下以Ubuntu 22.04 + Humble为例,展示完整命令序列:
# 1. 设置编码(确保UTF-8支持)
sudo apt update && sudo apt install 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
# 2. 添加ROS2 apt源(需先安装curl和gnupg)
sudo apt install software-properties-common curl gnupg lsb-release
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
# 3. 安装ROS2 Humble桌面版(包含GUI工具,约2GB)
sudo apt update
sudo apt install ros-humble-desktop python3-argcomplete
# 4. 配置环境变量(写入~/.bashrc实现自动加载)
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
安装完成后,需要理解环境变量机制:setup.bash会设置AMENT_PREFIX_PATH、LD_LIBRARY_PATH等关键变量,使系统能找到ROS2的可执行文件和库。若在终端中运行ros2命令提示“command not found”,大概率是未source或source了错误的发行版路径。
3.3 案例/场景:验证安装与Docker隔离方案
验证安装最直接的方法是运行C++和Python的“Hello World”示例节点,并观察它们能否通过DDS通信。打开两个终端,分别执行:
# 终端1:运行C++发布者
ros2 run demo_nodes_cpp talker
# 终端2:运行Python订阅者
ros2 run demo_nodes_py listener
若终端2持续输出[INFO] I heard: [Hello World: 5],说明通信链路正常。此外,使用ros2 topic list应能看到/chatter话题,ros2 node list应显示/talker和/listener两个节点。
ros:humble-ros-base-jammy已预装ROS2核心,只需挂载工作空间即可开发。典型启动命令:
# 拉取镜像并进入交互式容器(挂载当前目录到容器/workspace)
docker run -it --rm \
-v $(pwd):/workspace \
-w /workspace \
ros:humble-ros-base-jammy \
bash
# 容器内需手动source(镜像默认不自动加载)
source /opt/ros/humble/setup.bash
使用Docker时需注意网络模式:默认bridge模式会隔离DDS多播发现,导致容器内节点无法与宿主机节点通信。若需跨容器通信,应使用--network host参数(Linux)或配置DDS的共享内存传输。
3.4 误区/复盘:常见安装问题与解决路径
| 症状 | 可能原因 | 解决命令/操作 |
|---|---|---|
ros2: command not found |
未source setup.bash | source /opt/ros/humble/setup.bash并检查~/.bashrc |
| apt安装时404错误 | Ubuntu版本与发行版不匹配 | 运行lsb_release -cs确认版本,更换对应发行版源 |
| 节点间无法互相发现 | DDS多播被防火墙拦截 | sudo ufw allow 7402/tcp或临时禁用防火墙测试 |
| Python import rclpy失败 | 未安装python3-colcon-common-extensions | sudo apt install python3-colcon-common-extensions |
典型复盘案例:某开发者在Ubuntu 20.04上强行安装ROS2 Humble,apt源解析后提示依赖版本冲突(libpython3.10不满足)。正确做法是使用Foxy(对应20.04)或升级系统。另一个高频误区是同时source多个ROS2版本,导致AMENT_PREFIX_PATH被覆盖,出现“包找不到”的假象。建议每个终端只source一个发行版,或使用docker隔离不同版本。
sudo pip install rclpy!这会绕过apt包管理器,导致系统级Python环境混乱。ROS2的Python库必须通过ros-humble-*包安装,或使用虚拟环境(venv)并正确设置PYTHONPATH。
最后,验证环境是否“干净”的黄金标准是:新建终端后直接运行ros2 doctor,该命令会检查环境变量、网络配置、DDS实现等关键项,输出All checks passed即表示环境健康。若出现警告,按提示逐项排查即可。