FEATURED · 精选文章

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

发布时间 / 2026/8/8 2:30:03
来源 / 创域科博编辑部
栏目 / 资讯中心
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 2WSL 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的虚拟化功能。在开始前请确保系统版本Windows 11版本 21H2 或更高。你可以在“设置”-“系统”-“关于”中查看。低于此版本可能无法获得最佳支持。虚拟化已开启这通常在BIOS/UEFI设置中。对于大多数现代电脑默认是开启的。你可以通过任务管理器来验证按CtrlShiftEsc打开任务管理器切换到“性能”标签页查看CPU部分如果“虚拟化”显示为“已启用”则说明没问题。如果未启用你需要重启电脑进入BIOS/UEFI设置开机时按F2、Del、F10等键因主板而异找到类似“Intel Virtualization Technology (VT-x)”或“AMD-V”的选项将其设置为“Enabled”。2.3 为什么是Ubuntu 22.04 LTS和ROS 2 HumbleUbuntu 22.04 LTS (Jammy Jellyfish)LTS代表长期支持官方提供5年的维护更新。对于开发环境稳定性远高于追求最新版本。22.04是当前最新的LTS版本拥有最新的工具链和库社区支持也最好。ROS 2 Humble官方就是为Ubuntu 22.04构建的这是“官配”能最大程度避免依赖库冲突。ROS 2 Humble HawksbillROS 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终端管理员身份使用命令行。以管理员身份打开PowerShell或Windows终端。在开始菜单搜索“PowerShell”右键选择“以管理员身份运行”。启用WSL功能输入以下命令并回车。这个命令会启用“适用于Linux的Windows子系统”这个可选功能。dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart启用虚拟机平台功能输入以下命令并回车。这是WSL 2的依赖。dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart重启电脑。这是必须的否则更改不会生效。设置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还很粗糙。我们需要进行一些优化配置。更新软件源和升级系统在Ubuntu终端中依次执行sudo apt update sudo apt upgrade -y这能确保你获得最新的安全补丁和软件包。配置Windows Terminal作为默认终端强烈推荐Windows Terminal比传统的命令行窗口好用到不知道哪里去支持多标签、分屏、丰富的主题和配置。从Microsoft Store安装“Windows Terminal”。安装后打开设置在“启动”-“默认配置文件”中选择“Ubuntu 22.04”。这样以后打开终端就直接进入WSL环境了。文件系统互访这是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下的代码。安装基础开发工具在安装ROS之前先装一些必备工具。sudo apt install -y build-essential cmake git curl wget python3-pip python3-venv4. 核心任务在WSL 2中安装ROS 2 Humble终于来到重头戏。ROS 2的安装已经非常规范化但其中一些细节决定了成败。4.1 设置软件源与密钥ROS官方提供了APT仓库我们需要将其添加到Ubuntu的软件源列表中。确保支持universe仓库Ubuntu的universe仓库包含了许多社区维护的软件ROS的一些依赖在其中。sudo apt install software-properties-common sudo add-apt-repository universe添加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。也可以手动下载这个文件然后复制到指定位置。添加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 -yros-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 安装额外的依赖和工具为了让开发体验更完整我们还需要安装一些工具。colcon构建工具ROS 2推荐使用colcon来构建工作空间。sudo apt install python3-colcon-common-extensions -yROS编译依赖安装一些常用的编译依赖。sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential -y初始化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然后在第二个终端里按方向键你会在第三个终端里看到不断刷新的几何数据linear和angular向量这就是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驱动。根据你的显卡型号NVIDIA / AMD / Intel去官网下载并安装适用于WSL的GPU驱动。例如对于NVIDIA你需要下载并安装 NVIDIA CUDA on WSL 的驱动 。在WSL 2的Ubuntu中安装对应的GPU库。对于NVIDIAsudo 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中。在Windows端安装usbipd以管理员身份打开PowerShell运行winget install --interactive --exact dorssel.usbipd-win在WSL 2Ubuntu端安装客户端工具sudo apt install linux-tools-generic hwdata sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20使用流程在Windows PowerShell管理员中列出USB设备usbipd wsl list找到你的设备总线ID然后将其绑定到WSLusbipd 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] memory4GB # 限制最大内存为4GB processors4 # 限制使用4个CPU核心 localhostForwardingtrue修改后需要在PowerShell中执行wsl --shutdown关闭WSL再重新启动生效。7. 集成开发环境IDE配置VS Code WSL 2命令行固然强大但一个好的IDE能极大提升开发效率。Visual Studio Code WSL远程扩展是绝配。安装VS Code从官网下载安装。安装“Remote - WSL”扩展在VS Code的扩展商店搜索并安装。连接WSL点击VS Code左下角的绿色远程连接图标选择“New WSL Window”然后选择你安装的Ubuntu发行版。VS Code会在WSL环境中启动一个服务器并将界面连接到它。此时你打开的文件夹、运行的终端都完全在WSL环境内。安装ROS扩展在连接到WSL的VS Code中安装“ROS”扩展由Microsoft发布。这个扩展提供了ROS工作空间识别、package.xml和CMakeLists.txt的智能感知、ROS节点启动配置等强大功能。打开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平台的机器人开发者打开了一扇全新的大门。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻