为什么是 Ubuntu 22.04 + ROS2 Humble
ROS 的版本和 Ubuntu 版本是强绑定的,装错组合会非常痛苦。对应关系:
| Ubuntu 版本 | 推荐 ROS2 版本 | 支持周期 |
|---|---|---|
| 22.04 (Jammy) | Humble (LTS) | 到 2027 年 |
| 24.04 (Noble) | Jazzy (LTS) | 到 2029 年 |
| 20.04 (Focal) | Foxy / ROS1 Noetic | 已 EOL |
ROS1 已经在 2025 年彻底停止维护,新项目不用再考虑。如果你的系统是 22.04,那 Humble 是目前最成熟稳妥的选择,本文以此为例。
> 确认你的系统版本:lsb_release -a
第 0 步:确认 locale
ROS2 要求 UTF-8 编码的 locale。先检查:
locale # 看是否有 UTF-8如果没有,设置一下:
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第 1 步:配置软件源
启用 universe 仓库,添加 ROS2 的 GPG key 和 apt 源:
# 1. 基础工具 + universe 仓库
sudo apt update
sudo apt install -y software-properties-common curl gnupg lsb-release
sudo add-apt-repository -y universe
# 2. 添加 ROS2 GPG key
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key
-o /usr/share/keyrings/ros-archive-keyring.gpg
# 3. 添加 ROS2 apt 源
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
sudo apt update⚠️ 国内避坑(重点)
直接
apt install ros-humble-desktop 时,我连续两次失败,报错分别是:**坑一:IPv6 不通,apt 一直在死磕 IPv6**
E: Failed to fetch http://packages.ros.org/...
Cannot initiate the connection to packages.ros.org:80 (2600:3402:...).
- connect (101: Network is unreachable)很多机器/网络没有可用的 IPv6,但 apt 默认会优先尝试 IPv6 地址,结果一直
Network is unreachable。**解决办法:强制 apt 走 IPv4**,在所有 apt 命令加 -o Acquire::ForceIPv4=true:sudo apt-get -o Acquire::ForceIPv4=true install -y ros-humble-desktop想永久生效,可以写进配置:
echo 'Acquire::ForceIPv4 "true";' | sudo tee /etc/apt/apt.conf.d/99force-ipv4**坑二:默认 Ubuntu 镜像不稳定,个别包反复下载失败**
强制 IPv4 后,ROS 的包能下了,但 Ubuntu 自带源(
cn.archive.ubuntu.com)里有几个包(视频驱动类,如 i965-va-driver、va-driver-all、proj-bin 等)反复 Unable to connect,最后 apt 报 held broken packages 直接中止整个安装。**解决办法:把 Ubuntu 源换成稳定的国内镜像**(清华或阿里都行)。先备份再替换:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 换成清华源
sudo sed -i -E
's|https?://(cn.archive|security).ubuntu.com/ubuntu/?|https://mirrors.tuna.tsinghua.edu.cn/ubuntu/|g'
/etc/apt/sources.list
sudo apt-get -o Acquire::ForceIPv4=true update> 小技巧:换源前先用 curl -4 -o /dev/null -w "%{http_code} %{time_connect}sn" https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ 测一下哪个镜像快又通,再决定换哪个。
第 2 步:安装 ROS2
避坑配置就位后,安装就顺了。
desktop 版本包含 RViz、demo、turtlesim 等可视化和示例工具,适合学习:sudo apt-get -o Acquire::ForceIPv4=true install -y
ros-humble-desktop
ros-dev-tools
python3-rosdep
python3-colcon-common-extensions- ros-humble-desktop:核心 + RViz + demo(约 2GB+)
- ros-dev-tools:开发工具集
- python3-rosdep:依赖管理
- python3-colcon-common-extensions:构建工具
> 下载量大,建议放后台跑,或用 tmux/nohup 防止 SSH 断连中断。下载完成后会进入解包/配置阶段,此时没有网络流量是正常的,别误以为卡住了。
第 3 步:配置环境变量
让每次开终端自动加载 ROS 环境:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
echo "export ROS_DOMAIN_ID=0" >> ~/.bashrc
source ~/.bashrcROS_DOMAIN_ID 用于隔离同一局域网内不同的 ROS2 系统,默认 0 即可,多人/多机环境再按需区分。第 4 步:初始化 rosdep
rosdep 用于自动安装功能包的系统依赖,后续编译别人的包时几乎必用:sudo rosdep init
rosdep update> rosdep update 会从 GitHub 拉取索引,国内偶尔会超时。多试几次,或配置 GitHub 镜像/代理。
第 5 步:验证安装(talker / listener)
ROS2 的"Hello World"——一个节点发消息,另一个收消息。开两个终端:
# 终端 1
ros2 run demo_nodes_cpp talker
# 终端 2
ros2 run demo_nodes_py listener如果 listener 持续打印
I heard: [Hello World: N],且编号和 talker 发布的对得上,说明 ROS2 的节点发现和 DDS 通信完全正常。✅再试试经典的小乌龟:
ros2 run turtlesim turtlesim_node第 6 步:建一个工作区
后续自己写包都放工作区里。建好并用
colcon 验证一下工具链:mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build # 空工作区也能跑通,验证 colcon 正常
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc构建后会生成
build/、install/、log/ 三个目录。注意 .bashrc 里 **先 source 系统的 /opt/ros/humble,再 source 工作区的 overlay**,顺序不能反。小结
国内装 ROS2,90% 的坑都在网络上。记住两条:
1. 强制 IPv4:-o Acquire::ForceIPv4=true
2. 换国内镜像:清华 / 阿里
剩下的就是按官方流程一步步来。装完跑通 talker/listener,就可以开始你的机器人开发之旅了。
---
*环境:Ubuntu 22.04.5 LTS / x86_64 / ROS2 Humble*