news 2026/9/30 5:20:14

Ubuntu 20.04安装ROS Noetic全攻略:从换源到环境验证,亲测有效

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu 20.04安装ROS Noetic全攻略:从换源到环境验证,亲测有效

开头

Ubuntu 20.04装ROS Noetic这件事,我前前后后在不同的机器上折腾了不下二十次,有全新裸机、双系统、虚拟机,也有从ROS Melodic升级上来的老环境。说“亲测有效”不是标题党,而是每一步都真实跑过,踩过的坑比安装步骤本身还值得记录。

这篇文章写给谁看?简单说三类人:第一类是刚接触ROS、想在Ubuntu 20.04上搭好环境开始学习的小白;第二类是准备在20.04上跑ORB-SLAM3、机械臂控制、移动机器人导航等项目的开发者,因为很多ROS1项目现在依然依赖Noetic;第三类是装了又卸、卸了又装,被各种报错折磨到怀疑人生的“折腾党”。如果你属于其中任何一类,这篇文章应该能帮你少走不少弯路。我会把安装思路、完整步骤、环境验证、常见报错一次性讲完,尽量做到照着敲命令就能跑通。


1. 安装前的准备与思路

1.1 为什么是ROS Noetic,它现在还值得装吗

先回答一个很多人会问的问题:都什么年代了,为什么还在装ROS Noetic,不直接上ROS 2?

Noetic是ROS1的最后一个长期支持版本,发布于2020年5月,官方支持周期到2025年5月。它对应的操作系统就是Ubuntu 20.04(Focal Fossa)。虽然ROS 2是现在的趋势,但ROS1在过去十几年里沉淀了海量代码,从SLAM算法(ORB-SLAM3、Cartographer、LOAM)、导航栈(move_base、navigation2的前身)、机械臂控制(MoveIt、ar3机械臂)到各种仿真环境(Gazebo、Stage),大量项目至今仍然只在ROS1上验证过。我身边很多做移动机器人和机械臂的团队,生产环境里跑的还是Noetic。

所以我的建议很明确:如果你要复现论文代码、接手别人项目,或者课程教材用的是ROS1,那就老老实实装Noetic;如果是从零开始做新项目并且不需要老代码,可以考虑ROS 2。但今天的主题是Noetic,装好它之后想再学ROS 2,环境互不冲突,完全可以共存。

1.2 三种安装路线,选对能省一半时间

ROS Noetic的安装方式主要有三条路线,我分别说下适用场景:

  • 官方源安装:直接用packages.ros.org的源配合apt install。优点是版本最权威、更新及时,缺点是在国内网络环境下经常慢到怀疑人生,apt update的时候很可能卡住或者超时。
  • 国内镜像源安装:把ROS软件源换成清华TUNA或中科大的镜像,本质和官方源一样,就是换了个更快的地方下载。这是我最推荐的方式,也是本文的主体步骤。
  • 一键安装脚本:网上有热心开发者做的一键配置脚本,本质是把换源、添加密钥、安装核心包、初始化rosdep打包成了一条龙操作。优点是省事,缺点是出了问题你不知道它到底改了什么,排错时等于黑盒操作,所以我不建议新手直接用它。

对于大多数人,用国内镜像源手动安装是成功率最高、可排查性最强的方案。接下来的步骤完全围绕这条路线展开。

1.3 开始之前先检查三件事

安装前务必确认系统版本、Python版本和磁盘空间,这三点能避免一半以上的安装失败。

lsb_release -a python3 --version df -h

lsb_release -a查看Ubuntu版本,必须显示Focal Fossa(20.04)。如果你用的是Ubuntu 22.04,对应的是ROS 2 Humble,硬装ROS Noetic会有一堆依赖问题,别浪费时间。python3 --version确认是3.8系列,因为Noetic是ROS1里第一个完全基于Python 3的版本,如果系统默认Python被改成2.7,后续rosdep和catkin都会报错。df -h确认磁盘剩余空间,完整安装ROS Noetic desktop-full版大概需要4-5GB,空间太紧容易在安装中途失败,而且排错特别痛苦。


2. 完整安装步骤:从换源到验证

2.1 先更新Ubuntu软件源

ROS的安装过程会从Ubuntu软件源拉取很多依赖库,所以第一步先确保系统的apt源可用、索引是最新的。这一步很多人跳过,结果后面安装rosdep时遇到各种“404 Not Found”或“Unable to locate package”。

sudo apt update sudo apt upgrade -y

upgrade会把系统现有软件升级到新版本,耗时取决于网络状况,如果机器有正在运行的重要服务,建议先确认再升级。我一般会在新装好的系统上直接执行,因为环境干净,升级不会引发冲突。如果Ubuntu 20.04不是最新版本,upgrade有可能推送内核更新,这不会影响后面的ROS安装。

2.2 配置ROS软件源和密钥

这里要注意,ROS软件源和Ubuntu软件源是两回事。Ubuntu软件源是系统通用库,在/etc/apt/sources.list配置;ROS软件源是新增的独立行,通常放在/etc/apt/sources.list.d/ros-latest.list文件里。很多人以为改一下系统源就完事了,结果apt找不到ros-noetic-desktop-full,就是这里漏了。

官方源(能连外网时用):

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list'

国内镜像源(强烈推荐):

清华源、中科大源二选一即可。我在华北地区实测下来清华源速度比较稳定,南方用户中科大源也不差。

# 清华源 sudo sh -c 'echo "deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list' # 或者中科大源(任选其一,不要两个都写) sudo sh -c 'echo "deb https://mirrors.ustc.edu.cn/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list'

然后添加ROS的GPG密钥。ROS官方密钥服务器是keyserver.ubuntu.com,这一步有时候会超时,多试几次或者换成国内可访问的keyserver:

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

看到输出里出现gpg: Total number processed: 1或者imported: 1就说明密钥添加成功。添加完密钥后再执行一次sudo apt update,如果能刷出大量ros-noetic相关的包,说明ROS源已经生效。

2.3 安装ROS Noetic完整版

现在进入真正下载和安装的环节。我装的是desktop-full版,它包含ROS核心功能、rviz、Gazebo仿真器、turtlesim小乌龟示例、以及图像处理相关的依赖包。虽然ros-noetic-ros-base更小更快,但学ROS和跑仿真的话,desktop-full一步到位更省心。

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

这一步会拉取大量依赖包,输出几百行滚动信息是正常的,总下载量大。等它跑完,确认没有红色报错信息。安装完成后,你可以看一下/opt/ros/noetic目录是否已经存在:

ls /opt/ros/noetic

这个目录是ROS安装的根目录,后续source环境变量、查找包都会用到它。有的新手问过为什么装完没看到“ROS图标”或者“启动器”,其实ROS本身就不是一个“软件产品”,而是一套运行在Linux环境下的工具框架,所以它的存在形式就是目录、可执行文件和库文件。

2.4 初始化rosdep,解决依赖管理

rosdep是ROS生态里很重要的一个工具,它负责自动解决某个包在编译或运行时的系统依赖。比如某个ROS包需要OpenCV或者PCL,rosdep会读取包的配置文件,自动帮你安装对应版本的底层库。如果不初始化rosdep,后面创建catkin工作空间、编译别人的源码包时经常会卡在依赖解析上。

sudo rosdep init rosdep update

rosdep init会把rosdep的基础配置文件抓取到本地/etc/ros/rosdep/sources.list.d/,rosdep update则是更新具体的依赖索引。这两个命令在默认网络环境下很容易超时,因为rosdep的数据源托管在GitHub上。如果你遇到了超时,先不要着急重装系统,把配置改到国内可访问的镜像源即可:

# 先把初始配置拉下来 sudo rosdep init # 如果init已成功但update失败,则修改rosdep的源配置 # 编辑 /usr/lib/python3/dist-packages/rosdep2/sources_list.py 和 gbpdistro_support.py # 以及 /usr/lib/python3/dist-packages/rosdistro/__init__.py # 把里面的 raw.githubusercontent.com 替换为可访问的镜像域名

这个“改文件换源”的方法在两条命令都失效时比较稳定,不过这属于备用方案。实际上,我自己实测更多用的是rosdep update多试几次、或者在某些时间段(比如早晨网络状况好)执行,成功率也很高。如果你确实嫌麻烦,还可以使用社区里开发者整理的rosdepc工具,它把rosdep的默认源直接指向了国内镜像。

2.5 配置环境变量

ROS的环境变量靠shell的setup.bash脚本注入。在.bashrc里添加一行,让每次打开终端自动加载ROS环境,不然每次都要手敲source,非常容易忘。

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

.bashrc是bash终端的启动配置文件,写在里面的命令每次新开终端都会自动执行。这里有一个常见的坑:如果你同时装了ROS和Anaconda,Anaconda的base环境也可能往.bashrc里写初始化脚本,两者叠加时很容易出现ROS命令找不到。遇到这种情况,不要慌,先检查.bashrc里的行顺序,确保ROS的source在conda初始化之前。

2.6 安装rosinstall等常用构建工具

构建ROS工作空间还需要几个辅助工具,顺手一起装上:

sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential -y

这些工具分别是干什么的呢?rosinstall和rosinstall-generator用于根据.rosinstall文件批量下载和更新源码,wstool管理多仓库工作区,build-essential是编译C++代码必备的gcc、g++、make工具链。虽然初次安装用不到全部,但后面编译ORB-SLAM3或Ar3机械臂项目时都会用到,现在装好省得以后再折腾。


3. 实操验证:确认环境真正跑通

3.1 启动roscore

安装完成后,最直接的验证方法就是启动ROS核心服务roscore。单独开一个终端,执行:

roscore

正常启动后,终端会输出一段类似“started core service [/rosout]”的日志,并且会一直在前台运行。这条命令其实启动了ROS的master节点和rosout日志节点,整个ROS通信网络都依赖这个核心服务。如果这个起不来,后面所有rosrun、roslaunch都会报[rosmaster] Exception之类的不靠谱错误。

如果你的终端提示roscore: command not found,几乎可以肯定是环境变量没有正确source。重新执行一下source /opt/ros/noetic/setup.bash,再确认.bashrc那行写对没有。

3.2 小乌龟验证核心通信

核心服务跑起来之后,再开两个新终端,分别执行:

rosrun turtlesim turtlesim_node

以及:

rosrun turtlesim turtle_teleop_key

第一条命令会弹出一个蓝色背景的小乌龟窗口,第二条命令让你用方向键控制乌龟移动。按几次方向键,如果小乌龟真的动了,说明节点启动、话题通信、消息传递全部正常。我个人把这当作“ROS安装成功的体检报告”,因为turtlesim是官方自带的示例,不涉及任何第三方依赖,如果这里的通信链路坏了,那就是系统环境的问题;如果这里正常,你的ROS Noetic基本算是装好了。

3.3 创建工作空间,为项目开发做好准备

验证完小乌龟,我建议顺手把catkin工作空间建好,因为几乎所有ROS1项目都会在这个结构里编译运行。先创建目录结构:

mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make

catkin_make执行完会生成devel和build两个目录。build是编译过程的中间产物,devel里存放编译出的可执行文件和setup脚本。然后source开发空间的环境:

source devel/setup.bash

这里有个细节:如果后面你在src里放了新功能包,重新编译之后一定要再次source devel/setup.bash,否则新包可能找不到。更省心的做法是把source命令也写进.bashrc,不过要注意先source ROS系统环境再source自己的工作空间:

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc

可以验证一下当前环境变量:

echo $ROS_PACKAGE_PATH

输出里应该包含/opt/ros/noetic/share和/home/你的用户名/catkin_ws/src。如果只看到系统的ROS路径,说明工作空间没有正确source。

3.4 快速查看版本信息

最后加一个确认版本的小技巧:

rosversion -d

终端会输出noetic。这表示当前ROS_DISTRO环境变量生效,系统确实运行在Noetic环境下。如果你安装了多个ROS版本,这个方法可以快速告诉你“当前终端正在使用哪一个ROS”。


4. 安装中的常见报错与排查记录

4.1 报错速查表

我把自己和帮朋友排查过程中遇到的典型报错整理成了一张表,按“报错现象 → 原因 → 解决办法”的顺序排列,方便你对应着查:

报错现象根本原因解决办法
E: 无法定位软件包 ros-noetic-desktop-fullROS软件源没有正确添加,或apt索引未更新检查/etc/apt/sources.list.d/ros-latest.list是否存在,执行sudo apt update;确认Ubuntu版本是20.04
W: GPG error: ... The following signatures couldn't be verifiedROS密钥未导入或过期重新执行apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo rosdep init一直卡住或提示网络错误GitHub访问受限多试几次,或用rosdepc替代,或修改rosdep源指向国内镜像
rosdep update报unable to process source或超时依赖索引更新失败检查DNS,确保raw.githubusercontent.com可以解析;或换源/重试
新开终端找不到roscore环境变量未写入.bashrc检查~/.bashrc中是否有source /opt/ros/noetic/setup.bash,执行source ~/.bashrc
ROS_MASTER_URI为空或一直报无法连接master多个版本ROS环境冲突、端口被占用确认roscore在后台运行;检查8090端口和ROS_MASTER_URI=http://localhost:11311
编译工作空间时catkin_make报找不到Python系统默认python被修改或Anaconda干扰确认python3 --version是3.8;暂时注释掉.bashrc里conda初始化后再source

这张表覆盖了安装过程中80%以上的问题。剩下的20%大多与个人系统环境特殊配置有关,比如防火墙、代理、自编译内核等,处理思路仍然遵循“看日志、定位步骤、针对性修复”的方法,不要一上来就重装系统。

4.2 Python版本和Anaconda冲突

ROS Noetic要求Python 3,如果你的机器上还装了Anaconda,很容易发生一系列的“灵异事件”。我在一台配置了Anaconda的机器上安装时,遇到catkin_make出现ModuleNotFoundError: No module named 'catkin_pkg',排查后发现是因为终端默认进入了conda的base环境,Python解释器路径变成了Anaconda目录下的python3,它根本找不到系统级的catkin_pkg。

这个问题的解决思路比较直接:写一个专门的ROS环境脚本,或者创建conda虚拟环境时带上--clone base的方式隔离,再或者就是在编译工作空间之前先执行conda deactivate。我个人比较建议在安装和学习ROS的阶段,把.bashrc里的conda自动激活关掉,避免每次开终端都默认进入base,需要的时候再手动conda activate。

4.3 双系统和虚拟机环境的注意事项

在双系统环境下,有一个容易忽略的问题:不少双系统用户把系统装完之后会手动改主板的启动项或者修改/etc/default/grub,如果grub配置出现问题,开机可能进不了系统,这在安装ROS之前就应该处理好。另外,如果你使用虚拟机(VMware或VirtualBox)安装Ubuntu 20.04,建议给虚拟机分配至少4GB内存和20GB磁盘,否则编译大一点的功能包时内存和磁盘同时飙升,系统会直接卡死。我在虚拟机里安装时还遇到过一条额外的坑:默认的虚拟显卡驱动在运行rviz时画面闪烁,后面装了open-vm-tools和桌面环境增强组件才稳定下来。

如果你后续要用Gazebo做机器人仿真,显卡驱动很重要。比如热词里有人提过apt install nvidia-driver-535给Ubuntu 20.04装NVIDIA驱动,如果确认要在本机跑Gazebo或rviz这类图形密集型应用,建议先装好显卡驱动再装ROS,否则仿真渲染会比较吃力。

4.4 卸载重装时如何清理干净

如果安装过程中途失败,或者你改了太多源配置想重来,建议先把ROS卸载干净再重新安装,避免残留文件造成新老冲突。

sudo apt remove ros-noetic-* -y sudo apt autoremove -y sudo rm -rf /etc/ros sudo rm -f /etc/apt/sources.list.d/ros-latest.list

如果你之前创建过~/catkin_ws,建议一并备份或删除,因为工作空间里的build和devel缓存可能会把旧的编译配置保留下来。


5. 装完之后,我还推荐你顺手做这几件事

5.1 安装常用辅助包:rviz、gazebo、tf、navigation

desktop-full虽然已经打包了常用的核心工具,但实际做项目还要装一些常用的功能包。下面这几个是我在机器人项目里经常用的,现在装好,后面省事:

sudo apt install ros-noetic-rviz ros-noetic-gazebo-ros ros-noetic-tf2 ros-noetic-tf2-ros ros-noetic-navigation -y

rviz是ROS的可视化工具,用来显示点云、地图、机器人模型;gazebo-ros是Gazebo与ROS通信的桥梁,做仿真避不开;tf2负责坐标变换管理,做SLAM、导航时特别重要;navigation是移动机器人的导航栈,包含gmapping、amcl、move_base等核心节点。这些包装好之后,你就能直接启动一个仿真小车的完整SLAM和导航流程了。

5.2 让turtlesim显示中文或无画面时的处理

偶尔有新手告诉我“小乌龟画面出来了但是是黑屏”或者“窗口没弹出来”,这大概率是图形环境问题。你可以试试:

export LIBGL_ALWAYS_SOFTWARE=1 rosrun turtlesim turtlesim_node

LIBGL_ALWAYS_SOFTWARE=1强制使用软件渲染,在虚拟机或者没有显卡驱动的机器上,这个参数可以救急。如果你在远程SSH环境(没有桌面)里跑turtlesim,默认是不会弹窗的,需要加-p参数或者使用xvfb虚拟显示。不过在本地桌面系统上,直接跑就行。

5.3 写给初学者:从turtlesim接着往哪走

很多初学者装完Noetic后很开心,然后就没有然后了,不知道下一步该学什么。我的建议是:装好小乌龟之后,跟着官方教程走一遍ROS核心概念的入门。比如rosnode list、rostopic list、rostopic echo /turtle1/cmd_vel,亲手看一下小乌龟移动时,话题数据是怎么流动的。这比直接背命令有用得多,它会帮你建立“节点-话题-消息”这个ROS基本模型。等这个模型建立起来了,再碰rviz、tf、URDF、Gazebo就会顺畅很多。


最后说一点个人体会。我在折腾ROS Noicet的过程中最深的感受是:大部分安装失败的案例,其实不是步骤本身多难,而是环境不干净、源不通、版本信息不匹配导致的连锁反应。所以不管你是第一次装还是第N次装,先花五分钟把系统版本、网络状况、Python版本这三件事确认清楚,成功率就上去了一半。装完之后也不要急着跑复杂项目,先用小乌龟把通信链路验证好,再逐步扩展工具链。希望这篇文章能帮你顺利进入ROS的世界。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 5:19:00

Jenkins安装指南:JDK版本对齐与war包、容器化部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 5:18:51

Laya快速决策模型部署与微调实战:LLaMA Factory完整指南

Laya这个项目我盯了有一阵了,GitHub上17K Star的成绩在这个赛道里确实不常见。这两周我抽空把它的安装、部署、推理、微调从头到尾跑了一遍,结论是:单论System 1快速决策这类场景,Laya的表现确实可以用"爆打Jev"来形容。…

作者头像 李华
网站建设 2026/9/30 5:18:16

无蜂窝大规模MIMO与无人机辅助通信:基于DQN的调度策略实战

简介:这份资源是一篇面向通信工程、无线网络与人工智能交叉方向研究者的技术文档,聚焦无蜂窝大规模MIMO场景下无人机辅助通信与资源调度难题,适合具备一定强化学习与通信理论基础的研究生、科研人员及工程技术人员参考。压缩包内仅含1个docx文…

作者头像 李华
网站建设 2026/9/30 5:17:50

Windows整盘换Ubuntu 20.04单系统:分区引导与驱动实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 5:17:43

基于TensorFlow的LSTM短期电力负荷预测:从论文复现到工程避坑

简介:这份PDF面向电力系统从业者、深度学习入门者与时间序列预测研究者,聚焦短期电力负荷预测这一典型场景,讲解如何借助TensorFlow搭建LSTM循环神经网络完成高精度预测。资源为单文件PDF,约2.27MB,内容源自正式期刊论…

作者头像 李华