
先交代一下背景我最近在一台刚装好 Ubuntu 24.04 LTS 的机器上折腾 ROS2目标很明确就是要装当前官方同步支持的 Jazzy 版本。整个过程其实不算复杂但网上资料东一块西一块有的写 22.04 的 Humble有的直接贴命令不解释理由跟着抄很容易踩坑。这篇记录我打算按自己的实际操作顺序来写把每一步为什么要这么做、命令在干什么、遇到问题怎么排查都讲清楚希望能帮你少走点弯路。不管你是在物理机、虚拟机还是 WSL 里装只要系统是 Ubuntu 24.04这套流程基本通吃。1. 安装前的准备工作别急着敲命令1.1 为什么要选 Ubuntu 24.04 ROS2 Jazzy很多人其实没搞明白 ROS2 版本和 Ubuntu 版本之间是有严格对应关系的。ROS2 Jazzy Jalisco 是 2024 年 5 月随 Ubuntu 24.04 LTS 一起发布的 LTS 版本官方支持周期到 2029 年。这个“LTS 对 LTS”意味着什么意味着你不需要像以前用 ROS1 那样系统一升级整个 ROS 环境就废掉也不会有操作系统还在维护但 ROS 版本已经停止更新的尴尬情况。如果你去 ROS 官方文档看发行列表会发现每个 ROS2 版本都有明确的平台支持矩阵。比如 Humble 对应 Ubuntu 22.04Iron 对应 24.04 但它是非 LTS 版本而 Jazzy 是第一个长期支持的 24.04 ROS2 版本。所以对于要跑长期项目、做毕设、或者部署机器人实机的朋友来说Ubuntu 24.04 ROS2 Jazzy 是目前最稳妥的组合之一。选这个组合本质上是在选择一个“未来几年都不用再大动干戈”的开发底座。1.2 环境选型物理机、虚拟机还是 WSL我在这次安装前专门对比了三种常见环境因为选错环境会在后续使用中带来完全不同的体验这里直接给结论。环境优点缺点推荐场景物理机原生 Ubuntu性能最好GPU 直通ROS2 底层通信无额外延迟可能需要放弃 Windows 环境驱动有时要折腾长期开发、实机部署、跑仿真和视觉VMware/VirtualBox 虚拟机不影响宿主机系统可随时快照回滚3D 加速弱Gazebo 重负载场景可能卡顿初学者练手、临时测试、课程作业WSL2启动快和 Windows 文件系统互通适合写代码网络模式特殊部分 GUI 和外接 USB 设备要额外处理轻量开发、纯代码调试、不想完全脱离 Windows如果你像我一样用虚拟机做演示建议至少分配 4 核 CPU、8GB 内存和 40GB 磁盘这样跑起来不至于太憋屈。如果只是练手验证虚拟机完全够用但如果你后面要跑 Gazebo Harmonic 做机械臂仿真、或者接激光雷达跑导航我建议直接上物理机或者 WSL2别在虚拟机里跟自己过不去。1.3 系统初始化更新、磁盘与源安装之前先做两件事。第一确保持久系统是最新状态打开终端执行sudo apt update sudo apt upgrade -y这一步很多人会跳过去我建议别跳。ROS2 依赖的底层库非常多如果系统本身的包索引都是旧的后面装 ROS 依赖时很容易遇到版本冲突或者找不到包。第二确认磁盘空间。完整桌面版的 ROS2 Jazzy 安装完大概要占 3~5GB加上编译缓存和依赖建议系统盘至少留出 15GB 空闲。我见过有人装到一半就卡住就是因为/usr分区满了那种状况处理起来特别麻烦。另外提醒一句如果你在虚拟机里安装建议先把 VMware Tools 或 VirtualBox Guest Additions 装好再开始装 ROS。因为后续所有操作都要靠复制粘贴命令没有增强工具的话鼠标切入切出和粘贴板共享会非常折磨人。2. 核心安装步骤逐条拆解2.1 添加 ROS2 软件源官方源安装ROS2 不像普通软件那样可以直接用 Ubuntu 自带的 apt 源安装你需要把 ROS2 的官方软件仓库添加到系统里。这个做法的本质和你在 Ubuntu 里添加 Docker、VS Code 等第三方源是一样的没有什么黑魔法。先安装依赖的工具包sudo apt install software-properties-common curl sudo add-apt-repository universe第一条命令装的是后面添加源需要的curl等工具第二条是启用 Ubuntu 的 universe 软件仓库。ROS2 在 Ubuntu 上依赖了很多这个仓库里的包不启用的话后面会不断报依赖缺失。然后添加 ROS2 官方的 GPG 密钥sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg接着把 ROS2 的 apt 源写入系统配置文件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这里我解释一下arch$(dpkg --print-architecture)和$(. /etc/os-release echo $UBUNTU_CODENAME)这两个自动替换的含义。前者会自动识别你的 CPU 架构在 24.04 上通常是 amd64少数 ARM 设备上会变成 arm64这样就不用针对不同平台手写不同的源后者会从/etc/os-release文件里读取当前系统的版本代号Ubuntu 24.04 对应的代号是noble所以最终写入的源路径会解析成http://packages.ros.org/ros2/ubuntu noble main。这也是为什么这篇文章的流程对所有基于 24.04 的衍生系统同样有效的原因只要系统代号是 noble这条命令就能正确工作。配置完成后执行sudo apt update如果源配置正确你会看到输出里出现Packages.ros.org的仓库更新信息。如果没有出现或者提示找不到 Release 文件那你就要回头检查系统版本代号和网络连通性了。这一步是后续所有安装能够成功的分水岭。2.2 安装 ros-jazzy-desktop 完整桌面版ROS2 Jazzy 的 apt 包按功能拆成了很多层级最核心的三种安装方式如下# 方式一只装基础通信框架没有 GUI 工具 sudo apt install ros-jazzy-ros-base # 方式二完整桌面版包含所有常用工具和库推荐 sudo apt install ros-jazzy-desktop # 方式三指定某个功能包按需安装 sudo apt install ros-jazzy-rviz2我这次装的是ros-jazzy-desktop因为我对 rviz2、demo 节点、tf2 这些工具都有需求一次装齐省得后面再补。完整安装大概会拉取两百多个依赖包下载体积在 1GB 左右安装完占用磁盘约 3~4GB。安装时间取决于你的网络速度和磁盘性能我在虚拟机里大概花了十分钟左右物理机上会快很多。这里有个经验分享如果你只是需要某个特定功能包不要偷懒装 desktop也不建议装 ros-base 之后再一个个补。用ros-jazzy-ros-base打底然后按需apt install ros-jazzy-具体包名这样对系统的侵入最小以后排查问题也更容易定位。我见过很多新手把ros-jazzy-desktop装完之后又另外装了一堆五花八门的包结果系统里出现两套不同版本的依赖轻则报环境变量冲突重则直接把系统搞挂。2.3 配置环境变量并验证安装完成之后ROS2 的命令还不会被自动识别因为它的可执行文件放在/opt/ros/jazzy/目录下需要手动激活环境。每次打开新终端执行source /opt/ros/jazzy/setup.bash手动敲太麻烦所以直接把这一行加到 shell 配置文件的末尾echo source /opt/ros/jazzy/setup.bash ~/.bashrc source ~/.bashrc之后每次打开终端就自动加载 ROS2 环境了。注意如果你用的是 zsh要改成~/.zshrc我当时差点在这个细节上翻车。配置完成后用下面几条命令做个快速体检printenv | grep ROS ros2 --help ros2 daemon stop ros2 daemon start第一条命令会输出ROS_DISTROjazzy这样的环境变量如果输出为空说明 source 没生效第二条命令能跑起来说明主程序没问题第三条是重启 ROS2 的守护进程很多时候刚装完环境ros2命令会卡在Unable to contact my own daemon执行一下这个命令能解决大部分服务端通信问题。3. 安装成功后的基础验证跑通第一个 ROS2 程序3.1 用 talker/listener 验证节点通信装完之后很多人不知道下一步该干嘛这里我推荐一条完整的验证链路先跑内置的 talker/listener 示例确认 ROS2 最基本的发布订阅通信是否正常。打开两个终端都确保 ROS2 环境已经激活。第一个终端运行ros2 run demo_nodes_cpp talker第二个终端运行ros2 run demo_nodes_cpp listener如果一切正常第一个终端会持续输出[INFO] [1700000000.123456789] [talker]: Publishing: Hello, world! 1 [INFO] [1700000000.623456789] [talker]: Publishing: Hello, world! 2第二个终端会同步打印收到的消息。看到这种输出说明你的 ROS2 安装已经完全可用了。这里顺便教大家一个排查思路如果 talker 正常但 listener 收不到消息先别急着怀疑安装重启一下 ROS2 守护进程试试很多时候是这个后台服务在系统休眠或网络切换后抽风了ros2 daemon stop ros2 daemon start3.2 小乌龟测试turtlesim 的完整玩法talker/listener 验证的是纯通信机制但对大多数人来说太抽象了跑起来没什么成就感。接下来我们上一只乌龟这是 ROS2 教程里最经典的可视化验证程序。安装小乌龟包sudo apt install ros-jazzy-turtlesim然后运行ros2 run turtlesim turtlesim_node这时会弹出一个蓝色背景的窗口里面有一只乌龟。新开一个终端运行ros2 run turtlesim turtle_teleop_key在这个终端里用键盘方向键控制乌龟移动。这个测试看起来简单但它验证了几个关键东西ROS2 的节点发现机制、话题通信、GUI 程序的显示环境。如果在虚拟机里测试乌龟窗口没弹出来优先检查虚拟机图形环境配置不要直接怀疑 ROS2 装错了。小乌龟还可以顺带验证 ROS2 的话题系统。在第三个终端执行ros2 topic list ros2 topic echo /turtle1/cmd_velros2 topic list会显示当前所有话题你按方向键时/turtle1/cmd_vel话题上会有实时数据流ros2 topic echo能看到以几何消息格式发布的线速度和角速度数据。这一套跑通你对 ROS2 的“节点-话题-消息”三大核心概念就有了直观认知。3.3 Rviz2 可视化验证如果小乌龟没问题再来验证一下 ROS2 的 3D 可视化工具 Rviz2ros2 run rviz2 rviz2看到图形界面成功启动就说明 ROS2 的图形工具链也没问题。Rviz2 是 ROS2 生态里最基础也是最常用的可视化工具后续做 SLAM、视觉识别、路径规划都离不开它所以这一步验证很有必要。如果你打算做机械臂相关项目后面还可以装ros-jazzy-urdf-tutorial之类的包加载官方 URDF 模型直接在 Rviz2 里拖动关节看效果这算是 Rviz2 最直观的上手方式了。4. 常见问题与排查技巧实录4.1 找不到安装候选包执行sudo apt install ros-jazzy-desktop时如果提示Package ros-jazzy-desktop has no installation candidate大多数情况有两种原因。第一系统版本代号不对你的系统不是 Ubuntu 24.04 或者基于 24.04 的发行版导致源路径解析错误第二你添加源的命令执行时有语法错误配置文件内容有问题。排查方法是先看源文件cat /etc/apt/sources.list.d/ros2.list正常的话你应该看到包含noble main字样的记录。如果没有或者显示的是其他版本代号就要重新执行 2.1 节的添加源命令。另外也可以执行apt-cache search ros-jazzy | head如果能搜到包说明源是通的只是包名拼写问题搜不到就回过头检查源配置。4.2 source 之后 ros2 命令仍然找不到这个问题最常见的原因是你当前终端不是登录 shell或者~/.bashrc没有被正确加载。对应的解决办法是手动执行source /opt/ros/jazzy/setup.bash然后再试ros2 --help。还有一个隐藏很深的坑就是终端模拟器可能默认没有读取.bashrc这种情况下即使你写入了配置也不会自动生效。解决方法是直接在终端里执行bash进入子 shell或者干脆重启终端。如果source之后ros2还是找不到那就检查/opt/ros/jazzy/目录是否存在ls /opt/ros/jazzy/如果目录里只有setup.sh但缺少setup.bash说明你可能之前用过 zsh 交互流程安装过程中某些环境变量被污染了。最简单的恢复办法是重新安装一遍ros-jazzy-ros-base它会补齐所有基础文件。4.3 虚拟机里运行卡顿和窗口崩溃如果你和我一样在 VMware 里安装可能会遇到两个典型问题。一是小乌龟和 Rviz2 的 3D 渲染帧率极低这是因为默认的虚拟显卡性能太弱。VMware 里可以开启 3D 加速并把显存调到 128MB 以上VirtualBox 的话在“设置-显示-显存”里同样可以调高。二是窗口偶发崩溃这通常是 Wayland 和 X11 兼容性的问题可以在登录界面的齿轮菜单里选择Ubuntu on Xorg会话登录ROS2 的 GUI 工具在 Xorg 环境下要稳定得多。4.4 与 Python 3.12 和 pip 相关的问题Ubuntu 24.04 自带的是 Python 3.12这比 22.04 的 3.10 新了不少ROS2 Jazzy 虽然同步支持 3.12但 apt 安装的 ROS2 包默认是用系统 Python 环境的。如果你后面想用 pip 装一些 ROS2 相关的辅助库比如numpy、scipy、transformations千万不要直接pip install到系统环境里很容易和 ROS2 自身的依赖产生冲突。我建议使用虚拟环境或者至少加上--user参数pip install --user numpy另外如果系统里同时装了unset PYTHONPATH之后才能正常使用某些工具这说明了 Python 路径系统混乱。可以用echo $PYTHONPATH检查是否有异常路径如果输出了一堆不知道哪来的路径建议先清理掉再测试 ROS2 功能。4.5 网络问题导致下载缓慢或失败ROS2 的包主要托管在packages.ros.org国内访问速度有时不太理想。这里提供几个稳妥的应对思路一是使用带断点续传功能的下载工具比如apt本身支持断点续传但如果你用curl手动下载东西建议加上-C -参数让它支持续传二是如果某次apt update失败是偶发性的直接重试几次很多时候是网络抖动三是在 apt 配置里设置超时时间echo Acquire::http::Timeout 5; | sudo tee /etc/apt/apt.conf.d/99timeout把超时时间改短这样网络卡住时会快速报错而不是傻等然后重新执行sudo apt update即可。这一步在真实使用中非常管用。5. 进一步探索搭建第一个 colcon 工作区和节点5.1 安装 colcon 构建工具ROS2 的项目工程标准工具是 colcon它取代了 ROS1 时代的 catkin。虽然在 ROS2 官方仓库里它已经自带了一部分构建工具但要自己创建功能包还是建议安装完整的 colconsudo apt install python3-colcon-common-extensions然后创建一个工作区目录mkdir -p ~/ros2_ws/src cd ~/ros2_ws colcon build第一次在工作区根目录执行colcon build时即使没有源码也会生成本地的install、build、log三个目录。install目录里会有和你这个工作区对应的setup.bash运行你自己的节点之前需要先激活它。5.2 用 Python 写一个最简单的发布-订阅节点工作区建好之后我们来创建一个最简单的 Python 功能包。在src目录下cd ~/ros2_ws/src ros2 pkg create my_first_pkg --build-type ament_python --node-name talker_node这会生成一个名为my_first_pkg的功能包同时创建一个空的talker_node.py节点文件。然后编辑talker_node.py写入以下内容import rclpy from rclpy.node import Node from std_msgs.msg import String class Talker(Node): def __init__(self): super().__init__(talker_node) self.publisher self.create_publisher(String, my_topic, 10) self.timer self.create_timer(1.0, self.timer_callback) self.count 0 def timer_callback(self): msg String() msg.data fHello from my_first_pkg: {self.count} self.publisher.publish(msg) self.get_logger().info(fPublishing: {msg.data}) self.count 1 def main(argsNone): rclpy.init(argsargs) node Talker() rclpy.spin(node) node.destroy_node() rclpy.shutdown() if __name__ __main__: main()这段代码做的事情很简单Timer每秒钟触发一次回调函数回调里构造一个String类型消息发布到名为my_topic的话题上。写完之后回到工作区根目录执行cd ~/ros2_ws colcon build --packages-select my_first_pkg source install/setup.bash ros2 run my_first_pkg talker_node你会看到节点每秒打印一条发布日志。这时候你再开一个终端执行ros2 topic echo /my_topic就能看到自己发布的消息了。到这一步你就真正完成了从“安装 ROS2 环境”到“运行自己的第一个 ROS2 程序”的完整闭环。如果你对这些内容感兴趣下一步可以尝试做几件事用ros2 node list和ros2 node info /talker_node查看节点信息写一个订阅端节点接收自己的消息或者直接用rviz2加载一个 URDF 机器人模型感受一下 ROS2 在机器人建模方面的能力。我个人在实际操作中的体会是ROS2 的安装其实只是万里长征第一步真正有价值的是安装完成之后怎么把环境用起来。建议你装好之后立刻创建自己的工作区哪怕是抄最简单的官方示例也要亲手在终端里敲一遍这个流程走通之后你对 ROS2 的整个架构和操作习惯会有一个质的提升。最后再分享一个维护技巧每次关闭系统前记得看一眼/var/log/目录有没有异常大的日志文件ROS2 在频繁运行节点时产生的日志量比想象中大隔段时间清理一次能避免磁盘被无声无息地占满。装好环境只是开始祝你后续的机器人开发之路顺顺利利。