资讯动态

Ubuntu 18.04安装ROS Melodic全流程:从零搭建机器人开发环境

发布时间:2026/10/16 14:46:41 来源:尧图企业网站定制
在折腾机器人开发的朋友应该都有同感ROS版本和系统版本的配对是第一个绕不过去的坎。ROS Melodic对应的是Ubuntu 18.04Bionic这也是很多老项目、工业设备、教学环境至今仍在使用这个组合的原因。虽然新版本ROS 2已经出来很久但大量算法包、驱动库和教材还是基于Melodic所以“Ubuntu 18.04完美安装ROS melodic”这件事看着简单里面的坑却不少。这篇内容我会完整走一遍从零开始安装ROS Melodic的流程把每一步的操作原因、易错点、排查手段都讲清楚争取你照着做能一次通过而不是装到一半卡在各种奇奇怪怪的报错里。1. 为什么还要选Ubuntu 18.04 ROS Melodic先说个现实问题现在新装系统很多人会直接上Ubuntu 20.04或者22.04ROS这边对应的是Noetic和Humble。但如果你的工作场景是以下之一那Melodic反而是更稳妥的选择用的是老版本传感器驱动或运动控制库官方只发布了Melodic版本跟随的教材、论文代码、开源项目仍以Melodic为默认环境实验室或公司的机器人整机出厂镜像就是18.04环境不能随便迁移需要跑一些对实时性要求不高的仿真和算法验证Melodic生态里现成工具最多。从实际维护角度看Ubuntu 18.04本身也进入维护周期的尾声但作为机器人开发环境它的稳定性已经被验证了很多年。对开发者来说与其追新不如用一套顺手且资料充足的环境这也是我这篇文章存在的核心价值把安装过程做成一份可以直接照着敲的清单。2. 安装前的系统准备与思路2.1 确认系统版本和干净环境开始之前先确认你的系统是Ubuntu 18.04 Desktop版64位。在终端里执行lsb_release -a如果输出里显示Release: 18.04、Codename: bionic那就没问题。如果你用的是18.04 Server版也能装只是后面的图形化工具如rviz、gazebo用起来会多一些依赖建议能用Desktop就用Desktop。另外如果你的系统里之前装过ROS的某个版本或者装过部分ROS依赖库建议先清理干净再开始否则混着多版本ROS源后面rosdep和catkin会出现连锁问题。我的处理方法很直接sudo apt autoremove --purge ros-*这条命令会卸载所有ROS相关包谨慎操作确保你不需要保留这些包。2.2 更新软件源在这类装机教程里系统源默认是官方源在国内网络环境下速度可能不理想。我一般把源换成国内镜像源。这里要提醒一句换源的时候不要只改/etc/apt/sources.list还要注意第三方源比如ROS源是否和系统源混在一起避免后续apt update时报错。具体替换方式是打开源列表文件sudo vim /etc/apt/sources.list把archive.ubuntu.com和security.ubuntu.com替换成你所在地区可用的镜像地址。这个动作不是必须的但能省下大量等待时间。源更新后顺手把基础软件升级到当前版本sudo apt update sudo apt upgrade升级这一步很多人会跳过但我的经验是系统内核和底层库的新版本有时能修复编译依赖的问题尤其在安装ROS时经常遇到lib相关的间接依赖冲突先升级等于提前排雷。3. ROS Melodic安装核心流程3.1 添加ROS软件源ROS的官方软件源在国外直接访问会比较慢也可能遇到连接失败。我这里用的是国内镜像源以清华源为例操作方式如下sudo sh -c echo deb https://mirrors.tuna.tsinghua.edu.cn/rosubuntu bionic main /etc/apt/sources.list.d/ros-latest.list这里必须说一句ROS软件源的地址后缀在镜像站上默认是ros/ubuntu如果你直接用官方文档里的deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu bionic main会导致路径拼不对识别不了包索引。后面我会再提一次这个坑。设置完源之后继续添加密钥。Melodic安装时密钥是必须的没有密钥apt会认为这个源不可信所有安装请求都会失败。sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31C6DC8EBB1B1B4F6E1A9D1B0E5E2F1C8A如果你看到输出里有gpg: keyserver receive failed多试几次或者换成其他keyserver比如hkp://pgp.mit.edu:80。这个问题通常不是网络不通而是访问keyserver的瞬时连接被重置稍后重试一般就好。3.2 更新索引并安装桌面完整版执行sudo apt update这时你可能会看到类似The repository ... does not have a Release file的提示多半就是镜像源的路径或者发行版代号写错了对照上一步的地址检查一遍。如果能正常读到包索引接下来就可以直接安装桌面完整版sudo apt install ros-melodic-desktop-fullDesktop-full版本包含了ROS、rviz、gazebo等常用仿真和可视化工具以及2D/3D感知相关的库。这个安装包体积比较大通常需要几分钟到十几分钟取决于网络速度。我的建议是首次安装直接上full版避免后面编译算法包时缺东缺西再一个个补。安装过程中系统会询问是否继续或是否占用磁盘空间过多按提示输入Y即可。apt自己会处理依赖链你尽量不要同时开其他终端执行apt命令避免锁冲突。3.3 初始化rosdeprosdep是ROS用来解决依赖的工具它的坑最多但又是绕不过去的环节。执行sudo rosdep init rosdep update很多人会卡在rosdep update上报错信息一般是ERROR: cannot download default sources list from https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list。这是因为raw.githubusercontent.com访问受限。解决办法是手动修改rosdep的下载地址。编辑文件sudo vim /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py或者如果你的环境用的是Python3版本路径找对应文件位置。把里面指向raw.githubusercontent.com的URL替换成可访问的镜像地址。比如用https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list之类的加速前缀。这里要提醒一下这种代理前缀时效性无法保证如果失效了就换一个镜像源。比较稳妥的方式是直接把rosdistro的整个仓库下载到本地然后修改rosdep配置指向本地文件。但操作起来稍繁琐不是所有人都愿意折腾。我的建议是先用代理前缀方式不行再本地化。rosdep init成功后sudo rosdep update还需要下载多个yaml文件同样是从githubusercontent拉取也可能失败。如果update过程中某几个仓库反复失败可以多执行几遍rosdep的update不是原子性的它会把已经下载成功的缓存下来多试几次就能全部拉到。这个方法实测下来成功率高而且不用额外改脚本。3.4 配置环境变量安装完成后需要在~/.bashrc里追加ROS环境echo source /opt/ros/melodic/setup.bash ~/.bashrc source ~/.bashrc这里有一个容易被忽略的点如果你使用的是zsh而不是bash要把环境变量写入~/.zshrc。我见过不少人在zsh终端里运行roscore提示找不到命令检查发现source写错文件了。执行which roscore如果能输出路径说明环境变量生效。3.5 安装额外的依赖管理工具到此ROS主体就装完了但完整开发环境还差几个关键工具。首先是catkin_tools它比默认的catkin_make功能更多尤其是多工作区并行编译时很有用sudo apt install python-catkin-tools再装rosinstall和一些常用的代码管理工具sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential这些工具不是ROS运行的必要条件但后续建工作区、批量管理代码仓库时会频繁用到。一次性装齐能省不少事。4. 创建ROS工作区验证安装4.1 初始化catkin工作区常规做法是创建一个catkin_ws目录mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin_make这里如果你用的是catkin_tools也可以直接catkin init catkin build首次编译时工作区里没有任何自定义包所以只生成devel和build目录。编译完以后再执行source devel/setup.bash验证环境时注意每次打开新终端要么手动source工作区的setup.bash要么把source ~/catkin_ws/devel/setup.bash也加入~/.bashrc。如果只source了全局的/opt/ros/melodic/setup.bash那你自己的包是找不到的。4.2 用turtlesim做基础自检安装完总得跑个东西确认核心功能正常。最快的方式是启动turtlesimroscore开一个终端运行roscore保持它不退出。再开一个新的终端执行rosrun turtlesim turtlesim_node如果能看到一个小乌龟窗口那说明ROS节点管理和消息通信机制是正常的。接着再开第三个终端执行键盘控制rosrun turtlesim turtle_teleop_key按下方向键小乌龟能跟着移动就说明节点间通信链路没问题。这个测试比单纯看版本号更可靠因为它覆盖了master节点、节点注册、话题通信三部分内容。4.3 编译一个简单的发布订阅示例如果turtlesim通过下一步我建议你实际编译一个自定义功能包因为很多安装问题要等到编译代码时才暴露。建包命令cd ~/catkin_ws/src catkin_create_pkg test_pkg roscpp std_msgs然后在test_pkg/src里写一个最简单的发布者节点内容大约这样#include ros/ros.h #include std_msgs/String.h int main(int argc, char **argv) { ros::init(argc, argv, talker); ros::NodeHandle n; ros::Publisher pub n.advertisestd_msgs::String(topic_test, 1000); ros::Rate loop_rate(10); while (ros::ok()) { std_msgs::String msg; msg.data hello ros; pub.publish(msg); ros::spinOnce(); loop_rate.sleep(); } return 0; }修改CMakeLists.txt添加编译规则然后回工作区目录编译cd ~/catkin_ws catkin_make编译通过后运行节点再用rostopic echo topic_test查看输出。能持续收到数据说明ROS的编译链、运行链、消息传递链都通了。这一步通过后后续写自己的功能包才不会被环境问题干扰。5. 安装过程中最常踩的7个坑5.1 apt update时提示ROS源找不到Release文件根本原因就是把镜像源地址写错了。官方源的路径格式是.../ros/ubuntu而镜像站映射后需要写成.../rosubuntu。如果地址不对apt索引不到任何可用的包。检查路径修正后重新update。5.2 添加密钥失败密钥服务器连接不稳定是常态并不是你的姿势有问题。解决办法就是换keyserver地址或者等几分钟重试。另一个技巧是直接从keyserver的网页下载密钥文件再通过sudo apt-key add导入。5.3 rosdep update永远卡在githubusercontent原因前面说过主要是raw.githubusercontent.com访问不通。它不影响ROS本身安装只影响后续编译功能包时自动拉取依赖。如果你只是个人开发可以绕过rosdep手动安装缺失的系统依赖。但在团队协作或需要编译大型算法包时rosdep缺失会非常痛苦推荐还是把源换掉或者配好代理一劳永逸。5.4 roscore启动失败端口已被占用roscore启动时默认端口是11311如果上一次运行异常退出可能留下僵死的进程。先用ps -ef | grep roscore查进程再kill -9就好。也有少数情况是网络配置问题比如主机名解析不了我一般会检查一下/etc/hostname和/etc/hosts确认机器能正确解析自己的主机名。5.5 gazebo启动后黑屏或崩溃Ubuntu 18.04的显卡驱动和Gazebo的兼容性偶尔会出问题。最简单的办法是升级gazebo版本到官方最新发布或者安装gazebo9的额外插件。如果是虚拟机环境建议打开显卡加速相关配置否则Gazebo界面会非常卡。这种环境下我建议用gazebo --verbose启动可以看到具体是哪一步加载失败的日志。5.6 找不到Python依赖包Melodic默认是基于Python 2.7的如果你的系统里有多个Python版本混用很容易出现pip装的包无法被rosnode调用的情况。建议你在创建虚拟环境或安装pip包时明确指定Python版本。如果只是偶尔报缺少某个库直接使用系统apt安装对应的python包不要用pip硬塞进系统目录防止把rosdep的Python环境搞乱。5.7 工作区编译时提示找不到功能包这种情况通常是环境变量没配好。确认echo $ROS_PACKAGE_PATH的输出里包含~/catkin_ws/src。如果没有手动执行source ~/catkin_ws/devel/setup.bash然后再检查。6. 安装完成后的优化建议6.1 配置多机通信机器人开发经常需要在一台PC上运行rviz另一台比如工控机运行节点。修改主从机的/etc/hosts确保彼此能通过主机名互相访问然后在两个终端分别设置ROS_MASTER_URI指向运行roscore的机器。这一点不复杂但新手常忽略防火墙问题如果通信不上先检查防火墙是否拦截了11311端口。6.2 使用ROS镜像源加速依赖下载除了系统镜像源ROS软件源也可以设置成镜像。前面安装时你其实已经用到了这个技巧。后续日常使用中如果编译大型项目时下载依赖极慢可以考虑再次确认镜像源是否生效。有条件的开发者也可以使用本地缓存服务但一般个人开发用不到。6.3 备份干净的初始镜像等你完全装好ROS并验证通过后我特别建议做一个系统备份。无论是用系统自带的备份工具还是VirtualBox导出虚拟机镜像都值得做。由于ROS环境配置涉及的细节太多一张干净的镜像可以让你在环境报废后十分钟恢复比重新折腾几个小时舒服得多。7. 关于“完美安装”的个人看法其实“完美”这个词不太好定义。有人觉得顺利装完就是完美有人觉得装完不报错就是完美还有人觉得把所有依赖都配齐才叫完美。我的看法是安装完成只是开始真正重要的是建好一套自己用得顺手的开发环境。比如我现在装完ROS Melodic会额外做几件事配置好VS Code的ROS插件和c_cpp插件建立常用的代码模板把工作区的编译命令封装成别名写好一套自己的.bashrc工具函数。这样新开一个项目时所有环境层面的琐碎事情都能在一分钟内处理完把注意力集中在算法和业务实现上。另外即使现在用ROS Melodic顺手也不要完全屏蔽ROS 2的学习。客观说新项目和新库正在往ROS 2迁移是大趋势。不过就现阶段的学习、科研和存量项目维护来说把Melodic吃透依然很有价值因为它能帮你深入理解ROS的核心机制——节点、话题、服务、参数服务器这些概念在任何一版ROS里都是通用的。把基础打牢以后切到ROS 2你只是换一套工具链而不是重新学一门技术。最后再分享一个小技巧装完ROS以后rosdep的配置文件比较脆弱有时升级系统包后会被覆盖。如果你有一个长期维护的环境可以把配置目录/etc/ros/rosdep手动拷贝一份备份以后出问题时直接恢复能救急不少次。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑