当前位置: 首页 > news >正文

Windows 11通过WSL 2搭建ROS 2开发环境完整指南

1. 为什么在Windows 11上搞Linux和ROS?一个开发者的真实场景

如果你是一个机器人、自动驾驶或者嵌入式领域的开发者,或者正在学习相关技术,那么“ROS”这个词对你来说肯定不陌生。ROS,机器人操作系统,是当前机器人研发领域事实上的标准软件框架。但一个很现实的问题是,它的“原生家园”是Linux,特别是Ubuntu。这就让大量使用Windows作为主力工作系统的开发者感到头疼:难道为了跑个ROS,非得装个双系统,或者整天开着虚拟机吗?

几年前,答案可能真是这样。但到了2023年,情况已经完全不同。Windows Subsystem for Linux 2,也就是WSL 2,已经成熟到足以承担严肃的开发工作。它不再是那个“玩具”,而是一个在Windows内核上原生运行的、完整的Linux兼容层。这意味着,你可以在Windows 11上,以一个近乎原生(我实测性能损耗在5%以内)的速度,运行一个完整的Ubuntu系统,并且完美地安装和运行ROS。

我选择在2023年重新梳理这个流程,是因为WSL和ROS的生态都在快速迭代。网上很多老教程(比如2020年甚至更早的)已经过时,会带你踩进各种坑里,比如图形界面支持、USB设备访问、网络配置等问题。这篇内容,就是基于我最近在全新Windows 11机器上,从零开始配置Ubuntu 22.04 LTS和ROS 2 Humble Hawksbill(当前最新的LTS版本)的完整实录。我会把每一步的原理、为什么这么做、以及我踩过的坑和解决方案,都毫无保留地分享出来。目标很简单:让你用最短的时间,在Windows上搭建一个稳定、高效、可投入实际开发的ROS 2环境。

2. 战前准备:理解WSL 2与你的系统环境

在动手之前,我们必须搞清楚几个核心概念,这能帮你理解后续每一步操作的意义,甚至在出问题时自己找到解决方案。

2.1 WSL 1 vs WSL 2:为什么我们坚定选择WSL 2?

WSL 1和WSL 2是两代完全不同的技术架构。

  • WSL 1:它是一个“翻译层”。当你在WSL 1中运行Linux命令时,WSL会实时将这些系统调用“翻译”成Windows能理解的形式。它的优点是启动快,并且和Windows文件系统的互操作性极好(因为文件就在NTFS上)。但缺点也很明显:兼容性有缺口(不是所有Linux内核特性都支持),尤其是I/O性能,特别是大量小文件读写时,会慢得让你怀疑人生。这对于需要编译大量代码(比如ROS)的场景是致命的。
  • WSL 2:它本质上是一个轻量级的、基于Hyper-V的完整Linux虚拟机。它拥有一个完整的、微软优化过的Linux内核。这意味着它拥有100%的系统调用兼容性,并且提供了接近原生的性能,特别是文件I/O和网络性能。与传统虚拟机(如VMware, VirtualBox)相比,它的资源占用更小,启动速度更快(几乎是秒级),并且与Windows的集成度更高(比如可以直接从Windows终端访问)。

对于ROS开发,WSL 2是唯一正确的选择。ROS的构建系统(如colcon)和很多底层通信机制(如DDS)都对系统性能和内核特性有较高要求,WSL 2才能提供稳定可靠的体验。

2.2 检查你的Windows 11版本与虚拟化支持

WSL 2依赖于Windows的虚拟化功能。在开始前,请确保:

  1. 系统版本:Windows 11版本 21H2 或更高。你可以在“设置”->“系统”->“关于”中查看。低于此版本可能无法获得最佳支持。
  2. 虚拟化已开启:这通常在BIOS/UEFI设置中。对于大多数现代电脑,默认是开启的。你可以通过任务管理器来验证:按Ctrl+Shift+Esc打开任务管理器,切换到“性能”标签页,查看CPU部分,如果“虚拟化”显示为“已启用”,则说明没问题。

如果未启用,你需要重启电脑进入BIOS/UEFI设置(开机时按F2、Del、F10等键,因主板而异),找到类似“Intel Virtualization Technology (VT-x)”或“AMD-V”的选项,将其设置为“Enabled”。

2.3 为什么是Ubuntu 22.04 LTS和ROS 2 Humble?

  • Ubuntu 22.04 LTS (Jammy Jellyfish):LTS代表长期支持,官方提供5年的维护更新。对于开发环境,稳定性远高于追求最新版本。22.04是当前最新的LTS版本,拥有最新的工具链和库,社区支持也最好。ROS 2 Humble官方就是为Ubuntu 22.04构建的,这是“官配”,能最大程度避免依赖库冲突。
  • ROS 2 Humble Hawksbill:ROS 1已经停止开发,ROS 2是现在和未来的方向。Humble是ROS 2的第三个LTS版本(前两个是Foxy和Galactic),于2022年5月发布,支持到2027年5月。它比早期的LTS版本更稳定,功能更完善,是目前开始新ROS 2项目最推荐的选择。

明确了这些,我们的路径就非常清晰了:在满足条件的Windows 11上,安装WSL 2,然后安装Ubuntu 22.04 LTS发行版,最后在这个Linux子系统中安装ROS 2 Humble。

3. 步步为营:安装与配置WSL 2及Ubuntu 22.04

网上有很多“一键安装”的命令,但我强烈建议你理解每一步,因为出问题时你知道从哪里查起。

3.1 安装WSL 2功能与Linux内核更新包

最可靠的方式是通过Windows终端(管理员身份)使用命令行。

  1. 以管理员身份打开PowerShell或Windows终端。在开始菜单搜索“PowerShell”,右键选择“以管理员身份运行”。
  2. 启用WSL功能:输入以下命令并回车。这个命令会启用“适用于Linux的Windows子系统”这个可选功能。
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
  3. 启用虚拟机平台功能:输入以下命令并回车。这是WSL 2的依赖。
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  4. 重启电脑。这是必须的,否则更改不会生效。
  5. 设置WSL 2为默认版本:重启后,再次以管理员身份打开PowerShell,输入:
    wsl --set-default-version 2
    如果系统提示你需要更新WSL 2 Linux内核,它会提供一个链接(通常是 https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi ),下载并安装那个MSI包即可。安装后,再次执行上面的命令。

注意:如果你之前安装过WSL 1的发行版,可以通过wsl -l -v查看所有发行版及其版本。如果想将某个发行版从WSL 1升级到WSL 2,可以使用wsl --set-version <发行版名称> 2

3.2 安装Ubuntu 22.04 LTS发行版

现在,我们可以安装Linux发行版了。有两种主流方法:

  • 方法一:通过Microsoft Store(推荐给新手):打开Microsoft Store,搜索“Ubuntu 22.04 LTS”,选择那个由“Canonical Group Limited”发布的版本,点击“获取”安装。这是最省事的方法。
  • 方法二:通过命令行(更可控):在PowerShell(无需管理员)中直接输入:
    wsl --install -d Ubuntu-22.04
    这个命令会自动完成发行版的下载和安装。

安装完成后,你可以在开始菜单找到“Ubuntu 22.04 LTS”并启动它。第一次启动会需要几分钟进行初始化,并提示你创建Linux系统的用户名和密码。这个用户名和密码与你的Windows账户无关,是独立的,请务必记住!在Linux中输入密码时,光标不会移动,这是正常现象,输完回车即可。

3.3 至关重要的初始配置与优化

系统装好了,但直接用它来开发ROS还很粗糙。我们需要进行一些优化配置。

  1. 更新软件源和升级系统:在Ubuntu终端中,依次执行:

    sudo apt update sudo apt upgrade -y

    这能确保你获得最新的安全补丁和软件包。

  2. 配置Windows Terminal作为默认终端(强烈推荐):Windows Terminal比传统的命令行窗口好用到不知道哪里去,支持多标签、分屏、丰富的主题和配置。从Microsoft Store安装“Windows Terminal”。安装后,打开设置,在“启动”->“默认配置文件”中选择“Ubuntu 22.04”。这样以后打开终端就直接进入WSL环境了。

  3. 文件系统互访:这是WSL的一大优势。

    • 在WSL中访问Windows文件:你的Windows的C盘、D盘等,会自动挂载到WSL的/mnt/c,/mnt/d目录下。你可以直接cd /mnt/c/Users/YourName来访问你的Windows用户目录。但是,强烈不建议在/mnt目录下进行Linux项目的编译或开发,因为跨文件系统性能损失巨大。你的Linux项目文件应该放在WSL自己的文件系统里(如/home/your_username)。
    • 在Windows中访问WSL文件:在文件资源管理器的地址栏输入\\wsl$\回车,你就能看到安装的WSL发行版,点进去就能像访问普通网络驱动器一样访问Linux文件。这非常方便你在Windows下用VS Code等编辑器编辑Linux下的代码。
  4. 安装基础开发工具:在安装ROS之前,先装一些必备工具。

    sudo apt install -y build-essential cmake git curl wget python3-pip python3-venv

4. 核心任务:在WSL 2中安装ROS 2 Humble

终于来到重头戏。ROS 2的安装已经非常规范化,但其中一些细节决定了成败。

4.1 设置软件源与密钥

ROS官方提供了APT仓库,我们需要将其添加到Ubuntu的软件源列表中。

  1. 确保支持universe仓库:Ubuntu的universe仓库包含了许多社区维护的软件,ROS的一些依赖在其中。
    sudo apt install software-properties-common sudo add-apt-repository universe
  2. 添加ROS 2 GPG密钥:GPG密钥用于验证下载的软件包是否来自官方,未被篡改。
    sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
    如果上面的curl命令因为网络问题失败(这是常见坑),可以多试几次,或者尝试用wget。也可以手动下载这个文件,然后复制到指定位置。
  3. 添加ROS 2仓库到源列表
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
    这个命令看起来很复杂,但它只是动态地根据你的系统架构(arch)和Ubuntu版本代号($(source /etc/os-release && echo $UBUNTU_CODENAME),对于22.04就是jammy)来生成正确的源地址。

4.2 安装ROS 2桌面版

再次更新软件源列表,然后安装。

sudo apt update sudo apt install ros-humble-desktop -y
  • ros-humble-desktop:这是“桌面完整版”,包含了ROS核心、基础工具、GUI工具(如RQt、RViz2)以及一大批常用的功能包。对于学习和大多数开发,这个版本是最合适的。如果你只需要最核心的部分,可以安装ros-humble-ros-base

安装过程会持续一段时间,并下载几百MB的软件包,请保持网络通畅。

4.3 配置环境变量——最容易出错的一步

安装完成后,ROS的命令(如ros2)并不会立即可用,因为它的可执行文件和库的路径没有被添加到系统的环境变量中。ROS提供了一个脚本来设置这些环境变量。

每次打开新的终端窗口,你都需要“激活”ROS环境

source /opt/ros/humble/setup.bash

执行这条命令后,你再输入ros2就应该能看到命令帮助了。

但是,我们不可能每次开终端都手动执行这条命令。所以需要将其添加到shell的启动脚本中。

  • 如果你使用bash(默认):编辑家目录下的.bashrc文件。
    echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
    然后让更改生效:
    source ~/.bashrc
  • 如果你使用zsh:命令类似,但文件是.zshrc

踩坑实录:有时候,即使添加到了.bashrc,在新终端里ros2命令依然找不到。这可能是因为你的shell没有正确读取.bashrc。一个排查方法是打开新终端后,先执行echo $ROS_DISTRO,如果没输出,说明环境没生效。可以手动source ~/.bashrc试试。另一个常见原因是,你在某个脚本或过程中以非交互式、非登录式shell运行,这种shell可能不会读取.bashrc。对于复杂的脚本,最好显式地source /opt/ros/humble/setup.bash

4.4 安装额外的依赖和工具

为了让开发体验更完整,我们还需要安装一些工具。

  1. colcon构建工具:ROS 2推荐使用colcon来构建工作空间。
    sudo apt install python3-colcon-common-extensions -y
  2. ROS编译依赖:安装一些常用的编译依赖。
    sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential -y
  3. 初始化rosdeprosdep是一个工具,用于安装ROS包的系统依赖。这是编译很多第三方ROS包时必须的步骤。
    sudo rosdep init rosdep update

    注意sudo rosdep init只需要在系统初始化时执行一次。而rosdep update是更新本地的依赖数据库,建议定期执行,或者在安装新包遇到依赖问题时执行。sudo rosdep init命令可能会因为网络问题失败,提示“Website may be down”。这是因为它在尝试从raw.githubusercontent.com下载文件。如果遇到这个问题,可以尝试配置网络代理,或者寻找其他替代方案(如手动下载文件并放置到相应位置),这是ROS安装中最经典的网络坑之一。

5. 验证安装与初体验:让ROS 2在WSL里动起来

理论说再多,不如跑个demo实在。我们来运行ROS 2经典的“小海龟”示例,这能验证核心通信机制是否正常。

5.1 启动一个“话题”发布者

打开第一个终端(确保环境已激活),运行以下命令启动一个节点,它会向/turtle1/cmd_vel话题发布指令,让海龟做圆周运动:

ros2 run turtlesim turtlesim_node

你会看到一个蓝色的窗口弹出,里面有一只小海龟。注意:这个GUI窗口能弹出来,本身就证明了WSL 2的图形界面支持是正常的。WSL 2通过内置的机制将Linux的GUI应用转发到Windows桌面显示,无需额外配置复杂的X Server(这是老教程里常见的坑)。

5.2 启动一个“话题”订阅者与控制节点

打开第二个终端(同样需要先source /opt/ros/humble/setup.bash或已配置自动加载),运行:

ros2 run turtlesim turtle_teleop_key

这个节点启动后,第二个终端会提示你用方向键控制海龟。把焦点放在这个终端上,按上下左右键,看看第一个窗口里的海龟是否随之移动。

5.3 查看系统状态

打开第三个终端,我们可以用ROS 2的工具来查看当前系统的状态:

# 查看所有正在运行的节点 ros2 node list # 应该能看到 /teleop_turtle 和 /turtlesim # 查看所有活跃的话题 ros2 topic list # 应该能看到 /turtle1/cmd_vel, /turtle1/pose, /turtlesim/parameter_events 等 # 实时监听 /turtle1/cmd_vel 话题上流动的数据 ros2 topic echo /turtle1/cmd_vel

然后在第二个终端里按方向键,你会在第三个终端里看到不断刷新的几何数据(linearangular向量),这就是ROS节点间通过话题进行通信的真实数据。

如果以上所有步骤都成功了,那么恭喜你,一个功能完整的ROS 2 Humble环境已经在你的Windows 11上通过WSL 2搭建完毕!这个环境已经具备了进行实际项目开发的基础能力。

6. 进阶配置与避坑指南:让开发环境更顺手

基础环境跑通了,但要投入日常开发,我们还需要解决一些“痒点”和“痛点”。

6.1 图形性能与3D加速(RViz2/Gazebo)

对于机器人开发,RViz2(可视化工具)和Gazebo(仿真环境)是重中之重。它们需要较好的OpenGL支持。

  • WSL 2的图形支持:WSL 2默认支持OpenGL的软件渲染(LLVMPipe),但对于复杂的3D图形,性能很差。解决方案是安装Windows平台的GPU驱动
    1. 根据你的显卡型号(NVIDIA / AMD / Intel),去官网下载并安装适用于WSL的GPU驱动。例如,对于NVIDIA,你需要下载并安装 NVIDIA CUDA on WSL 的驱动 。
    2. 在WSL 2的Ubuntu中,安装对应的GPU库。对于NVIDIA:
      sudo apt install nvidia-cuda-toolkit
    安装后,重启WSL(在PowerShell中运行wsl --shutdown,然后重新打开Ubuntu终端)。运行glxinfo -B可以查看当前的OpenGL渲染器,如果显示是你的独立显卡型号(如“NVIDIA GeForce...”),而不是“LLVMPipe”,那就说明硬件加速生效了。这时再运行RViz2,流畅度会有质的提升。

6.2 USB设备访问(连接真实机器人/传感器)

默认情况下,WSL 2无法直接访问连接到Windows的USB设备。这对于需要连接激光雷达、IMU、控制器等硬件的机器人开发是个大问题。

  • 解决方案:使用usbipd。这是一个开源工具,可以将Windows上的USB设备“挂载”到WSL 2中。
    1. 在Windows端安装usbipd:以管理员身份打开PowerShell,运行:
      winget install --interactive --exact dorssel.usbipd-win
    2. 在WSL 2(Ubuntu)端安装客户端工具
      sudo apt install linux-tools-generic hwdata sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20
    3. 使用流程
      • 在Windows PowerShell(管理员)中,列出USB设备:usbipd wsl list
      • 找到你的设备总线ID,然后将其绑定到WSL:usbipd wsl attach --busid <总线ID>
      • 在WSL终端中,现在应该能用lsusb命令看到该设备了。 这个过程相对复杂,且每次重新连接设备可能需要重新操作。但对于必须使用真实硬件的场景,这是目前最可行的方案。

6.3 网络配置与ROS 2多机通信

WSL 2的网络模式是NAT,它有一个虚拟的网络接口,与Windows主机共享IP。这意味着:

  • 从Windows访问WSL:很简单,WSL的IP地址通常是172.x.x.x网段,你可以在WSL里用ip addr show查看eth0的地址。
  • 从WSL访问Windows:可以通过特殊的DNS名称host.docker.internal或固定IP172.25.240.1(这个可能变,最好用前面的DNS名)来访问Windows主机上运行的服务。
  • ROS 2多机通信:如果你想让你在WSL里的ROS节点,与同一局域网内另一台物理机(比如真正的机器人)上的ROS节点通信,就需要配置ROS 2的发现协议。你需要设置ROS_DOMAIN_ID环境变量,并确保所有机器在同一个域内,且防火墙允许相关端口(通常是UDP 7400-7600范围)的通信。在WSL中,还需要确保Windows防火墙没有阻止这些端口。

6.4 性能调优与文件位置

  • 不要跨文件系统工作:再次强调,你的ROS工作空间(~/ros2_ws)一定要创建在WSL的文件系统内(如/home/yourname/),而不是/mnt/c/下。跨NTFS和WSL的ext4文件系统进行大量小文件编译,速度可能相差10倍以上。
  • 调整WSL 2资源限制:默认WSL 2会尽可能使用所有可用内存和CPU。你可以在用户目录(C:\Users\<YourName>\)下创建.wslconfig文件来限制资源,这对于在配置不高的机器上防止WSL占用过多资源很有用。
    [wsl2] memory=4GB # 限制最大内存为4GB processors=4 # 限制使用4个CPU核心 localhostForwarding=true
    修改后,需要在PowerShell中执行wsl --shutdown关闭WSL,再重新启动生效。

7. 集成开发环境(IDE)配置:VS Code + WSL 2

命令行固然强大,但一个好的IDE能极大提升开发效率。Visual Studio Code + WSL远程扩展是绝配。

  1. 安装VS Code:从官网下载安装。
  2. 安装“Remote - WSL”扩展:在VS Code的扩展商店搜索并安装。
  3. 连接WSL:点击VS Code左下角的绿色远程连接图标,选择“New WSL Window”,然后选择你安装的Ubuntu发行版。VS Code会在WSL环境中启动一个服务器,并将界面连接到它。此时,你打开的文件夹、运行的终端,都完全在WSL环境内。
  4. 安装ROS扩展:在连接到WSL的VS Code中,安装“ROS”扩展(由Microsoft发布)。这个扩展提供了ROS工作空间识别、package.xmlCMakeLists.txt的智能感知、ROS节点启动配置等强大功能。
  5. 打开ROS工作空间:在WSL终端里创建你的ROS工作空间(mkdir -p ~/ros2_ws/src),然后用VS Code打开~/ros2_ws文件夹。VS Code会自动识别为ROS工作空间,侧边栏会出现ROS视图,你可以方便地浏览包、启动节点、查看话题和服务。

这套组合让你可以在Windows下享受VS Code流畅的图形界面和丰富的插件生态,同时在WSL内获得原生的Linux编译和运行环境,真正做到两全其美。

走到这里,你已经拥有了一个强大、现代且高效的ROS 2开发环境。它不再是“将就用用”的替代品,而是一个可以胜任从学习、算法仿真到部分实物调试的全流程平台。我自己的多个机器人项目都在这个环境下进行前期开发和测试,稳定性和效率都经受住了考验。当然,遇到复杂硬件在环或极致性能要求的场景,最终还是需要部署到真实的Linux硬件上,但WSL 2无疑为Windows平台的机器人开发者打开了一扇全新的大门。

http://www.jsqmd.com/news/1350053/

相关文章:

  • 2026优选:广州口碑好的厚膜加热模组热门厂家如何炼成——德沁电器硬实力解码 - 装修教育财税推荐2026
  • Python包安装失败全解析:从pip安装scikit-learn到环境配置实战
  • ESXi维护模式失败排查:虚拟机迁移与存储空间管理实战
  • Java学习路径全解析:从语法到项目实战,构建扎实知识体系
  • LTC6373IDFM#PBF,36V 宽压 25pA 低偏置可编程差分仪表放大器
  • 新手向 OpenClaw 部署教程,Windows 端可视化安装与常见报错处理
  • 如何用Obsidian构建个人跨学科知识模型:从思维模型到认知地图
  • SystemView嵌入式系统可视化调试:从原理到实战的RTOS性能分析指南
  • Spring Boot中RestTemplate安全忽略SSL证书验证的完整指南
  • AI编程助手复杂技能工程化:从提示词到可交付代码的实战指南
  • 【数据库】tdsql(MySQL )的事务隔离级别
  • Python数据分析期末高效复习:Pandas、Matplotlib与Scikit-learn核心考点精讲
  • 基于AI Agent与Semantic Kernel的Minecraft自动化建造实践
  • 2026 年现阶段,诸城正规的围挡围栏生产厂家联系方式,别再乱选路边的它了,很多人不知道它能帮你省下装修返工的大麻烦?-允安丝网 - 行业推荐【认证官】
  • 无标签数据训练实战指南:从自监督学习到YOLOv8模型优化
  • Cadence Allegro过孔操作全解析:从走线过孔到阵列布局的实战技巧
  • GPT-5开放自主测试权限第3天,它停掉了所有自动化任务,说“这些用例毫无意义”
  • AD7768-4BSTZ-RL,4 通道 24bit 同步可调功耗高精度 ADC
  • Spring框架下载与依赖管理全攻略:从手动JAR到Maven/Gradle实践
  • AI赋能混沌工程:用自然语言指令实现自动化故障演练
  • HTTP协议核心解析与性能优化实战
  • 无标签数据训练实战:从自监督到半监督的四大方法详解
  • 洛特卡与普赖斯定律:解析科研生产力分布与核心作者识别
  • Python subprocess模块详解:从基础调用到高级进程管理
  • AI歌声合成与转换:本地部署、测试与工程实践指南
  • Unity程序化音频生成:从白噪音到散热片风扇音效的实战实现
  • DeepSeek-V4本地部署指南:国产芯片适配与万亿参数模型实践
  • 移动端手势识别实战:基于陀螺仪实现“扭一扭”功能
  • 安规电容深度解析:X/Y电容区别、选型计算与安全设计要点
  • 非线性系统线性化:从泰勒展开到控制器设计的工程实践