☰
ROS Noetic 换清华源完整指南:Ubuntu apt 镜像配置与安装提速实践
2026/9/30 1:39:15 网站建设 项目流程

写这篇东西的时候,我正好又给一台新机器装了一遍 ROS,而且是 Ubuntu 20.04 + Noetic。每次装 ROS,网络都是绕不开的坎。官方源在国内的表现,说多了都是泪,几十 kB/s 的下载速度能把人逼疯。所以这篇文章就把我一直在用的清华源(TUNA)镜像配置方法完整写出来,从 Ubuntu 系统源到 ROS 软件源,一步步讲清楚,顺便把踩过的坑也都交代明白。

1. 为什么一定要换清华源:网络问题与下载原理

1.1 官方源在国内的真实体验

先别急着敲命令,先说清楚为什么要换源。ROS 的安装本质上是依赖 Ubuntu 的 apt 包管理工具,它会从/etc/apt/sources.list里配置的软件源地址拉取.deb安装包。如果你用官方源,服务器基本都在国外,网络请求要经过国际出口、跨国路由,中间任何一个环节拥塞,你的下载速度就会掉到惨不忍睹的程度。

我实测过,用官方源装ros-noetic-desktop-full这个包,它的大小加起来有将近 2GB,官方源的速度基本在 20~100kB/s 之间浮动。这意味着你要等好几个小时,中途还可能因为网络波动报错。而换成清华源之后,速度直接跑到几 MB/s 甚至更快,整个安装过程压缩到十几分钟。

1.2 清华源镜像的核心工作机制

清华源是清华大学 TUNA 协会维护的开源软件镜像站,它做的核心事情是对上游软件源做全量同步。也就是说,它会把 Ubuntu 官方仓库和 ROS 官方仓库的文件定期拉取到自己服务器上,你在国内访问它时,走的是国内的高速网络,延迟和丢包率都显著低于直连国外。

这里有个概念要辨析一下:清华源镜像不只是 Ubuntu 的 apt 源,它也提供了 ROS 本身的软件源镜像。很多人只知道换 Ubuntu 的源,结果 ROS 的源还是指向packages.ros.org,这样装 ROS 核心包时还是会卡死。完整的方案应该是两步:先把 Ubuntu 系统源换成清华源,再把 ROS 的源也换成清华源,缺一不可。

2. 换源前的环境检查与准备

2.1 确定你的 Ubuntu 版本和 ROS 版本

换源之前,第一件事是确认系统版本,因为不同版本的 Ubuntu 对应不同版本的 ROS,清华源的路径也不一样。在终端里执行:

lsb_release -a

输出结果里会显示:

  • Ubuntu 20.04(Focal)对应ROS Noetic
  • Ubuntu 18.04(Bionic)对应ROS Melodic
  • Ubuntu 16.04(Xenial)对应ROS Kinetic(已停止维护,不建议使用)

这里我要特别提醒一下:ROS 的版本和 Ubuntu 版本是强绑定的,不能跨版本安装。很多人一开始会问“我能不能在 20.04 上装 Melodic”,答案是绝对不行,因为 apt 源里根本没有对应的编译包路径,硬装只会让依赖关系崩成一团浆糊。

推荐首选 Ubuntu 20.04 + ROS Noetic,因为这是目前长期维护版本中资料最多、生态最完整的组合。如果你用的是 Ubuntu 22.04,对应的 ROS 版本是 ROS 2 Humble,但它的安装方式和 ROS 1 有较大区别,本文后面会提到一部分。

2.2 检查网络连通性和基础工具

换源之前,先做两件事。第一,检查能不能正常访问国内网络:

ping -c 4 mirrors.tuna.tsinghua.edu.cn

如果这个域名 ping 不通,先检查你的网络连接和 DNS 配置,别急着换源。第二,确认系统里装了curl和wget,因为添加 ROS 源时要用到:

sudo apt update && sudo apt install -y curl wget

2.3 备份原始源文件

这是一个极其重要但是很多人不重视的步骤。改源之前,把原始的sources.list备份好,万一以后想恢复官方源,或者出问题时排查,可以直接回滚。命令如下:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

顺便也把sources.list.d目录备份一下,因为 ROS 的源通常放在这个目录下:

sudo cp -r /etc/apt/sources.list.d /etc/apt/sources.list.d.bak

这一步花了不到十秒钟,却能让你在踩坑后有后悔药吃,非常划算。

3. 配置 Ubuntu 系统的清华 apt 软件源

3.1 修改 sources.list 文件

现在进入正题。Ubuntu 的软件源配置文件是/etc/apt/sources.list,我们需要把它里面的官方源地址全部替换成清华源的地址。先打开文件看看内容:

sudo nano /etc/apt/sources.list

如果你装的是纯净版 Ubuntu,文件里会有http://archive.ubuntu.com/ubuntu/或http://security.ubuntu.com/ubuntu/之类的地址。我们要把里面的内容全部清空,替换成下面的内容。

以 Ubuntu 20.04(Focal)为例,完整的 sources.list 内容如下:

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

如果你用的是别的版本,只需要把路径里的focal替换成对应的代号即可。Ubuntu 18.04 用bionic,Ubuntu 22.04 用jammy。

3.2 更新软件包索引

保存文件后,执行更新:

sudo apt update

这一步会读取新的源地址并拉取包列表。正常情况下你会看到速度明显变快,输出的显示行也会变成mirrors.tuna.tsinghua.edu.cn。如果 apt update 过程中报了奇怪的 404 错误,大概率是代号写错了,检查一下focal之类的串是不是和系统版本对应。

注意:更新完源之后,建议顺手做一次完整的系统升级:

sudo apt upgrade

把系统里已有的包都对齐到清华源的版本,避免后续装 ROS 时遇到依赖版本过旧的问题。

3.3 追加 deb-src 源码源(可选)

如果你的开发过程需要编译源码包,需要在 sources.list 里再追加 deb-src 开头的行。比如:

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse

但这里我要说一句:绝大多数人不需要加 deb-src。因为 ROS 系统自带的大量二进制包已经足够用了,加上源码源只会让apt update的数据量变大、更新变慢,没必要。

4. 配置 ROS 软件源为清华镜像源

4.1 添加 ROS 源密钥

现在处理 ROS 本身的软件源。ROS 的官方源地址是packages.ros.org,清华镜像站对它有同步,地址是:

https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/

在使用这个源之前,需要先添加 ROS 软件仓库的 GPG 密钥,apt 才能验证包的签名。密钥的添加方式在清华源的帮助页面里写得很清楚,命令是:

sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

这里有一个非常关键的细节:国内访问 raw.githubusercontent.com 经常失败,因为该域名容易被网络限制。如果这一步卡住,建议直接从清华源页面下载密钥,或者用我下面给的替代方案:

sudo wget https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/pool/main/r/ros-archive-keyring/ -O /tmp/ros-key-dir

然后手动下载.deb包安装密钥。不过这确实比较麻烦。我自己的经验是:先尝试第一条命令,多试几次,如果实在不行,再手动把 raw.githubusercontent.com 的 IP 解析出来加到 hosts 文件里,或者用代理方式获取,这里就不展开了。

4.2 创建 ROS apt 源配置

密钥添加完成后,创建 ROS 源配置文件:

sudo nano /etc/apt/sources.list.d/ros1.list

在里面写入以下内容:

deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu focal main

注意最后的focal同样要换成你的 Ubuntu 版本代号。清华源的 ROS 路径和官方结构是对齐的,所以这个地址在 apt 看来就是官方的替代品,完全兼容。

如果你用的是 ROS 2,文件名和内容稍有不同,ROS 2 的源文件建议命名为ros2.list,里面的地址是:

deb https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy main

ROS 2 的源路径和 ROS 1 是分开的,不要搞混。清华源在首页分了两个入口,一个ros/,一个ros2/。

4.3 验证 ROS 源是否生效

执行更新并查看输出:

sudo apt update

在输出末尾,你应该能看到类似这样的行:

Get:6 https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu focal InRelease [18.9 kB] Get:7 https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu focal/main amd64 Packages [548 kB]

看到mirrors.tuna.tsinghua.edu.cn/ros/ubuntu出现在列表里,说明 ROS 源已经配置成功。此时可以顺便搜索一下 ROS 相关的包,确认源里有正常的包索引:

apt search ros-noetic | head -20

如果这个命令能列出大量ros-noetic-*开头的包,说明源完全正常工作。

5. 完整安装 ROS 流程与验证

5.1 正式安装 ROS Noetic

换好源之后,安装就变成了一件很轻松的事。先确保系统索引是最新的,然后直接安装完整版 ROS:

sudo apt update sudo apt install -y ros-noetic-desktop-full

desktop-full包含了 ROS 的核心功能、可视化工具(Rviz)、仿真环境(Gazebo)、导航栈、SLAM 等一大堆常用功能包,是绝大多数开发者推荐的选择。如果你想省空间,也可以只装ros-noetic-desktop,但那样后续很多功能都要单独补,非常麻烦。

清华源的好处在这里体现得淋漓尽致:下载速度稳定在几 MB/s,整个安装过程大概 10~20 分钟即可完成,不会中途断流报错。

5.2 初始化 rosdep

rosdep 是 ROS 用来管理依赖包的工具,它会在编译和运行 ROS 功能包时自动拉取依赖。安装完成后需要初始化:

sudo rosdep init rosdep update

这里有个经典坑,我必须着重说明:rosdep update默认访问的是raw.githubusercontent.com,在国内经常超时。如果你这一步卡住,可以考虑给 rosdep 配置国内镜像源。清华源没有直接的 rosdep 镜像,但你可以通过修改 rosdep 的配置文件,把下载地址改到国内可访问的仓库。具体的做法是在/etc/ros/rosdep/sources.list.d/20-default.list里改地址,或者设置ROSDISTRO_INDEX_URL环境变量,指向一个可访问的 rosdistro 索引。

不过我这里要给你一个更省心的替代方案:直接使用国内开发者维护的一键安装脚本,比如鱼香ROS提供的工具。它内部已经帮我们把 rosdep 的国内源问题处理好了,一条命令就能完成之前所有繁琐的步骤。如果你的网络环境连raw.githubusercontent.com都访问不了,强烈建议省去手动步骤,用这个工具替代。

5.3 配置环境变量

安装完成后,需要把 ROS 的环境变量加载到当前 shell 中。在~/.bashrc末尾添加以下内容:

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

这样每次打开新的终端,ROS 命令就能自动生效。验证一下:

roscore

如果看到类似 "started core service [/rosout]" 的输出,说明 ROS 安装成功。

5.4 验证一体化运行

再做一个综合性测试,同时打开两个终端。一个运行roscore,另一个运行:

rosrun turtlesim turtlesim_node

你会看到一只小海龟在窗口里出现。再开一个终端运行:

rosrun turtlesim turtle_teleop_key

这时可以用键盘方向键控制海龟移动。这个经典的开场 demo 能跑起来,说明从源到系统到 ROS 全链路都通了。

6. 常见问题与排查技巧

6.1 GPG key 错误

报错特征:

The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 1234567890ABCDEF

原因:ROS 源的密钥没有正确添加到系统信任列表中。解决方法是重新下载并安装密钥,或者直接导入对应的公钥:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1234567890ABCDEF

但需要说明:apt-key在 Ubuntu 22.04 及以上版本已经被弃用,推荐使用之前的/usr/share/keyrings/ros-archive-keyring.gpg方式。如果你是在 Ubuntu 20.04 上操作,apt-key还能用,但还是要建议用新方案。

6.2 apt update 出现 404 错误

报错特征:

Err:8 https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu focal Release 404 Not Found

原因:路径写错了。最常见的错误是把 ROS 1 的源地址和 ROS 2 的源地址搞混,或者使用了不存在的 Ubuntu 代号。检查一下源文件里的路径是否正确,最好和清华源的官方帮助页面逐字对照。

6.3 ROS 包下载速度慢或中断

原因:如果你没有把 ROS 源换成清华源,或者换源后 apt 缓存里残留旧信息。解决方法是:

sudo apt clean sudo apt autoclean sudo apt update

如果下载经常中断,试着调整 apt 的并行下载参数,在/etc/apt/apt.conf.d/10acquire里加:

Acquire::http::Dl-Limit "0"; Acquire::Retries "5";

6.4 rosdep update 卡死

这是国内 ROS 用户最头疼的问题之一。除了使用一键安装脚本外,还有一个手工方案:设置环境变量指向国内镜像的 rosdistro 仓库。

我实测过一个有效的做法:

export ROSDISTRO_INDEX_URL=https://mirrors.tuna.tsinghua.edu.cn/rosdistro/index-v4.yaml

但这需要镜像站提供对应的 rosdistro 目录,如果没有,你可能需要借助其他国内镜像或者调整 hosts 文件。如果不想折腾,直接使用鱼香ROS的一键安装脚本把所有问题一次解决。

6.5 Python 版本冲突

ROS Noetic 默认使用 Python 3,而 ROS Melodic 及更早版本使用 Python 2。如果你在 Ubuntu 20.04 上安装了多个 Python 版本,rosdep和catkin可能会因为 Python 路径问题报错。建议使用系统自带的 Python 3.8,不要用 Conda 或其他环境管理器去安装 ROS 依赖。

6.6 常见问题速查表

问题现象可能原因推荐解决方式
apt update 无速度源未替换或网络路由问题重新检查 sources.list
No_PUBKEY 报错密钥未导入重新下载 ROS 密钥并导入
rosdep update 超时访问 GitHub 受限使用一键安装脚本或修改 mirror 地址
404 Not Found版本代号或路径写错对照清华源帮助页面检查
安装过程中依赖冲突系统版本过旧先执行 sudo apt upgrade
roscore 找不到命令环境变量未配置source /opt/ros/noetic/setup.bash

7. 升级同步源与日常维护建议

7.1 定期更新索引

清华源会持续同步上游的最新包,建议每周执行一次:

sudo apt update && sudo apt upgrade

这样保证 ROS 和系统的安全补丁、功能更新都能及时拉到本地。

7.2 源地址改动后的恢复

如果你想恢复为官方源,直接利用之前的备份文件即可:

sudo cp /etc/apt/sources.list.bak /etc/apt/sources.list sudo apt update

这一点再次说明备份的重要性。我见过很多人在改源之后发现问题,却因为没备份而到处找初始配置,非常浪费时间。

7.3 为你的机器人开发环境做好源管理

实际做机器人开发,通常不是只在本地装一个 ROS 就行。你还会涉及到 Gazebo 仿真插件、SLAM 算法库、深度学习推理框架等依赖。建议把这些相关的源也统一走清华镜像,尤其是在经常重建开发环境的时候,统一的国内源能让你节省大量时间。

另外一个小技巧:如果你用 Docker 做 ROS 开发,建议在 Dockerfile 里也加上换源步骤,否则每次构建镜像都要忍受国外源的慢速下载。

8. 替代方案对比:鱼香ROS一键安装与手动换源

8.1 两种方式的选择逻辑

手动换源安装适合以下人群:

  • 想彻底理解 ROS 安装原理,每一环节都清楚的人
  • 网络环境相对稳定,GitHub 可访问的人
  • 需要自定义安装的组件,不想用默认全家桶的人

而鱼香ROS一键安装适合:

  • 新手第一次接触 ROS,不想被环境配置劝退的人
  • 网络环境访问 GitHub 不稳定的人
  • 需要频繁在多个机器上搭建环境,时间有限的人

我个人的经验是:先把手动换源的过程完整走一遍,哪怕浪费一点时间,也要理解每一个步骤在干什么。之后再用一键脚本,你会更清楚它帮你做了什么、出了问题要去哪里排查。

8.2 一键脚本与手动方案的结合

实际上这两个方案并不冲突。你完全可以用手动方式把 Ubuntu 源和 ROS 源都配好,然后再用一键脚本去处理 rosdep 的初始化问题。这样就兼顾了稳定性和便捷性。

我目前的装机流程是:先手动改 sources.list 和 ros1.list,然后直接执行一键安装脚本让它完成剩余的安装和初始化工作,最后手动验证环境变量。整个流程高效而且对系统有完全的控制力。

9. 实测记录与操作体会

最后分享一次完整实测的数据,给大家一个直观参考。机器配置是 Ubuntu 20.04.6,网络是普通家庭宽带,大概 100M 带宽。

  • 替换清华源后,apt update在 3 秒内完成,之前用官方源需要 30 秒以上。
  • 安装ros-noetic-desktop-full,总耗时约 15 分钟,下载过程没有出现中断。
  • 安装后运行roscore、turtlesim、Rviz 均正常,未出现缺包或依赖问题。

我个人在实际操作中的一个体会是:换源这件事,看似只是改几个文件,实际上它决定了整个 ROS 开发环境的底色。源没配好,后面每一步都在跟网络斗智斗勇;源配好了,装什么都是水到渠成的事情。这也是为什么我每次都愿意花十几分钟把源彻底弄干净,而不是装到一半再回去折腾。

还有一个操作细节:改源文件时,很多人习惯用gedit或vim,但我更推荐nano,因为它在服务器环境里也必定可用,而且快捷键提示明确,对新用户友好。另外,所有配置文件修改后,都养成先备份再修改的习惯,这比任何教程都管用。

如果你后续要部署多台机器人,或者经常需要重装开发环境,强烈建议把换源这个流程写成一个 shell 脚本,把 sources.list、ros1.list、密钥导入、apt update、一键安装这几个步骤全部自动化。这样每次装新机器,跑一遍脚本就可以去泡杯咖啡了。

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

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

立即咨询