Ubuntu 16.04 从零安装 ROS Kinetic 完整指南与避坑实践
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.04Xenial。你拿 18.04 去装 Kineticapt 源里根本找不到对应的包反过来拿 16.04 去装 Melodic 也一样不行。这不是配置问题是官方仓库压根没为错配的组合提供二进制包。所以第一步永远是确认系统版本终端里敲lsb_release -a输出里Release那一行必须是16.04。如果是 16.04.x 的小版本号比如 16.04.7没关系小版本不影响。架构方面Kinetic 支持 amd64、armhf、arm64 等普通 x86 电脑就是 amd64树莓派之类的 ARM 板子要选对应架构。用下面这条确认uname -mx86_64对应 amd64armv7l对应 armhfaarch64对应 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 updateROS 的源需要单独添加。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 还是 baseROS 安装包分好几个粒度常见的有ros-kinetic-desktop-full、ros-kinetic-desktop、ros-kinetic-ros-base。它们的区别直接决定你后面能少装多少东西选错了要么功能不全要么白占几个 G 的磁盘。安装包包含内容适用场景体积参考ros-kinetic-desktop-full桌面环境 仿真 感知 导航等全套学习、仿真、完整项目开发约 2GBros-kinetic-desktop桌面环境 基础工具无仿真导航只做基础开发不需要 Gazebo约 1GBros-kinetic-ros-base仅核心通信库和基础工具嵌入式、资源受限设备几百 MB我的建议很直接只要磁盘不是特别紧张一律上desktop-full。原因在于 ROS 的很多教程和示例默认假设你装了完整版比如跑个 Gazebo 仿真、用 rviz 看个点云base 版里都没有到时候还得一个个补装反而更麻烦。磁盘占用多出来的那点空间跟反复补依赖浪费的时间比完全不值一提。3. 完整安装流程一步步走3.1 更新系统并安装基础依赖源配好之后先做一次全面更新把系统里已有的包升到最新避免新旧包混装出问题sudo apt update sudo apt upgradeupgrade这一步在旧机器上可能耗时较长耐心等它跑完。接着安装 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 初始化 rosdeprosdep是 ROS 用来管理系统依赖的工具很多功能包在编译或运行前需要它来安装系统级的依赖库。装完 ROS 后必须初始化它否则后面编译工作空间时会各种报错。sudo rosdep init rosdep updaterosdep 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 的启动文件。如果你用的是 bashecho source /opt/ros/kinetic/setup.bash ~/.bashrc source ~/.bashrc如果你用的是 zsh就写进~/.zshrc。这一步做完新开的终端里就能直接用 ROS 命令了。验证一下printenv | grep ROS能看到ROS_DISTROkinetic、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 listrosnode 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 updateNO_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 的场景直接恢复镜像几分钟就能得到一个可用环境比从头装一遍省事太多。这个做法我在需要反复测试不同配置的时候用得最多实测下来非常省心。