☰
Ubuntu 16.04 从零安装 ROS Kinetic 完整指南与避坑实践
2026/10/17 4:02:02 网站建设 项目流程

1. 为什么还要折腾 Ubuntu 16.04 加 ROS Kinetic

先把结论摆在前面:这套组合放到今天来看确实不算新,Ubuntu 16.04 的官方支持周期早就结束了,ROS Kinetic 也已经是过去式的长期支持版本。但如果你手头有一块老工控机、一台只跑得动旧内核的笔记本,或者你接手了一个前人留下的机器人项目,里面全是kinetic时代的包和依赖,那你大概率绕不开它。我自己就遇到过好几次这种情况,实验室角落里那台装了激光雷达的老机器,系统盘里躺着的就是 16.04,重装新系统反而要重新适配一堆驱动,算下来还不如把 Kinetic 环境重新搭一遍来得省事。

这篇内容就是把我反复装这套环境的流程完整记录下来。它解决的核心问题很具体:在一台干净的 Ubuntu 16.04 上,从零把 ROS Kinetic 装好,并且能跑通最基本的节点通信验证。适合谁看?一是刚接触 ROS、手里恰好有旧系统环境的新手,二是需要复现旧项目、被依赖版本卡住的老手。我不打算讲太多 ROS 的理论,重点放在“怎么装、为什么这么装、装完怎么确认没装坏”这三件事上。整个过程我前后装过不下十次,踩过的坑基本都在这了,你照着走能省掉大量查资料的时间。

需要提前说明的是,ROS 的安装方式有好几种,源码编译、二进制包安装、容器化部署都行。对于 Kinetic 这个版本,最稳、最省心的还是走 apt 二进制安装,因为官方当年为 16.04 提供了完整的 deb 包仓库。源码编译适合需要改核心代码的场景,普通学习和项目复现完全没必要,编译一次动辄几个小时,还容易因为依赖版本对不上直接失败。所以下面的方案默认走 apt 路线,这也是绝大多数教程和实际项目采用的方式。

2. 装之前必须搞清楚的几件事

2.1 系统版本和架构的硬性匹配

ROS Kinetic 对系统版本卡得非常死,它只官方支持 Ubuntu 16.04(Xenial)。你拿 18.04 去装 Kinetic,apt 源里根本找不到对应的包;反过来拿 16.04 去装 Melodic 也一样不行。这不是配置问题,是官方仓库压根没为错配的组合提供二进制包。所以第一步永远是确认系统版本,终端里敲:

lsb_release -a

输出里Release那一行必须是16.04。如果是 16.04.x 的小版本号,比如 16.04.7,没关系,小版本不影响。架构方面,Kinetic 支持 amd64、armhf、arm64 等,普通 x86 电脑就是 amd64,树莓派之类的 ARM 板子要选对应架构。用下面这条确认:

uname -m

x86_64对应 amd64,armv7l对应 armhf,aarch64对应 arm64。这一步看着简单,但我见过太多人上来就复制粘贴安装命令,结果卡在Unable to locate package上折腾半天,回头一看系统是 18.04。先花十秒确认,能省半小时。

2.2 软件源配置:决定安装速度的关键

Ubuntu 默认的软件源在国内访问速度往往很慢,装 ROS 又要拉一大堆依赖包,源没配好,安装过程能拖到你怀疑人生。这里要做两件事:一是把 Ubuntu 系统源换成国内镜像,二是添加 ROS 自己的软件源。

系统源在“软件和更新”图形界面里改最直观,也可以直接编辑/etc/apt/sources.list。把里面的archive.ubuntu.com、security.ubuntu.com之类替换成国内镜像地址即可。改完记得执行:

sudo apt update

ROS 的源需要单独添加。Kinetic 对应的源地址格式是http://packages.ros.org/ros/ubuntu xenial main。添加命令:

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

这里$(lsb_release -sc)会自动取到xenial,比手写更不容易出错。加完源还要导入公钥,否则 apt 会因为签名验证失败拒绝安装:

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

注意:这个公钥服务器地址是当年官方给的,时间久了可能会连不上。如果这条命令超时或报错,可以换hkp://keyserver.ubuntu.com:80再试,公钥 ID 不变。

2.3 安装版本的选择:full 还是 base

ROS 安装包分好几个粒度,常见的有ros-kinetic-desktop-full、ros-kinetic-desktop、ros-kinetic-ros-base。它们的区别直接决定你后面能少装多少东西,选错了要么功能不全,要么白占几个 G 的磁盘。

安装包包含内容适用场景体积参考
ros-kinetic-desktop-full桌面环境 + 仿真 + 感知 + 导航等全套学习、仿真、完整项目开发约 2GB+
ros-kinetic-desktop桌面环境 + 基础工具,无仿真导航只做基础开发,不需要 Gazebo约 1GB
ros-kinetic-ros-base仅核心通信库和基础工具嵌入式、资源受限设备几百 MB

我的建议很直接:只要磁盘不是特别紧张,一律上desktop-full。原因在于 ROS 的很多教程和示例默认假设你装了完整版,比如跑个 Gazebo 仿真、用 rviz 看个点云,base 版里都没有,到时候还得一个个补装,反而更麻烦。磁盘占用多出来的那点空间,跟反复补依赖浪费的时间比,完全不值一提。

3. 完整安装流程一步步走

3.1 更新系统并安装基础依赖

源配好之后,先做一次全面更新,把系统里已有的包升到最新,避免新旧包混装出问题:

sudo apt update sudo apt upgrade

upgrade这一步在旧机器上可能耗时较长,耐心等它跑完。接着安装 ROS 安装过程中需要用到的基础工具,主要是dirmngr(管理密钥)和一些编译工具:

sudo apt install dirmngr gnupg2 lsb-release -y

这些包体积很小,但缺了它们后面导入密钥或解析版本号时会报错。装完再确认一次 ROS 源已经生效:

sudo apt update

如果输出里能看到packages.ros.org相关的行,说明源添加成功。这一步如果报NO_PUBKEY,说明公钥没导入成功,回到 2.2 节重新导入。

3.2 执行核心安装命令

确认源没问题后,正式安装:

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

这条命令会拉取几百个包,具体数量取决于你的系统已经装了多少依赖。网络正常的话,十几分钟到半小时不等。安装过程中如果弹出配置文件冲突的提示(比如某些系统配置文件被修改过),一般选择保留当前版本即可,ROS 的包很少会覆盖系统关键配置。

实操心得:安装过程中最怕的是网络中断。apt 支持断点续传,如果中途断了,重新执行同一条命令,它会接着下没下完的包,不用从头来。但如果报的是依赖冲突错误,那就得先解决冲突,硬装是装不上的。

安装完成后,可以用下面这条确认核心包是否到位:

apt list --installed | grep ros-kinetic

能看到一长串已安装的 ros-kinetic 开头的包,就说明主体装好了。

3.3 初始化 rosdep

rosdep是 ROS 用来管理系统依赖的工具,很多功能包在编译或运行前需要它来安装系统级的依赖库。装完 ROS 后必须初始化它,否则后面编译工作空间时会各种报错。

sudo rosdep init rosdep update

rosdep init会往/etc/ros/rosdep/下写初始配置文件,rosdep update则会从网络拉取依赖规则数据库。这两步在国内网络环境下经常出问题,rosdep update尤其容易超时。如果卡住,可以多试几次,或者挑网络空闲时段执行。

注意:rosdep init只能执行一次,重复执行会报“already exists”。如果你之前装过 ROS 残留了配置,想重新初始化,得先手动删掉/etc/ros/rosdep/sources.list.d/下的文件再执行。

3.4 配置环境变量

ROS 的命令行工具(如roscore、rosrun)不在系统默认路径里,需要把 ROS 的环境变量脚本 source 进来。临时生效的方式是每次开终端手动执行:

source /opt/ros/kinetic/setup.bash

但这样太麻烦,正确做法是写进 shell 的启动文件。如果你用的是 bash:

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

如果你用的是 zsh,就写进~/.zshrc。这一步做完,新开的终端里就能直接用 ROS 命令了。验证一下:

printenv | grep ROS

能看到ROS_DISTRO=kinetic、ROS_ROOT、ROS_PACKAGE_PATH等变量,说明环境配置成功。

3.5 安装构建工具和依赖

到这一步 ROS 核心已经能用了,但要自己写代码、编译功能包,还需要额外的构建工具:

sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential -y

这几个包的作用分别是:python-rosinstall和python-rosinstall-generator用于批量拉取和生成 ROS 包源码,python-wstool管理多仓库工作空间,build-essential提供 gcc、make 等编译工具链。少了build-essential,你后面catkin_make会直接失败。

4. 装完必须做的验证测试

4.1 启动 roscore 确认核心通信正常

装完不验证,等于没装。最基础的验证是启动 ROS 的核心节点管理器:

roscore

正常的话会输出类似这样的内容:

... logging to /home/xxx/.ros/log/... checking log directory for disk usage... started core service [/rosout]

看到started core service [/rosout]就说明核心起来了。这个终端不要关,另开一个新终端做后续测试。如果roscore报命令找不到,八成是环境变量没 source 成功,回去检查 3.4 节。

4.2 用 turtlesim 跑通第一个节点

turtlesim是 ROS 自带的经典入门示例,一个能画轨迹的小乌龟。它能同时验证节点启动、话题通信、图形界面三件事,非常适合做安装后的冒烟测试。

新终端里启动小乌龟节点:

rosrun turtlesim turtlesim_node

会弹出一个蓝色窗口,中间有只小乌龟。再开一个终端启动键盘控制节点:

rosrun turtlesim turtle_teleop_key

把鼠标焦点放在这个终端上,按方向键,小乌龟就会动。如果乌龟能动,说明你的 ROS 安装完全正常,节点间通信、话题发布订阅、图形渲染全部工作。

4.3 检查话题和节点列表

再补两个命令,确认 ROS 的 introspection 工具也正常:

rosnode list rostopic list

rosnode list应该能看到/rosout、/turtlesim、/teleop_turtle这几个节点。rostopic list能看到/turtle1/cmd_vel、/turtle1/pose等话题。这两个命令能正常输出,说明你的 ROS 环境是完整可用的,不是只装了个空壳。

5. 常见问题与排查速查

装这套环境,问题基本集中在几个固定位置。我把高频问题和对应解法整理成表,遇到报错先查这里,能解决八成情况。

报错现象可能原因解决思路
Unable to locate package ros-kinetic-desktop-fullROS 源没加成功或系统版本不对检查lsb_release -sc是否为 xenial,重新添加源并apt update
NO_PUBKEY / 签名验证失败公钥未导入或过期重新执行 apt-key 导入命令,换密钥服务器重试
rosdep update 超时网络访问规则数据库慢多试几次,或换网络环境,挑空闲时段执行
roscore 命令找不到环境变量没 source检查~/.bashrc是否写入 source 行,重开终端
catkin_make 报缺少编译器没装 build-essentialsudo apt install build-essential
安装中途依赖冲突系统里已有版本不兼容的包按 apt 提示卸载冲突包,或先apt --fix-broken install
图形界面程序无法显示缺少 X11 转发或显示环境确认在本地图形终端运行,或正确配置显示转发

除了表里这些,还有几个我踩过的坑值得单独说。一个是rosdep init报权限问题,本质是/etc/ros目录权限不对,用sudo执行基本能解决。另一个是装完之后roscore能起,但rosrun找不到包,这通常是ROS_PACKAGE_PATH没配好,检查环境变量里这个路径是否包含/opt/ros/kinetic/share。

独家避坑技巧:如果你在虚拟机里装这套环境,务必给虚拟机分配足够的内存,建议 4GB 以上。ROS 的图形工具加上 Gazebo 一起吃内存,2GB 的虚拟机跑起来会频繁卡死,让你误以为是安装出了问题,其实是资源不够。

6. 关于这套老环境的几句实在话

Kinetic 加 16.04 这套组合,本质上是一个“能用就别动”的方案。它的价值不在于先进,而在于稳定和兼容——大量早期机器人项目、教学代码、论文复现都建立在这个基础上。你把它装好,就等于拿到了一把打开这些旧资源的钥匙。

我个人在实际操作中的体会是,装这套环境最耗时间的从来不是安装命令本身,而是前面源配置和后面依赖排查。命令就那么几条,但源没配对、公钥没导好、rosdep 卡住,任何一个环节都能让你卡上大半天。所以我的习惯是,每装完一台机器,就把当时能用的源地址、公钥命令、rosdep 处理方式记在一个文本文件里,下次直接照着抄,比重新查资料快得多。

最后分享一个小技巧:如果你需要频繁重装这套环境,可以考虑在装好并验证通过之后,用虚拟机快照或者磁盘镜像的方式把整个系统备份下来。下次再遇到需要 Kinetic 的场景,直接恢复镜像,几分钟就能得到一个可用环境,比从头装一遍省事太多。这个做法我在需要反复测试不同配置的时候用得最多,实测下来非常省心。

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

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

立即咨询