ROS 2 Humble环境搭建避坑指南:从版本匹配到Gazebo仿真
2026/9/17 4:55:54 网站建设 项目流程

学习ROS的第5天,是最容易让人砸键盘的一天。前四天你可能还在为跑通一个Node、看懂一次Topic通信而兴奋,第五天当你打开Ubuntu准备搭建完整的ROS开发环境,面对终端里拼写相似却互不兼容的源、依赖、版本号,那种"每个字母都认识,连起来不知道什么意思"的感觉会非常强烈。尤其是"鱼香ROS一键安装"这类工具在社区里流传甚广,但很多新手其实不清楚它究竟做了什么,出了问题也不知道怎么排查。这篇内容就围绕ROS学习第五天的核心任务——把环境真正跑起来,把踩过的坑提前告诉你。

这天的主题可以浓缩成三个字:装环境。别小看这个过程,ROS这套东西最离谱的地方在于,它每个版本绑定了固定的Ubuntu发行版,选错一步后面全是连锁反应。这篇文章会从版本匹配讲起,覆盖鱼香ROS一键安装的实测体验、手动安装ROS 2 Humble的分步流程、Gazebo仿真环境的配置,以及装完之后的验证方法,最后顺带聊一下Micro-ROS和机械臂、小车这些后续方向。无论你是学生、转行做机器人开发,还是已经在嵌入式领域想切入ROS,这篇内容应该都能帮你省下至少一天的时间。

1. 第5天的崩溃点:为什么安装ROS比学ROS更劝退

先说个扎心的事实:ROS学习曲线最陡的地方不是概念理解,而是环境搭建。前4天你可以在任何一台电脑上写ROS代码、看教程图解,但第5天一旦进入"我要在自己机器上跑起来"的阶段,面临的就不是一个软件,而是一整套互相依赖的生态链——Linux系统版本、ROS发行版、编译器、依赖库、图形界面、仿真器,任何一个环节出问题,终端报错信息都不会直接告诉你"你装错了版本",而是抛出一个八竿子打不着的依赖错误。

我见过太多人卡在这几类问题上:

  • 拿Ubuntu 18.04去装ROS 2 Humble,装到一半报一堆依赖冲突,然后怀疑是自己"资质不行"。
  • 用apt直接搜索ros关键字,看到什么装什么,结果装出来一个残缺的环境,连ros2 run都找不packages。
  • 按照一篇几个月前的博客教程操作,博客作者用的是老版本源,命令里的key已经失效,复制粘贴后一堆404 Not Found
  • 卡在rosdep init一步,网络原因也好、源失效也好,反正就是过不去。

这些问题的共同根源,是ROS版本必须和Ubuntu发行版严格对应这件事没有在一开始就被重视。很多人第5天的心态是"赶紧装完赶紧跑demo",结果越急越乱,装到一半系统源被改得乱七八糟,最后只能重装Ubuntu——没错,重装系统几乎是每个ROS新手都经历过的仪式。

所以第5天真正该做的第一件事,不是立刻执行安装命令,而是花10分钟确认三件事:你的Ubuntu版本、你要装的ROS版本、以及这个组合对应的支持年限。确认完了再动手,后面90%的坑都可以绕开。这一天的教训就是:ROS学习里,慢就是快,弄清楚"为什么要用这条命令"比"复制这条命令"重要得多。

2. 动手前先看版本匹配表,别凭直觉选源

2.1 ROS 1和ROS 2的分水岭:选错系谱等于白装

ROS这个概念下其实有两条技术线:ROS 1(以Noetic为终点)和ROS 2(以Humble、Foxy等为代表)。它们从底层通信机制到命令格式都不一样——roscorerosrun是ROS 1的玩法,ros2 runros2 topic是ROS 2的玩法。有些新手拿到一篇讲ROS 1的教程,装了个Noetic,然后照着ROS 2的文档敲ros2 launch,怎么敲都提示command not found,最后怀疑人生。

以我个人的建议,如果你现在刚开始学,直接上ROS 2,原因很实在:

  • ROS 1 Noetic在2025年已经停止官方维护,学一个"退休"系统不太划算。
  • ROS 2从Foxy开始已经迭代了好多版本,Humble是长期支持版,稳定又成熟。
  • 现在社区里新出的机械臂、导航、Micro-ROS相关的资料,基本都是基于ROS 2写的。
  • ROS 2原生支持实时性、多机通信、安全通信,这些是ROS 1很难补上的短板。

当然,如果你学校课程、实验室代码库还停留在ROS 1,那另说,但自主从零学的话,ROS 2是不二选择。

2.2 Ubuntu和ROS版本的对应关系速查

下面这张表建议截图保存,是你第5天最重要的参考:

Ubuntu版本对应ROS 1版本对应ROS 2版本状态说明
Ubuntu 20.04 (Focal)NoeticFoxy / GalacticNoetic是ROS 1最后的版本,Foxy已过时
Ubuntu 22.04 (Jammy)不推荐装ROS 1Humble目前最主流的组合,推荐
Ubuntu 24.04 (Noble)不支持ROS 1Jazzy新版本,生态还在跟进

这里有个很容易踩的坑:Ubuntu 22.04理论上可以装上ROS 1的某个版本,但需要编译源码、折腾一堆依赖,非常痛苦。新手不要尝试这种"逆天改命"的操作。直接遵守官方版本对应关系,是省时间的最好方式。

另外一个隐蔽问题:Ubuntu小版本升级。很多人装的Ubuntu 22.04后来自动升级到了22.10或者23.04,这时apt里的软件源会指向新版本代号,而ROS源可能还没有适配。如果你安装时发现软件源里找不到ros-humble-*包,先检查一下lsb_release -a,确认自己的Ubuntu版本号确实是22.04.x,而不是被升级到了别的版本。

2.3 虚拟机、双系统、Docker:三种环境怎么选

第5天你还要做一个环境层面的决策:跑在哪。三种方式各有优劣,我直接说结论:

  • 虚拟机(VMware/VirtualBox):适合纯学习,快照功能极其好用——装坏了一键回滚,这比什么排查技巧都管用。缺点是对3D加速支持有限,摄像头、串口透传要额外配置,跑Gazebo会比较卡。新手推荐先虚拟机。
  • 双系统:性能没有任何损耗,USB设备、显卡驱动都直接可用,适合要接真实传感器(相机、雷达、机械臂)的工程开发。缺点是装系统和驱动有风险,装坏了可能影响原有系统。
  • Docker:适合部署环境给团队共享,或者多版本ROS切换。但对图形界面、USB设备需要挂载配置,新手一开始就被容器概念劝退的概率挺大,不建议作为第学习首选。

我个人经验是:前两周用虚拟机跑通核心概念,确定自己真的要往这个方向深入了,再考虑双系统。在虚拟机上装ROS,装坏了回滚快照,心理压力小很多,这对学习体验非常重要。

3. 鱼香ROS一键安装实录:一条命令背后的完整选择

3.1 这个工具解决了什么痛点

国内ROS学习圈子里,鱼香ROS一键安装几乎无人不知,搜索关键词"鱼香ros一键安装""小鱼ros一键安装"的热度一直很高,甚至有人搜成"鱼香肉丝ros一键安装"。它的核心价值在于:把ROS安装过程中最折磨人的几步——切换软件源、下载ROS密钥、安装依赖、初始化rosdep——封装成交互式脚本,你只要回答几个选项,它自动帮你搞完。

这个工具对新手最大的意义是"可信":脚本是开源的,在社区里用了很久,你不需要自己去拼凑博客里的安装命令。要知道,最坑的往往不是官方命令复杂,而是你找的教程里的命令是别人三年前写的,里面的key失效了、源地址变了,你照着复制却不知道哪里出了问题。

3.2 实际操作流程

在实际使用鱼香ROS时,过程大概是这样的:先在终端执行安装命令,下载并运行脚本。脚本会让你做一系列选择:

  • 选择系统版本对应的ROS版本(它会根据Ubuntu版本自动推荐,不是让你自己盲填)。
  • 选择ROS 1还是ROS 2(选了ROS 2它会进一步指引你装humble)。
  • 配置系统软件源(可以选择替换为国内镜像源,这一步能大幅解决下载慢的问题)。
  • 安装依赖、配置rosdep,这些它会一步步完成,终端会显示当前在执行什么。

整个过程比手动敲命令省心太多,尤其是rosdep init/update这种网络环境不友好的步骤,脚本会帮你处理好(比如配置合适的源)。前几步做完,后面的apt install ros-humble-desktop也会顺畅很多,因为你用的源是镜像源,下载速度完全不在一个量级。

3.3 一键安装的代价:你缺失了"出错了怎么排查"的能力

说完好处,我必须泼一盆冷水:一键安装隐藏了太多细节,导致很多新手装完之后,对系统里发生了什么毫无概念。这带来的问题不是马上暴露的。比如后面你自己新建一个工作空间,colcon build编译报错时,你需要理解source /opt/ros/humble/setup.bash是什么意思,需要知道Ubuntu源和ROS源有什么区别,需要知道环境变量是怎么生效的——这些一键脚本都帮你做了,但没告诉你为什么。

所以我的建议是:你可以用一键脚本把环境装起来,但至少要看一遍下面第4节的内容,搞清楚每条命令背后在干什么。这不是让你手动重装一遍(没必要),而是让你拥有"出问题时知道去哪查"的能力。毕竟第5天之后,你要面对的是通信、功能包、仿真、算法,环境问题还会不断出现,没有一点底层认知会很痛苦。

4. 手动安装Humble的完整步骤,理解每条命令的目的

这一节我会把ROS 2 Humble手动安装的流程完整走一遍,重点是解释每条命令的作用。就算你不打算手动装,也建议读一遍,理解之后你会发现很多"玄学报错"其实逻辑非常清晰。

4.1 第一步:配置软件源和ROS源

安装ROS 2之前,先要确保Ubuntu系统能从一个软件仓库下载它需要的所有依赖。首先确保你的系统是最新的:

sudo apt update && sudo apt upgrade -y

这一步是让系统把所有已安装软件更新到最新,避免后续安装ROS时因为某个依赖库版本过旧而冲突。

接着把ROS 2官方的源添加到Ubuntu的源列表里。先用curl下载ROS官方的GPG密钥(密钥的作用是验证后续下载的软件包身份):

sudo apt install curl sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

看到这里你可能就会遇到第一个问题:访问raw.githubusercontent.com这个地址慢或超时。这是国内网络环境的真实痛点,解决方案是使用国内镜像源。鱼香ROS脚本在这里做的事情本质上也是"换源",你完全可以手动把命令里的地址替换成可用的镜像地址,效果是一样的。这一步没有固定答案,需要根据你当前网络环境灵活调整。

添加完密钥后,把ROS 2源写入源列表文件:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

这条命令很长,拆开看:$(dpkg --print-architecture)自动获取你系统的CPU架构,$(. /etc/os-release && echo $UBUNTU_CODENAME)自动获取Ubuntu版本代号。这样写的好处是你换了机器重装,这条命令照样能用,不需要手动改。

4.2 第二步:安装ros-humble-desktop

源配好后,更新源列表,然后安装ROS 2核心套件:

sudo apt update sudo apt install ros-humble-desktop

ros-humble-desktop是一个元包,它会拉进来一组ROS 2桌面版的标准组件,包括核心通信库、常用命令行工具、可视化工具RViz、仿真器集成以及大量示例功能包。如果只需要命令行环境、不需要GUI,可以装ros-humble-base,体积小很多。但初学阶段我建议直接desktop,RViz在后面调试机器人模型、查看点云时是刚需。

文件包数量非常大,下载体积以G为单位。这一步如果源没换成国内镜像,你会感受到什么是"网络等待的极限"。这里有个经验:如果你在sudo apt update时看到源里已经有ros-humble-*开头的包了,说明源配置成功;如果搜不到,回上一步排查。

4.3 第三步:配置环境变量

ROS 2装完以后,系统并不知道它装在哪。需要手动设置环境变量,让终端能找到ros2命令:

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

第一行把source命令写进bash的配置文件,这样每次打开新的终端都会自动加载ROS环境。第二行让当前终端立刻生效。/opt/ros/humble/setup.bash这个文件是ROS 2安装时生成的,里面设置了一堆环境变量(PATH、LD_LIBRARY_PATH、AMENT_PREFIX_PATH等)。

这里有个很多新手不知道的坑:如果你用的是zsh而不是bash,.bashrc里的配置根本不生效,你需要把source /opt/ros/humble/setup.bash写进~/.zshrc。检查方法很简单,执行ros2 --help,提示找不到命令,八成就是环境变量没配好。

4.4 第四步:rosdep初始化

rosdep是ROS用来管理功能包依赖的工具。它做的事情类似于"读取功能包的package.xml,自动安装所有依赖的系统库"。新建一个工作空间、编译别人的功能包时,rosdep几乎是必经之路。

sudo apt install python3-rosdep2 sudo rosdep init rosdep update

rosdep init会从远程仓库拉取一份依赖索引,rosdep update是更新这个索引。这两步经常因为网络问题卡住。遇到这种情况,解决方案是配置rosdep使用国内代理源,鱼香ROS脚本也集成了这个功能。如果你手动装到这里卡住,不要硬等,去搜索一下"rosdep update卡住"的解决方案,按照当前社区的推荐方式处理,这比自己瞎试高效得多。

4.5 安装过程中的典型报错与排查方法

手动安装遇到的问题,我列一份排查清单:

报错场景可能原因处理方向
apt update报404ROS源和Ubuntu版本代号不匹配检查/etc/os-release里的版本代号
ros2 command not found环境变量未配置确认source路径和shell类型
rosdep init卡住网络无法访问目标地址换源定时重试或配置代理,保证核对后重试
编译功能包时找不到ros2包缺少colcon或功能包依赖安装python3-colcon-common-extensions
安装包时依赖冲突升级了系统源导致版本错位不要混合不同版本的Ubuntu源

安装这关过了,你的第5天才算走完一半,接下来是验证环境是否真的"能干活"。

5. Gazebo仿真环境的安装与联调,搭起你的第一个"数字世界"

5.1 Gazebo到底是个什么东西

Gazebo是一个机器人仿真环境,可以理解成"机器人界的3D游戏引擎"——你在里面搭一个虚拟世界,放一个机器人模型,然后让代码跟这个虚拟机器人交互。它和ROS的配合是机器人开发的核心链路:算法先在仿真里验证,再去真机上跑,成本低、不会撞墙、不会烧电机。搜索热词里"gazebo安装ros环境ubuntu22""获取gazebo ros pkgs包"都是这个环节的问题。

ROS 2 Humble官方支持的Gazebo版本是Gazebo 11(也叫Gazebo Classic)。注意,Ubuntu 22.04自带的apt源里很可能没有你需要的那套gazebo-ros包,必须通过ROS源安装,这也是很多人卡住的地方。

5.2 安装Gazebo及ROS集成包

如果你的ROS 2 Humble装的是ros-humble-desktop,Gazebo本体有可能已经被作为依赖装进来了。验证方法:终端执行gazebo --version,能看到版本信息说明本体已装。但光有本体还不够,你还需要ROS和Gazebo之间的桥梁包:

sudo apt install ros-humble-gazebo-ros-pkgs

这个包提供了gazebo_ros节点,负责在ROS 2和Gazebo之间转发话题、服务、TF坐标变换。没有它,Gazebo里的虚拟机器人数据无法发布到ROS话题上,你的ROS代码也就"看不到"仿真世界里的任何东西。

装完可以做一个快速验证:启动一个空世界,然后开另一个终端,用ros2 topic list看看有没有话题通信。如果能看到/clock/rosout这样的话题,说明Gazebo和ROS 2的桥梁已经打通。

5.3 用gazebo_ros启动一个迷你世界的完整流程

接下来给一个最简单、可复现的启动流程。先启动一个空世界:

ros2 launch gazebo_ros gazebo.launch.py

launch命令会启动Gazebo服务端和一个空的仿真世界。如果这一步窗口能弹出来,看到一片灰色地面网格,说明Gazebo和ROS节点的基本通信正常。世界文件、机器人模型加载等后续操作,就是这个流程的扩展。

需要提醒的是,Gazebo启动时终端刷的很多"警告"(warning)可以不用管,它并不影响使用。首次启动Gazebo特别慢,因为要加载模型数据库,下载模型文件需要时间——如果发现启动后地面上是空白的,等一两分钟,模型文件往往正在后台下载。

Gazebo对电脑硬件有一定要求,虚拟机用户可能会感觉到卡顿。如果卡到无法操作,可以在理化配置里调高内存和CPU核数,或者在启动命令里加上verbose:=true看输出信息。这更多是"够用就好",不追求高帧率。

5.4 仿真环境里测试你的第一个功能包

环境打通后,建议立刻在Gazebo里放一个小盒子模型,跑一个最简单的样例。在终端先依次执行两个命令:

  • 一个终端启动Gazebo并加载一个简单的cube模型(或者加载turtlesim也行)。
  • 另一个终端用ros2 topic echo订阅机器人发布的位置话题,观察数据变化。

这个过程不需要你写任何代码,但是能确认整条链路是通的:机器人模型发布状态话题 → ROS 2接收 → 终端能printf出来。之后你再开始写发布器、订阅器节点,就会知道"没数据"是代码问题还是环境问题。这个判断力非常关键,学会区分问题发生的层次,能帮你省下大量排查时间。

6. 装完怎么验证?从turtlesim到Micro-ROS的方向预览

6.1 经典之作:用turtlesim验证核心通信

环境装好、Gazebo能跑之后,第5天收尾前一定要跑一个经典例程:turtlesim。这是一个模拟小海龟在屏幕上移动的节点,是ROS 2的"Hello World",用于验证ROS核心通信是否正常。

开启两个终端:

终端一:

ros2 run turtlesim turtlesim_node

终端二:

ros2 run turtlesim turtle_teleop_key

第二终端启动后,用键盘上的方向键,第一终端的窗口里的小海龟应该会跟着移动。这背后验证的是ROS 2最核心的通信模型:turtle_teleop_key节点发布键盘按键消息,turtlesim_node订阅并驱动海龟运动。在另一个终端运行ros2 topic list,就能看到这两个节点之间通过/turtle1/cmd_vel话题在收发数据。

这里有一个第5天非常值得做的实验:在控制海龟运动的终端里,执行ros2 topic echo /turtle1/cmd_vel(开第三个终端),然后去按方向键,你会看到键盘消息被另一个节点"偷听"到了。这个体验比读十遍话题概念的文档都直观——纸上得来终觉浅,亲手抓到一条消息的感受完全不同。

6.2 第5天之后的方向:Micro-ROS与硬件控制的入口

环境搭建和基本验证只是第5天的"毕业要求"。接下来你会想往不同方向深入。这里对应热搜词里的几个方向,简单展开说说:

  • Micro-ROS + ESP32:这个方向适合做嵌入式底层的开发者。Micro-ROS让ESP32这类资源受限的微控制器也能接入ROS 2网络。你需要先在Ubuntu上运行micro-ROS Agent(一个转发节点),ESP32开发板上烧入micro-ROS Client固件(用Arduino或FreeRTOS开发),两者通过Wi-Fi或串口连接。这块的入门成本主要在交叉编译环境搭建,但打通之后非常有意思——你的ROS代码可以直接控制真实硬件。
  • ROS小车自主导航仿真:这是个经典综合项目,一般涉及URDF机器人建模、Gazebo仿真、SLAM建图、Nav2导航栈。环境跑通后,可以先照着官方教程在Gazebo里搭一个差速小车模型,再在上面跑nav2导航,最终实现"给定目标点,小车自己规划路径并避障移动"。这个过程能让你把ROS 2里的TF、传感器数据、路径规划、速度控制全部串起来。
  • 机械臂开发:AR3这类开源机械臂项目,以及机械臂运动学、MoveIt运动规划,是ROS 2里分量很重的方向。你可以在Gazebo里加载一个机械臂模型,用MoveIt做拖拽示教和轨迹规划。第一步通常是加载URDF模型到RViz,手动拖拽末端执行器检查运动学解算是否正常。
  • 相机标定与驱动录制:海康相机驱动、相机标定(包括rod标定和标定板的流程)是机器人视觉方向的基本功。相机能接入ROS(通过USB或千兆网口),发布图像话题,再用相机标定工具计算内参,之后才能做目标识别、深度估计,最后把图像和里程计数据一起录制为rosbag,供算法离线回放。

这几个方向没有一个能在一天内完成,但第5天最重要的是把基础环境打牢,确定自己往哪条路走。我见过太多人每天都想学新东西,却从没确认地基是不是实的——最终在某个深夜被一个环境问题整崩溃,白白浪费了大量时间。

6.3 第5天的检验清单

最后分享一个我常用的"第5天过关清单",你可以随着操作逐项检查:

  • [ ] Ubuntu版本正确(22.04.x),ROS 2 Humble能通过ros2 --version正常输出。
  • [ ] 终端里不敲source默认就能用ros2命令(环境变量已持久化)。
  • [ ]rosdep update不报错(或至少知道报错原因和解决方案)。
  • [ ]ros2 run turtlesim turtlesim_node能打开海龟窗口,键盘能控制它移动。
  • [ ] Gazebo能启动并加载机器人模型,ros2 topic list能看到仿真相关话题。
  • [ ] 新建一个工作空间能colcon build成功,并source后能跑通自定义节点。

这六项全过,第5天就可以画上句号。如果没有,就一项一项来,检查清单比反复重装系统高效得多。

说实话,ROS这套环境,装它的时候有多痛苦,后面用它的时候就有多爽。我自己的体会是:花一个完整的第五天把环境弄明白——包括原理、报错、排查——是ROS学习路上最值得的一笔时间投资。很多人在这天倒下了,觉得"机器人开发太难了",其实难的不是机器人,而是那二十几个环境变量。把这层窗户纸捅破,后面你就能把心思专注在真正的算法和系统设计上。装好环境那天,记得跑通第一只小海龟,那种"掌控感"会让你觉得前面几天的坚持全都值了。

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

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

立即咨询