ARTICLE DETAIL

资讯详情

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

Ubuntu 20.04安装ROS Noetic全攻略:从换源到环境验证,亲测有效

Ubuntu 20.04安装ROS Noetic全攻略:从换源到环境验证,亲测有效 开头Ubuntu 20.04装ROS Noetic这件事我前前后后在不同的机器上折腾了不下二十次有全新裸机、双系统、虚拟机也有从ROS Melodic升级上来的老环境。说“亲测有效”不是标题党而是每一步都真实跑过踩过的坑比安装步骤本身还值得记录。这篇文章写给谁看简单说三类人第一类是刚接触ROS、想在Ubuntu 20.04上搭好环境开始学习的小白第二类是准备在20.04上跑ORB-SLAM3、机械臂控制、移动机器人导航等项目的开发者因为很多ROS1项目现在依然依赖Noetic第三类是装了又卸、卸了又装被各种报错折磨到怀疑人生的“折腾党”。如果你属于其中任何一类这篇文章应该能帮你少走不少弯路。我会把安装思路、完整步骤、环境验证、常见报错一次性讲完尽量做到照着敲命令就能跑通。1. 安装前的准备与思路1.1 为什么是ROS Noetic它现在还值得装吗先回答一个很多人会问的问题都什么年代了为什么还在装ROS Noetic不直接上ROS 2Noetic是ROS1的最后一个长期支持版本发布于2020年5月官方支持周期到2025年5月。它对应的操作系统就是Ubuntu 20.04Focal Fossa。虽然ROS 2是现在的趋势但ROS1在过去十几年里沉淀了海量代码从SLAM算法ORB-SLAM3、Cartographer、LOAM、导航栈move_base、navigation2的前身、机械臂控制MoveIt、ar3机械臂到各种仿真环境Gazebo、Stage大量项目至今仍然只在ROS1上验证过。我身边很多做移动机器人和机械臂的团队生产环境里跑的还是Noetic。所以我的建议很明确如果你要复现论文代码、接手别人项目或者课程教材用的是ROS1那就老老实实装Noetic如果是从零开始做新项目并且不需要老代码可以考虑ROS 2。但今天的主题是Noetic装好它之后想再学ROS 2环境互不冲突完全可以共存。1.2 三种安装路线选对能省一半时间ROS Noetic的安装方式主要有三条路线我分别说下适用场景官方源安装直接用packages.ros.org的源配合apt install。优点是版本最权威、更新及时缺点是在国内网络环境下经常慢到怀疑人生apt update的时候很可能卡住或者超时。国内镜像源安装把ROS软件源换成清华TUNA或中科大的镜像本质和官方源一样就是换了个更快的地方下载。这是我最推荐的方式也是本文的主体步骤。一键安装脚本网上有热心开发者做的一键配置脚本本质是把换源、添加密钥、安装核心包、初始化rosdep打包成了一条龙操作。优点是省事缺点是出了问题你不知道它到底改了什么排错时等于黑盒操作所以我不建议新手直接用它。对于大多数人用国内镜像源手动安装是成功率最高、可排查性最强的方案。接下来的步骤完全围绕这条路线展开。1.3 开始之前先检查三件事安装前务必确认系统版本、Python版本和磁盘空间这三点能避免一半以上的安装失败。lsb_release -a python3 --version df -hlsb_release -a查看Ubuntu版本必须显示Focal Fossa20.04。如果你用的是Ubuntu 22.04对应的是ROS 2 Humble硬装ROS Noetic会有一堆依赖问题别浪费时间。python3 --version确认是3.8系列因为Noetic是ROS1里第一个完全基于Python 3的版本如果系统默认Python被改成2.7后续rosdep和catkin都会报错。df -h确认磁盘剩余空间完整安装ROS Noetic desktop-full版大概需要4-5GB空间太紧容易在安装中途失败而且排错特别痛苦。2. 完整安装步骤从换源到验证2.1 先更新Ubuntu软件源ROS的安装过程会从Ubuntu软件源拉取很多依赖库所以第一步先确保系统的apt源可用、索引是最新的。这一步很多人跳过结果后面安装rosdep时遇到各种“404 Not Found”或“Unable to locate package”。sudo apt update sudo apt upgrade -yupgrade会把系统现有软件升级到新版本耗时取决于网络状况如果机器有正在运行的重要服务建议先确认再升级。我一般会在新装好的系统上直接执行因为环境干净升级不会引发冲突。如果Ubuntu 20.04不是最新版本upgrade有可能推送内核更新这不会影响后面的ROS安装。2.2 配置ROS软件源和密钥这里要注意ROS软件源和Ubuntu软件源是两回事。Ubuntu软件源是系统通用库在/etc/apt/sources.list配置ROS软件源是新增的独立行通常放在/etc/apt/sources.list.d/ros-latest.list文件里。很多人以为改一下系统源就完事了结果apt找不到ros-noetic-desktop-full就是这里漏了。官方源能连外网时用sudo sh -c echo deb http://packages.ros.org/ros/ubuntu focal main /etc/apt/sources.list.d/ros-latest.list国内镜像源强烈推荐清华源、中科大源二选一即可。我在华北地区实测下来清华源速度比较稳定南方用户中科大源也不差。# 清华源 sudo sh -c echo deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu focal main /etc/apt/sources.list.d/ros-latest.list # 或者中科大源任选其一不要两个都写 sudo sh -c echo deb https://mirrors.ustc.edu.cn/ros/ubuntu focal main /etc/apt/sources.list.d/ros-latest.list然后添加ROS的GPG密钥。ROS官方密钥服务器是keyserver.ubuntu.com这一步有时候会超时多试几次或者换成国内可访问的keyserversudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654看到输出里出现gpg: Total number processed: 1或者imported: 1就说明密钥添加成功。添加完密钥后再执行一次sudo apt update如果能刷出大量ros-noetic相关的包说明ROS源已经生效。2.3 安装ROS Noetic完整版现在进入真正下载和安装的环节。我装的是desktop-full版它包含ROS核心功能、rviz、Gazebo仿真器、turtlesim小乌龟示例、以及图像处理相关的依赖包。虽然ros-noetic-ros-base更小更快但学ROS和跑仿真的话desktop-full一步到位更省心。sudo apt install ros-noetic-desktop-full -y这一步会拉取大量依赖包输出几百行滚动信息是正常的总下载量大。等它跑完确认没有红色报错信息。安装完成后你可以看一下/opt/ros/noetic目录是否已经存在ls /opt/ros/noetic这个目录是ROS安装的根目录后续source环境变量、查找包都会用到它。有的新手问过为什么装完没看到“ROS图标”或者“启动器”其实ROS本身就不是一个“软件产品”而是一套运行在Linux环境下的工具框架所以它的存在形式就是目录、可执行文件和库文件。2.4 初始化rosdep解决依赖管理rosdep是ROS生态里很重要的一个工具它负责自动解决某个包在编译或运行时的系统依赖。比如某个ROS包需要OpenCV或者PCLrosdep会读取包的配置文件自动帮你安装对应版本的底层库。如果不初始化rosdep后面创建catkin工作空间、编译别人的源码包时经常会卡在依赖解析上。sudo rosdep init rosdep updaterosdep init会把rosdep的基础配置文件抓取到本地/etc/ros/rosdep/sources.list.d/rosdep update则是更新具体的依赖索引。这两个命令在默认网络环境下很容易超时因为rosdep的数据源托管在GitHub上。如果你遇到了超时先不要着急重装系统把配置改到国内可访问的镜像源即可# 先把初始配置拉下来 sudo rosdep init # 如果init已成功但update失败则修改rosdep的源配置 # 编辑 /usr/lib/python3/dist-packages/rosdep2/sources_list.py 和 gbpdistro_support.py # 以及 /usr/lib/python3/dist-packages/rosdistro/__init__.py # 把里面的 raw.githubusercontent.com 替换为可访问的镜像域名这个“改文件换源”的方法在两条命令都失效时比较稳定不过这属于备用方案。实际上我自己实测更多用的是rosdep update多试几次、或者在某些时间段比如早晨网络状况好执行成功率也很高。如果你确实嫌麻烦还可以使用社区里开发者整理的rosdepc工具它把rosdep的默认源直接指向了国内镜像。2.5 配置环境变量ROS的环境变量靠shell的setup.bash脚本注入。在.bashrc里添加一行让每次打开终端自动加载ROS环境不然每次都要手敲source非常容易忘。echo source /opt/ros/noetic/setup.bash ~/.bashrc source ~/.bashrc.bashrc是bash终端的启动配置文件写在里面的命令每次新开终端都会自动执行。这里有一个常见的坑如果你同时装了ROS和AnacondaAnaconda的base环境也可能往.bashrc里写初始化脚本两者叠加时很容易出现ROS命令找不到。遇到这种情况不要慌先检查.bashrc里的行顺序确保ROS的source在conda初始化之前。2.6 安装rosinstall等常用构建工具构建ROS工作空间还需要几个辅助工具顺手一起装上sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential -y这些工具分别是干什么的呢rosinstall和rosinstall-generator用于根据.rosinstall文件批量下载和更新源码wstool管理多仓库工作区build-essential是编译C代码必备的gcc、g、make工具链。虽然初次安装用不到全部但后面编译ORB-SLAM3或Ar3机械臂项目时都会用到现在装好省得以后再折腾。3. 实操验证确认环境真正跑通3.1 启动roscore安装完成后最直接的验证方法就是启动ROS核心服务roscore。单独开一个终端执行roscore正常启动后终端会输出一段类似“started core service [/rosout]”的日志并且会一直在前台运行。这条命令其实启动了ROS的master节点和rosout日志节点整个ROS通信网络都依赖这个核心服务。如果这个起不来后面所有rosrun、roslaunch都会报[rosmaster] Exception之类的不靠谱错误。如果你的终端提示roscore: command not found几乎可以肯定是环境变量没有正确source。重新执行一下source /opt/ros/noetic/setup.bash再确认.bashrc那行写对没有。3.2 小乌龟验证核心通信核心服务跑起来之后再开两个新终端分别执行rosrun turtlesim turtlesim_node以及rosrun turtlesim turtle_teleop_key第一条命令会弹出一个蓝色背景的小乌龟窗口第二条命令让你用方向键控制乌龟移动。按几次方向键如果小乌龟真的动了说明节点启动、话题通信、消息传递全部正常。我个人把这当作“ROS安装成功的体检报告”因为turtlesim是官方自带的示例不涉及任何第三方依赖如果这里的通信链路坏了那就是系统环境的问题如果这里正常你的ROS Noetic基本算是装好了。3.3 创建工作空间为项目开发做好准备验证完小乌龟我建议顺手把catkin工作空间建好因为几乎所有ROS1项目都会在这个结构里编译运行。先创建目录结构mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_makecatkin_make执行完会生成devel和build两个目录。build是编译过程的中间产物devel里存放编译出的可执行文件和setup脚本。然后source开发空间的环境source devel/setup.bash这里有个细节如果后面你在src里放了新功能包重新编译之后一定要再次source devel/setup.bash否则新包可能找不到。更省心的做法是把source命令也写进.bashrc不过要注意先source ROS系统环境再source自己的工作空间echo source ~/catkin_ws/devel/setup.bash ~/.bashrc source ~/.bashrc可以验证一下当前环境变量echo $ROS_PACKAGE_PATH输出里应该包含/opt/ros/noetic/share和/home/你的用户名/catkin_ws/src。如果只看到系统的ROS路径说明工作空间没有正确source。3.4 快速查看版本信息最后加一个确认版本的小技巧rosversion -d终端会输出noetic。这表示当前ROS_DISTRO环境变量生效系统确实运行在Noetic环境下。如果你安装了多个ROS版本这个方法可以快速告诉你“当前终端正在使用哪一个ROS”。4. 安装中的常见报错与排查记录4.1 报错速查表我把自己和帮朋友排查过程中遇到的典型报错整理成了一张表按“报错现象 → 原因 → 解决办法”的顺序排列方便你对应着查报错现象根本原因解决办法E: 无法定位软件包 ros-noetic-desktop-fullROS软件源没有正确添加或apt索引未更新检查/etc/apt/sources.list.d/ros-latest.list是否存在执行sudo apt update确认Ubuntu版本是20.04W: GPG error: ... The following signatures couldnt be verifiedROS密钥未导入或过期重新执行apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654sudo rosdep init一直卡住或提示网络错误GitHub访问受限多试几次或用rosdepc替代或修改rosdep源指向国内镜像rosdep update报unable to process source或超时依赖索引更新失败检查DNS确保raw.githubusercontent.com可以解析或换源/重试新开终端找不到roscore环境变量未写入.bashrc检查~/.bashrc中是否有source /opt/ros/noetic/setup.bash执行source ~/.bashrcROS_MASTER_URI为空或一直报无法连接master多个版本ROS环境冲突、端口被占用确认roscore在后台运行检查8090端口和ROS_MASTER_URIhttp://localhost:11311编译工作空间时catkin_make报找不到Python系统默认python被修改或Anaconda干扰确认python3 --version是3.8暂时注释掉.bashrc里conda初始化后再source这张表覆盖了安装过程中80%以上的问题。剩下的20%大多与个人系统环境特殊配置有关比如防火墙、代理、自编译内核等处理思路仍然遵循“看日志、定位步骤、针对性修复”的方法不要一上来就重装系统。4.2 Python版本和Anaconda冲突ROS Noetic要求Python 3如果你的机器上还装了Anaconda很容易发生一系列的“灵异事件”。我在一台配置了Anaconda的机器上安装时遇到catkin_make出现ModuleNotFoundError: No module named catkin_pkg排查后发现是因为终端默认进入了conda的base环境Python解释器路径变成了Anaconda目录下的python3它根本找不到系统级的catkin_pkg。这个问题的解决思路比较直接写一个专门的ROS环境脚本或者创建conda虚拟环境时带上--clone base的方式隔离再或者就是在编译工作空间之前先执行conda deactivate。我个人比较建议在安装和学习ROS的阶段把.bashrc里的conda自动激活关掉避免每次开终端都默认进入base需要的时候再手动conda activate。4.3 双系统和虚拟机环境的注意事项在双系统环境下有一个容易忽略的问题不少双系统用户把系统装完之后会手动改主板的启动项或者修改/etc/default/grub如果grub配置出现问题开机可能进不了系统这在安装ROS之前就应该处理好。另外如果你使用虚拟机VMware或VirtualBox安装Ubuntu 20.04建议给虚拟机分配至少4GB内存和20GB磁盘否则编译大一点的功能包时内存和磁盘同时飙升系统会直接卡死。我在虚拟机里安装时还遇到过一条额外的坑默认的虚拟显卡驱动在运行rviz时画面闪烁后面装了open-vm-tools和桌面环境增强组件才稳定下来。如果你后续要用Gazebo做机器人仿真显卡驱动很重要。比如热词里有人提过apt install nvidia-driver-535给Ubuntu 20.04装NVIDIA驱动如果确认要在本机跑Gazebo或rviz这类图形密集型应用建议先装好显卡驱动再装ROS否则仿真渲染会比较吃力。4.4 卸载重装时如何清理干净如果安装过程中途失败或者你改了太多源配置想重来建议先把ROS卸载干净再重新安装避免残留文件造成新老冲突。sudo apt remove ros-noetic-* -y sudo apt autoremove -y sudo rm -rf /etc/ros sudo rm -f /etc/apt/sources.list.d/ros-latest.list如果你之前创建过~/catkin_ws建议一并备份或删除因为工作空间里的build和devel缓存可能会把旧的编译配置保留下来。5. 装完之后我还推荐你顺手做这几件事5.1 安装常用辅助包rviz、gazebo、tf、navigationdesktop-full虽然已经打包了常用的核心工具但实际做项目还要装一些常用的功能包。下面这几个是我在机器人项目里经常用的现在装好后面省事sudo apt install ros-noetic-rviz ros-noetic-gazebo-ros ros-noetic-tf2 ros-noetic-tf2-ros ros-noetic-navigation -yrviz是ROS的可视化工具用来显示点云、地图、机器人模型gazebo-ros是Gazebo与ROS通信的桥梁做仿真避不开tf2负责坐标变换管理做SLAM、导航时特别重要navigation是移动机器人的导航栈包含gmapping、amcl、move_base等核心节点。这些包装好之后你就能直接启动一个仿真小车的完整SLAM和导航流程了。5.2 让turtlesim显示中文或无画面时的处理偶尔有新手告诉我“小乌龟画面出来了但是是黑屏”或者“窗口没弹出来”这大概率是图形环境问题。你可以试试export LIBGL_ALWAYS_SOFTWARE1 rosrun turtlesim turtlesim_nodeLIBGL_ALWAYS_SOFTWARE1强制使用软件渲染在虚拟机或者没有显卡驱动的机器上这个参数可以救急。如果你在远程SSH环境没有桌面里跑turtlesim默认是不会弹窗的需要加-p参数或者使用xvfb虚拟显示。不过在本地桌面系统上直接跑就行。5.3 写给初学者从turtlesim接着往哪走很多初学者装完Noetic后很开心然后就没有然后了不知道下一步该学什么。我的建议是装好小乌龟之后跟着官方教程走一遍ROS核心概念的入门。比如rosnode list、rostopic list、rostopic echo /turtle1/cmd_vel亲手看一下小乌龟移动时话题数据是怎么流动的。这比直接背命令有用得多它会帮你建立“节点-话题-消息”这个ROS基本模型。等这个模型建立起来了再碰rviz、tf、URDF、Gazebo就会顺畅很多。最后说一点个人体会。我在折腾ROS Noicet的过程中最深的感受是大部分安装失败的案例其实不是步骤本身多难而是环境不干净、源不通、版本信息不匹配导致的连锁反应。所以不管你是第一次装还是第N次装先花五分钟把系统版本、网络状况、Python版本这三件事确认清楚成功率就上去了一半。装完之后也不要急着跑复杂项目先用小乌龟把通信链路验证好再逐步扩展工具链。希望这篇文章能帮你顺利进入ROS的世界。
返回列表