ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ROS Melodic安装教程:从系统准备到小乌龟测试全流程

ROS Melodic安装教程:从系统准备到小乌龟测试全流程 做机器人相关开发绕不开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那没问题放心往下走。如果是focal20.04、jammy22.04甚至更新的版本我建议你直接装对应版本的ROS发行版Noetic对应20.04Humble对应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 -yapt upgrade是为了把系统自带的基础包更新到最新避免后续依赖版本过旧。执行完后建议顺手装几个基础工具后面都会用到sudo apt install -y curl wget vim git2. 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还是desktopROS 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的进度提示那是正常的别中途CtrlC中断。如果安装过程中报依赖错误比如The following packages have unmet dependencies一般是因为某些依赖包的版本不对。优先尝试修复sudo apt --fix-broken install然后再重新安装。2.3 安装完成后立刻做rosdep init和updaterosdep是ROS的依赖管理工具后续编译工作空间、安装功能包依赖时都会用到。每次新环境都要先初始化再更新。很多人在这里卡到怀疑人生因为rosdep update要访问GitHub的ros/rosdistro仓库网络环境不好的时候基本必失败。先按标准流程走一遍看看你的网络情况sudo rosdep init rosdep updatesudo 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之后最直观的验证方法就是跑一次小乌龟节点这也是我每次给新环境做体检的标准动作。新开三个终端终端快捷键CtrlAltT第一个终端启动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 couldnt 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 osxERROR: error loading sources list: The read operation timed outrosdep 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/hostssudo 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 terminatorterminator是个非常好用的终端工具可以分屏ROS开发时经常要同时开三四个终端分屏终端能大幅提升效率。设置别名把常用命令简化。在~/.bashrc末尾加上alias cmcd ~/catkin_ws catkin_make alias cscd ~/catkin_ws/src alias roscroscore保存后执行source ~/.bashrc生效。这些小技巧用久了就会觉得真香。6. 常见问题速查表为了方便排查我把安装过程中最常见的问题和解决办法汇总成了一张表建议收藏备用。问题现象可能原因解决办法apt update提示NO_PUBKEY密钥未导入用apt-key adv导入报错中提示的KEYapt install时报unmet dependencies依赖包版本冲突执行sudo apt --fix-broken install后再装roscore提示command not found环境变量没有配置执行source /opt/ros/melodic/setup.bashrosdep update一直超时无法访问GitHub使用rosdepc替代或修改源地址为国内镜像启动rviz窗口闪退虚拟机3D加速未开启或显卡驱动问题开启虚拟机3D加速或更新GPU驱动编译功能包时找不到ros/ros.hROS环境未加载确认~/.bashrc里有source /opt/ros/melodic/setup.bashcatkin_make报Python3和Python2冲突conda环境或python指向错误关掉conda使用系统默认Python小乌龟窗口不显示DISPLAY环境变量异常检查图形界面配置虚拟机开启3D加速7. 写在最后的个人体验ROS Melodic从2018年发布到现在已经有年头了但它的稳定性和庞大的生态依然是很多老项目的首选。装好一个干净的Melodic环境只是万里长征第一步——后面编译功能包、调试话题、跑仿真每一步都会遇到新的问题。我自己的习惯是每次新装完环境先跑一遍小乌龟测试确认通信正常再把roscore、rosrun、rostopic这几个最基础命令用熟最后才往工作空间里放自己的代码。基础打牢了后面的学习和开发才会顺。如果你在安装过程中遇到这篇文章里没提到的问题别急着重装系统先去翻ROS官方wiki的Troubleshooting页面再查一下终端里完整的报错信息绝大多数问题都能在社区里找到答案。装ROS这件事耐心比技术更重要。
返回列表