☰
ROS Melodic安装教程:从系统准备到小乌龟测试全流程
2026/9/30 1:03:11 网站建设 项目流程

做机器人相关开发,绕不开ROS。而ROS Melodic作为Ubuntu 18.04上的经典版本,至今仍是很多教材、开源项目和老牌设备驱动默认依赖的环境。我见过太多人卡在安装这一步,要么是apt源没配好导致依赖装不上,要么是rosdep初始化和更新怎么都过不去,最后折腾一晚上连roscore都没拉起来。这篇文章把我这些年反复装Melodic踩过的坑、验证过的流程全部整理出来,从系统准备到环境变量配置,每一步都写清楚为什么要这么做,照着走基本能一次过。

1. 安装前必须做好的系统准备

1.1 确认你的Ubuntu版本,别装错发行版

ROS Melodic官方只支持Ubuntu 18.04 Bionic Beaver,这是最容易翻车的一个点。很多人拿着Ubuntu 20.04甚至22.04的机器去装Melodic,然后用各种奇奇怪怪的第三方源硬装,最后依赖关系乱成一锅粥。

先执行这个命令确认系统版本:

lsb_release -a

如果输出里能看到Codename: bionic,那没问题,放心往下走。如果是focal(20.04)、jammy(22.04)甚至更新的版本,我建议你直接装对应版本的ROS发行版(Noetic对应20.04,Humble对应22.04),或者装个Ubuntu 18.04的虚拟机来用Melodic。别跟系统版本较劲,ROS和Ubuntu版本是严格绑定的,强行跨版本安装后续会不断出现依赖地狱。

另外,如果你是在VMware或VirtualBox里装Ubuntu 18.04,记得装好VMware Tools或增强功能,否则窗口分辨率调不了,复制粘贴也不方便,后面复制命令会很难受。

1.2 换软件源,apt这一步顺不顺全看它

这一步决定了你后面apt update和apt install的速度与稳定性。默认的Ubuntu官方源在国内访问很慢,而Melodic的安装包本身也在Ubuntu源里,源慢了整个安装过程会被无限拉长。

把/etc/apt/sources.list换成国内镜像源,我比较推荐清华源或中科大源。操作方式很简单,先备份原文件:

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

然后用编辑器打开,把内容替换成对应的镜像源。以清华源为例,Ubuntu 18.04的源配置是这样的:

sudo vim /etc/apt/sources.list

写入以下内容:

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

这里有个细节要注意:bionic-security不要漏掉。有些精简教程会把-security那行省略,结果装某些依赖时就会报404或者找不到包,因为安全更新源是独立走的。

改完之后执行:

sudo apt update sudo apt upgrade -y

apt upgrade是为了把系统自带的基础包更新到最新,避免后续依赖版本过旧。执行完后建议顺手装几个基础工具,后面都会用到:

sudo apt install -y curl wget vim git

2. ROS Melodic核心安装流程拆解

2.1 添加ROS软件源和密钥

这一步两个关键操作:添加ROS官方源的镜像地址、添加密钥。很多教程只给了官方源,国内网络下apt update经常卡住或者超时,所以这里直接用中科大或者清华的ROS镜像源。

顺序很重要,先添加源地址:

sudo sh -c 'echo "deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu bionic main" > /etc/apt/sources.list.d/ros-latest.list'

注意这里用的是>而不是>>,意思是覆盖写入。如果之前残留过其他ROS源配置,先用这个命令清掉再写新的:

sudo rm -f /etc/apt/sources.list.d/ros-latest.list

然后添加密钥。ROS官方给的密钥服务器地址在某些网络环境下经常连不上,所以我习惯直接从镜像站下载密钥文件:

curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | sudo apt-key add -

如果这一步提示curl: (7) Failed to connect,说明GitHub的raw域名在你的网络下访问不了,别慌,换成下面的方式,直接从清华镜像站拉密钥:

wget https://mirrors.tuna.tsinghua.edu.cn/ros/ros.key -O - | sudo apt-key add -

然后再执行:

sudo apt update

这时能看到apt源里出现了ROS相关的包信息。执行apt policy ros-melodic-desktop-full可以提前确认包是否存在以及版本号,如果输出里有Candidate: 1.4.1-0*,说明源已经生效了。

提示:如果apt update时提示NO_PUBKEY,说明密钥没加成功。重新执行一次密钥添加命令,然后再update。

2.2 选择安装版本:desktop-full还是desktop

ROS Melodic的安装包分好几个版本,最常用的是这两个:

  • ros-melodic-desktop-full:完整版,包含ROS、rqt、rviz、机器人通用仿真库Gazebo、导航包、SLAM功能包等,体积大,但装完基本什么都能干。
  • ros-melodic-desktop:精简版,只有ROS核心、rqt、rviz,不含Gazebo和导航相关功能包。

我个人的建议是:如果你的硬盘空间充足(至少需要10GB以上),直接装desktop-full。原因很现实,后面做机器人仿真、跑SLAM算法、加载地图都用得上这些功能包,分开装的话依赖关系非常复杂,不如一步到位。

安装命令很简单:

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

这一步会下载大量软件包,耗时取决于你的网络状况,通常在10到30分钟之间。下载过程中会出现一堆Get:xx的进度提示,那是正常的,别中途Ctrl+C中断。

如果安装过程中报依赖错误,比如The following packages have unmet dependencies,一般是因为某些依赖包的版本不对。优先尝试修复:

sudo apt --fix-broken install

然后再重新安装。

2.3 安装完成后立刻做:rosdep init和update

rosdep是ROS的依赖管理工具,后续编译工作空间、安装功能包依赖时都会用到。每次新环境都要先初始化再更新。

很多人在这里卡到怀疑人生,因为rosdep update要访问GitHub的ros/rosdistro仓库,网络环境不好的时候基本必失败。先按标准流程走一遍,看看你的网络情况:

sudo rosdep init rosdep update

sudo rosdep init的作用是下载rosdep的源列表文件到/etc/ros/rosdep/目录。如果提示ROS distro was already initialized,说明之前初始化过,直接跳过。

如果rosdep update卡住或报错,报错信息里通常有unable to access RAW_GITHUBusercontent.com或者Failed to download target platform data for osx这种字样,说明是网络问题。解决思路有两个:

第一个方案:手动修改rosdep的源列表地址,把GitHub链接替换成国内的镜像地址。

编辑这个文件:

sudo vim /etc/ros/rosdep/sources.list.d/20-default.list

里面的内容原本是这样的:

# os-specific entries first yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx # generic yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml gbpdistro https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml # newer distributions (Groovy, Hydro, Oneiric) ... yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.yaml

把其中所有https://raw.githubusercontent.com/ros/rosdistro/master/替换成https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/,或者直接用Aalborg大学、Tokyo大学的镜像。

第二个方案:如果你不想折腾这些,直接用国内社区维护的rosdepc工具,这个在机器人开发圈子里用得很多,用法和rosdep完全一致:

sudo pip3 install rosdepc sudo rosdepc init rosdepc update

注意:如果系统里还没装pip3,先执行:

sudo apt install -y python3-pip

我实测下来,rosdepc的更新速度和稳定性都很好,基本不会出现超时的问题。这个工具不是我凭空推荐的,它是开源社区维护的一个rosdep替代工具,国内不少机器人实验室都在用。

2.4 环境变量配置,让ROS命令全局可用

安装完成后ROS的可执行文件在/opt/ros/melodic/bin目录下,环境变量默认没有加载,所以你要手动配置。

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

这一步执行完后,新打开的终端就能直接使用roscore、rosrun这些命令了。验证一下:

which roscore

如果输出/opt/ros/melodic/bin/roscore,说明环境变量配置成功。

这里有个细节:每次修改~/.bashrc后,要么重新打开终端,要么执行source ~/.bashrc,否则当前的终端会话不会加载新的环境变量。

3. 工作空间初始化与核心组件校验

3.1 创建catkin工作空间

ROS的代码组织方式是以catkin工作空间为单位的。所谓工作空间就是存放功能包的目录结构,标准格式必须有src子目录。

创建一个自己的工作空间:

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

然后回到工作空间根目录,执行首次构建:

cd ~/catkin_ws catkin_make

这一步会在~/catkin_ws下生成build和devel两个目录。devel目录里面有setup.bash,这是你后面每次写代码编译后都要用的环境文件。

把工作空间的环境变量也加载进去:

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

顺序不能反:必须先source /opt/ros/melodic/setup.bash再source ~/catkin_ws/devel/setup.bash。因为工作空间的setup.bash是基于ROS主目录的,如果只加载工作空间的,会出现ROS_ROOT、ROS_PACKAGE_PATH这些变量没定义的情况。

3.2 验证安装:运行小乌龟测试

装完Ros之后最直观的验证方法就是跑一次小乌龟节点,这也是我每次给新环境做体检的标准动作。

新开三个终端(终端快捷键Ctrl+Alt+T):

第一个终端启动ROS主节点:

roscore

看到started core service [/rosout]这段话后,主节点已经跑起来了。这里要提醒一下:roscore运行时会占住当前终端,不要关掉它。

另一个终端启动小乌龟模拟器:

rosrun turtlesim turtlesim_node

这时应该会弹出一个蓝色背景的窗口,中间有一只小乌龟。如果窗口没弹出来,检查一下DISPLAY环境变量,特别是虚拟机用户,可能是图形界面转发没配好。

再开一个终端,启动键盘控制节点:

rosrun turtlesim turtle_teleop_key

然后在这个终端里按方向键,小乌龟就会跟着动。能控制乌龟移动,说明ROS核心通信机制、节点间通信、话题收发都是正常的。

我们还可以顺便看一眼ROS的通信机制,用命令查看当前运行的节点和话题:

rosnode list rostopic list

如果能看到/turtle1/cmd_vel这个话题,那说明整个系统链路是完全通的。

3.3 检查Python环境与版本兼容性

ROS Melodic默认使用Python 2.7,很多教程在讲Melodic时都会强调这一点。Ubuntu 18.04系统自带的Python版本有2.7和3.6,两个版本共存。ROS Melodic的核心组件大部分基于Python 2,但一些工具(比如catkin_make)也能在Python 3下运行。

实际操作中容易出现的问题是:如果你之前装过Anaconda或Miniconda,并且把conda的Python环境路径写进了~/.bashrc,那么新终端里默认的python很可能指向conda而不是系统自带Python。这样就会导致rosdep、catkin_make这些依赖Python的工具报各种莫名其妙的错误。

一个很典型的报错是:

ModuleNotFoundError: No module named 'rospkg'

原因就是当前终端用的Python环境里没有装rospkg这个包。解决办法也很简单,把conda的自动激活关掉,在~/.bashrc里注释掉conda初始化相关的那几行,然后重新开终端。如果你一定要用conda环境,那就进入conda环境后手动安装依赖:

pip install rospkg

但我个人建议:做ROS开发时尽量用系统Python,不要混用conda环境,因为conda里的很多包版本和ROS的依赖有冲突,查找问题会非常痛苦。

4. 安装过程中最常见的坑与排查方法

4.1 密钥无效:NO_PUBKEY错误

执行sudo apt update时如果看到类似这样的输出:

W: GPG error: https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu bionic InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F42ED6FBAB17C654

这是ROS源的GPG密钥没有正确导入。直接复制报错里的KEY编号,执行:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654

然后再sudo apt update,一般就能解决。如果keyserver.ubuntu.com连不上,换成hkp://pgp.mit.edu:80再试一次。

4.2 rosdep update失败的完整解决方案

rosdep update失败是最常见的安装杀手,报错形式也多种多样。常见的几种:

  • ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml]: Failed to download target platform data for osx
  • ERROR: error loading sources list: The read operation timed out
  • rosdep update: the first time this command is run, it needs to initialize itself

这几个错误背后其实都是一个问题:rosdep需要从GitHub拉取描述文件,但你的网络访问不了GitHub或者访问极其缓慢。

第一种解决方式:修改/etc/hosts文件,给GitHub的域名做IP映射。先查一下raw.githubusercontent.com的IP,可以用这个命令:

ping raw.githubusercontent.com

如果ping不通,就去网上找一个可用的IP,然后写入/etc/hosts:

sudo vim /etc/hosts

加入类似这样的内容:

185.199.108.133 raw.githubusercontent.com

但这种方法的问题是GitHub的CDN节点会变,IP可能失效,治标不治本。

第二种解决方式:换用前面提到的rosdepc工具。这个工具的详细介绍我就不重复了,用法和rosdep一字不差,但内部访问的是国内源。实测下来,整个rosdepc update过程稳定且快速。

第三种解决方式:手动准备缓存文件,然后把rosdep指向本地目录。这个方法的操作步骤复杂,适合离线安装场景,日常使用没必要。

注意:不管用哪种方式,rosdep、rosdepc这些工具本质都是帮你自动分析和安装功能包的依赖关系,千万别因为更新失败就跳过这步。后面编译别人的功能包时,缺依赖的情况会非常普遍,有个能用的依赖管理工具能省很多事。

4.3 虚拟机环境下的显示问题

如果你是在VMware里装Ubuntu 18.04跑ROS,启动rviz或Gazebo时偶尔会遇到黑屏或者无响应的情况。这通常不是ROS的问题,而是虚拟机3D加速没开。

解决办法:

VMware菜单里选择"虚拟机" -> "设置" -> "显示器",勾选"加速3D图形"。如果是VirtualBox,需要安装增强功能(Guest Additions),然后在设置里把显卡控制器改为"VBoxSVGA"并开启3D加速。

另外,虚拟机内存建议分配4GB以上,因为Gazebo和rviz都是内存大户,内存不足时启动速度会慢到让你以为卡死了。

4.4 磁盘空间不足导致安装中断

ros-melodic-desktop-full装完大概占用6到8GB,加上系统本身5GB左右,你的根分区至少要有20GB剩余空间。如果安装时提示No space left on device,清理一下apt缓存:

sudo apt clean sudo apt autoremove

再查看磁盘空间:

df -h

如果根分区确实太小,最省事的方法是扩虚拟机的磁盘容量,或者重新创建虚拟机时就把磁盘设大点。我见过有人在40GB磁盘的虚拟机上装Melodic,装完Gazebo再启动直接就爆盘了,后面跑仿真各种异常。

5. 补充技巧:如何避免重装时重复踩坑

5.1 一键安装脚本是否靠谱

最近网上很流行那种"鱼香ROS一键安装"脚本,包括对应的一键安装命令,很多入门者看到了就直接用。我的态度是:这个工具本身做得非常用心,对国内用户确实能一键装好ROS,省掉了换源、加Key、处理rosdep这一大堆麻烦。

但它有两个需要注意的地方:

一是它会自动修改你的软件源和环境配置,如果你是一个喜欢自己掌控一切细节的人,可能会觉得不够透明。二是这个工具支持的发行版和ROS版本经常更新,使用前最好去它的文档确认一下参数含义,别拿着老旧命令就去跑。

如果你能理解它每一步在做什么,那用它来提速没问题。如果你完全不了解换源、加Key这些流程,我建议还是先手动走一遍安装流程,出了问题你至少知道去哪个环节找。装了ROS你后面要天天跟它打交道,环境是怎么来的都不清楚,排错会很痛苦。

5.2 保存一份可复用的环境快照

如果你用虚拟机装ROS,我强烈建议在安装完成、跑通小乌龟测试之后,关闭虚拟机,然后给虚拟机做一个快照(VMware的"快照"功能或VirtualBox的快照)。这样后面就算把ROS环境搞坏了,比如装包时把系统依赖搞崩了、误删了某个配置,一键就能恢复到一个干净可用的状态。这个习惯我保持了好几年,省了不知道多少重装系统的时间。

如果是物理机上装的Ubuntu,可以用timeshift或systemback做系统备份,效果类似。ROS开发中改环境是家常便饭,一个可回滚的备份就是后悔药。

5.3 装完Melodic后建议立刻做的配置

装完ROS之后,有几件事最好一次性配置好,不然用的时候总是临时抱佛脚:

安装常用开发工具:

sudo apt install -y python-catkin-tools python3-catkin-tools python3-osrf-pycommon sudo apt install -y net-tools htop terminator

terminator是个非常好用的终端工具,可以分屏,ROS开发时经常要同时开三四个终端,分屏终端能大幅提升效率。

设置别名,把常用命令简化。在~/.bashrc末尾加上:

alias cm='cd ~/catkin_ws && catkin_make' alias cs='cd ~/catkin_ws/src' alias rosc='roscore'

保存后执行source ~/.bashrc生效。这些小技巧用久了就会觉得真香。

6. 常见问题速查表

为了方便排查,我把安装过程中最常见的问题和解决办法汇总成了一张表,建议收藏备用。

问题现象可能原因解决办法
apt update提示NO_PUBKEY密钥未导入用apt-key adv导入报错中提示的KEY
apt install时报unmet dependencies依赖包版本冲突执行sudo apt --fix-broken install后再装
roscore提示command not found环境变量没有配置执行source /opt/ros/melodic/setup.bash
rosdep update一直超时无法访问GitHub使用rosdepc替代,或修改源地址为国内镜像
启动rviz窗口闪退虚拟机3D加速未开启或显卡驱动问题开启虚拟机3D加速,或更新GPU驱动
编译功能包时找不到ros/ros.hROS环境未加载确认~/.bashrc里有source /opt/ros/melodic/setup.bash
catkin_make报Python3和Python2冲突conda环境或python指向错误关掉conda,使用系统默认Python
小乌龟窗口不显示DISPLAY环境变量异常检查图形界面配置,虚拟机开启3D加速

7. 写在最后的个人体验

ROS Melodic从2018年发布到现在已经有年头了,但它的稳定性和庞大的生态依然是很多老项目的首选。装好一个干净的Melodic环境只是万里长征第一步——后面编译功能包、调试话题、跑仿真,每一步都会遇到新的问题。

我自己的习惯是:每次新装完环境,先跑一遍小乌龟测试确认通信正常,再把roscore、rosrun、rostopic这几个最基础命令用熟,最后才往工作空间里放自己的代码。基础打牢了,后面的学习和开发才会顺。

如果你在安装过程中遇到这篇文章里没提到的问题,别急着重装系统,先去翻ROS官方wiki的Troubleshooting页面,再查一下终端里完整的报错信息,绝大多数问题都能在社区里找到答案。装ROS这件事,耐心比技术更重要。

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

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

立即咨询