Skip to content

第一章 · Ubuntu、WSL 与 ROS 是什么 ​

在敲第一行命令之前,先把几个名字弄清楚:Ubuntu 到底是什么,为什么机器人开发几乎离不开它;WSL 又是什么,为什么它能让 Ubuntu 直接住进 Windows;ROS 又是什么,为什么它叫“操作系统”却不是操作系统。这一章先把概念和版本路线定下来,具体的安装、踩坑与验证留给后面两章。

1.1 什么是 Ubuntu ​

从 Linux 说起 ​

先纠正一个常见的误解:我们平时说的“Linux”,严格来讲只是操作系统的一个内核,也就是负责管理硬件、进程、内存的那部分最核心的程序。光有内核还不足以日常使用,还需要配上图形界面、各类软件和工具,才构成一个完整可用的操作系统。内核加上这些软件的整体,叫作 Linux 的发行版。

Ubuntu 就是众多发行版中人气最高、资料最全的一个。它基于另一个老牌发行版 Debian,由英国的 Canonical 公司维护,完全免费、开放源代码。因为用的人多,网上的教程、第三方软件、硬件驱动的支持都最齐全,所以它也是初学者最合适的入门选择。

Ubuntu 的版本号很有规律,形如“年份.月份”。比如 22.04 表示 2022 年 4 月发布。它每年发布两次,其中偶数年的 4 月会发布一个特别版本,名字里带 LTS(Long Term Support,长期支持),官方会提供长达五年的维护更新。机器人开发领域几乎清一色使用 LTS 版本,图的就是稳定和长期可用,这套笔记也以 LTS 版本为前提。

版本号怎么读

22.04 是 2022 年 4 月,24.04 是 2024 年 4 月,26.04 是 2026 年 4 月。看到带 LTS 的版本,跟着用就对了。

为什么机器人开发普遍使用 Ubuntu ​

机器人开发选择 Ubuntu,通常出于几个现实原因:

  • ROS 官方的主战场就是 Ubuntu。ROS 的安装、文档、示例在 Ubuntu 上支持得最好,很多版本组合甚至只有 Ubuntu 这一条“官方推荐”路线,跟着走最不容易踩坑。
  • 免费开源。机器人项目可以自由使用、修改和分发,不必为许可证操心。
  • 生态成熟。激光雷达、相机、机械臂等硬件厂商大多优先提供 Linux 驱动;论文开源代码、算法库也常在 Ubuntu 上测试。
  • 命令行与脚本化能力强。机器人常常需要远程登录、批量处理、自动运行,Ubuntu 的命令行环境让这些操作非常顺手。这正是后面第四章 · Ubuntu 常用命令要练的基本功。

当然,ROS 并不是只能在 Ubuntu 上跑,其他 Linux 发行版甚至 Windows 也可以。但对新手而言,跟随 ROS 官方支持最好的 Ubuntu,能省下大量和环境搏斗的时间。

Ubuntu 桌面界面

1.2 在 Windows 上使用 Ubuntu:WSL ​

这套笔记的最终目标,是让 ROS 2 在一套 Ubuntu 环境里跑起来。多数人日常使用的电脑装的是 Windows,直接改装系统代价太大,装双系统又要重启切换,也谈不上方便。更轻的起步方式是:用 Windows 自带的 WSL,让 Ubuntu 直接住在 Windows 里。

WSL 全称 Windows Subsystem for Linux,中文叫“适用于 Linux 的 Windows 子系统”。一句话解释:让 Linux 直接住在 Windows 里,不必再装一台虚拟机。它开机一两秒就能进系统,能直接读写 Windows 里的文件,图形程序也能开在 Windows 桌面上。

不过这条路上的坑明显更密,几乎每走一步都会撞上一个报错。所以后面环境部分不按教科书的顺序写,而是按照当时真实的踩坑顺序写:先被什么卡住,屏幕上报了什么样的一段话,最后又是怎么过的。你可以把它当成一份通关记录,遇到同样的报错时直接翻到对应的小节抄命令。

WSL 是什么 ​

严格说来,WSL 1 只是把 Linux 的系统调用“翻译”成 Windows 能听懂的形式,兼容性一般。从 WSL 2 开始,微软干脆在 Windows 内部塞了一台轻量虚拟机,里面跑的是真正的 Linux 内核。所以今天用的 WSL 2 和 WSL 3,本质上是“一台你看不见、也不用管的虚拟机”。

这句话很重要,因为它提前解释了后面一堆坑的共同来源:你其实是在两套系统之间来回横跳,而两边的命令、路径、权限规则全都不一样。

text
Windows 11 / 10 宿主系统
        │
WSL 引擎(wsl.exe、WslService)
        │
Linux 内核(跑在轻量虚拟机里,我机器上是 6.18.54.1-1)
        │
Ubuntu 26.04 用户空间(bash、apt、ROS 2 Lyrical)
        │
WSLg(Wayland 合成器,把窗口直接摆到 Windows 桌面上)

从上往下看,我们的操作其实分属不同楼层。最踏实的做法,是先记住哪条命令该在哪一层敲:

在 Windows 的 PowerShell 里敲在 WSL 的 Ubuntu 里敲
wsl -l -vsudo apt update
wsl --update --web-downloadsystemctl --user ...
wsl --install --from-file x.wslros2 run turtlesim ...
wsl --manage Ubuntu --move D:\WSLglxinfo -B
wsl --shutdownwsl.exe --shutdown(唯一的特例)

后面反复出现的报错,绝大多数都只是“在错误的楼层敲了正确的命令”而已。

一句话判断

命令里带 wsl 前缀的,基本都在 Windows 的 PowerShell 里敲;apt、systemctl、ros2 run 这类,则在 WSL 的 Ubuntu 里敲。

和装一台真机 Ubuntu 相比 ​

WSL 并不是唯一的选择,把 Ubuntu 直接装到硬盘上(单系统或双系统)也是一条路。两者差别如下:

对比项真机安装 UbuntuWSL
本质一台完整的电脑Windows 里的轻量 Linux 子系统
磁盘占用几十 GB 起几个 GB 起
开机速度重启并切换系统一两秒
和 Windows 传文件靠分区挂载或网络共享直接访问 /mnt/c
图形界面完整桌面,装完就有单个程序开箱即用,完整桌面要折腾
快照回滚可用备份工具整机还原没有,弄坏了只能重装

我的判断是:只想跟着教程跑通 ROS 2、写几个节点,WSL 完全够用,而且比装双系统顺手得多;如果想要一台“随便怎么折腾都能救回来”的机器,那就得自己养成导出备份的习惯(第二章 · WSL 安装与配置踩坑会讲 wsl --export),或者干脆用一台独立的机器。

1.3 ROS 是什么 ​

ROS 不是操作系统 ​

ROS 的全称是 Robot Operating System,中文常译作“机器人操作系统”。这个叫法很有迷惑性:ROS 并不是一个操作系统,它不能独立安装在裸机上,而是运行在操作系统(通常是 Ubuntu)之上的一套开源机器人软件开发框架。更准确地说,ROS 本身是可以安装在现有操作系统(Linux、Windows、Mac)之上的一套软件库和工具集。

为什么机器人软件需要这样一套框架?因为一个稍微像样的机器人程序,往往由很多独立的部分组成:读取激光雷达和相机数据、处理感知、做运动规划、控制电机、与人交互……如果每个模块都自己写一套和别人通信的办法,整个系统会迅速变成一团乱麻。ROS 要解决的正是这个问题:它规定了一套统一的通信机制,并提供了大量现成的工具和功能包,让开发者可以专心写自己的那一部分,其余交给生态。

核心概念:节点与通信 ​

ROS 里有两个必须最先建立印象的概念:

  • 节点(node):一个可以独立运行的程序模块。整个机器人系统可以看作许多节点协作组成的“网络”。
  • 通信方式:节点之间通过话题(topic)、服务(service)、动作(action)等方式交换消息(message),消息就是节点间传递的数据包。

打个比方:传感器节点像是不断播报路况的广播电台(话题),导航节点像是收听广播的司机;而当你需要打车时那种“一问一答”的交互(服务),又和广播完全不同。这套通信机制的细节会在第六章 · ROS 2 体验与系统架构展开,这里先记住“节点 + 通信”这个总框架即可。

从 ROS 1 到 ROS 2 ​

ROS 起源于 2007 年斯坦福大学的一个机器人项目,随后由 Willow Garage 公司推动,逐渐发展成全球机器人研究界的事实标准,积累了庞大的生态。不过随着机器人应用走向工业化和复杂化,ROS 1 的一些先天设计问题开始暴露:

  • 通信依赖一个中心节点 roscore,它一旦宕机,整个系统就瘫痪;
  • 以单机为主,多机分布式和实时性支持不足;
  • 几乎没有安全机制,难以满足工业级要求。

于是社区从 2014 年前后开始重新设计,2017 年发布了 ROS 2 的第一个正式发行版。ROS 2 不是 ROS 1 的小修小补,而是一次架构级的重写。今天,ROS 1 已经停止维护(最后一个发行版是 2020 年的 Noetic),新项目都应当基于 ROS 2。这套笔记讲的也是 ROS 2。

1.4 ROS 1 与 ROS 2 的主要区别 ​

把上面的要点归纳成一张对比表,方便查阅:

对比项ROS 1ROS 2
通信机制自研 TCPROS/UDPROS基于 DDS 标准
中心节点依赖 roscore去中心化,无需主节点
实时性不支持可通过 DDS 配置支持
多机分布式支持较弱原生良好支持
安全机制几乎没有内置(如 SROS2)
支持平台主要 LinuxLinux/Windows/macOS 等

对学习者而言,这些区别并不需要现在就全部弄懂。你只需要记住一个大方向:学 ROS 2。后面出现的所有命令和示例,都默认运行在 ROS 2 之上。

1.5 ROS 2 与 Ubuntu 版本的搭配 ​

ROS 2 和 Ubuntu 一样,也有发行版的概念,而且两者高度绑定:官方每两年发布一个 ROS 2 的 LTS 版本,与当年度 Ubuntu 的 LTS 版本一一对应。最常用的组合如下:

Ubuntu 版本ROS 2 发行版说明
20.04(2020 LTS)Foxy(2020 LTS)较旧,已停止维护
22.04(2022 LTS)Humble(2022 LTS)目前最主流,教程最多
24.04(2024 LTS)Jazzy(2024 LTS)最新,适合新硬件
26.04(2026 LTS)Lyrical(2026 LTS)这套笔记使用的组合

给初学者的建议很明确:Ubuntu 22.04 + ROS 2 Humble 是目前资料最全、社区最活跃、兼容性问题最少的组合。如果你的电脑比较新,或者像我一样用 WSL 装了 26.04,那就跟着 26.04 + Lyrical 走;后面给出的安装命令也都是以 Lyrical 为例。

最重要的原则:不要混搭

比如在 Ubuntu 20.04 上硬装 Humble,或在 22.04 上装 Foxy,往往会遇到一堆莫名其妙的编译错误,而问题根源只是版本不对。版本搭配对了,后面能少走一半弯路。

等你在第四章 · Ubuntu 常用命令学会打开终端之后,可以用 lsb_release -a 这条命令随时查看自己系统的 Ubuntu 版本。

概念理清了,路线也定了,接下来就该动手。下一篇是第二章 · WSL 安装与配置踩坑,把 WSL、Ubuntu、中文环境和图形界面一步步装起来;装好环境之后,再进入第三章 · ROS 2 安装与验证,把 ROS 2 真正跑起来。

用 VitePress 搭建 · 托管在 GitHub Pages