尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Win11下通过WSL2搭建ROS2开发环境:从原理到实践

Win11下通过WSL2搭建ROS2开发环境:从原理到实践 1. 项目概述为什么要在Win11上折腾Linux与ROS如果你是一名机器人、自动驾驶或嵌入式领域的开发者或者是一名对前沿技术充满好奇的学生那么“ROS”这个词对你来说一定不陌生。ROS机器人操作系统早已成为这个领域的“普通话”。然而很多人的主力开发机是Windows而ROS的原生支持主要在Linux尤其是Ubuntu上。这就导致了一个经典的开发困境要么装双系统来回重启要么用虚拟机忍受性能损耗和复杂的网络配置。Windows Subsystem for Linux 2的出现彻底改变了这个局面。它不再是那个“玩具”般的WSL1而是一个在Windows内核上直接运行的、完整的Linux虚拟机拥有近乎原生的性能。特别是随着Windows 11的普及WSL2的安装和体验已经变得异常丝滑。将Ubuntu 22.04 LTS长期支持版通过WSL2安装在Win11上再在其上部署ROS 2 Humble Hawksbill或ROS 1 Noetic就构建了一个近乎完美的“混合开发环境”你既能享受Windows的办公、娱乐生态和强大的硬件兼容性又能获得一个纯净、高效的Linux命令行环境来运行ROS。这个项目就是带你一步步打通这个任督二脉。整个过程看似步骤不少但每一步都有其明确的目的我会详细解释“为什么这么做”而不仅仅是“怎么做”。最终你将获得一个开箱即用、能直接编译运行ROS代码的Linux环境并且这个环境与你的Windows文件系统无缝互通你可以用VSCode在Windows下编辑代码在WSL的Ubuntu里一键编译运行效率提升不止一个档次。2. 核心思路与方案选型WSL2为何是当前最优解在开始动手前我们有必要厘清几种常见的跨平台开发方案并理解为什么WSL2是当下在Windows上进行Linux/ROS开发的首选。2.1 主流方案对比与WSL2的优势传统的方案主要有三种双系统、虚拟机和云服务器。双系统在物理机上安装Windows和Linux两个操作系统通过引导菜单选择启动。它的优点是性能无损硬件驱动完美。但缺点极其明显需要分区破坏现有数据风险高每次切换都需要重启开发流程被强行打断两个系统间的文件共享需要通过特定分区不够便捷。虚拟机使用VMware、VirtualBox等软件在Windows上模拟一台完整的Linux电脑。它的优点是隔离性好可以随意创建快照和克隆。但缺点在于性能开销大尤其是图形和I/O性能资源占用高同时跑两个完整系统与宿主机之间的文件共享、网络配置、剪贴板同步等都需要额外设置体验割裂。云服务器租用云端的Linux虚拟机。优点是不占用本地资源随时随地可访问。缺点是对网络依赖极高延迟和带宽会影响开发体验需要持续付费图形化应用如Rviz、Gazebo的远程桌面体验通常不佳。WSL2巧妙地规避了上述方案的痛点。它不是一个传统的虚拟机管理器而是Windows内核的一个功能组件。WSL2使用了一个高度优化的、轻量级的虚拟机来运行一个真正的Linux内核。这意味着近乎原生的性能特别是文件I/O性能在访问WSL内部文件时极快。经过实测编译大型ROS工作空间的速度与物理机安装的Ubuntu相差无几。无缝的系统集成文件互访你可以在Windows资源管理器中直接访问\\wsl$\Ubuntu-22.04路径下的Linux文件也可以在Linux中使用/mnt/c/Users/YourName这样的路径访问Windows的C盘。这是最杀手级的功能。网络互通Windows和WSL共享同一个网络栈。你可以从Windows用localhost:8080访问WSL中运行的服务反之亦然无需任何复杂端口映射。VSCode深度集成安装官方“Remote - WSL”扩展后可以在Windows的VSCode里直接打开WSL中的文件夹所有插件和终端环境自动切换到WSL上下文体验如同在本地开发。极低的资源开销WSL2的虚拟机是动态分配内存和CPU的闲置时资源占用极低。对于ROS开发而言WSL2提供了最接近原生Linux的体验同时保留了Windows主系统的所有便利。尤其是运行ROS 2其大多数核心工具和功能都能完美运行。2.2 版本选择为什么是Ubuntu 22.04 LTS和ROS 2 HumbleUbuntu 22.04 LTSLTS代表“长期支持”官方提供5年的安全更新和维护。对于开发环境稳定压倒一切。22.04是当前最新的LTS版本拥有最新的软件包和较好的硬件支持是ROS 2 Humble的官方推荐系统。ROS 2 Humble Hawksbill这是ROS 2的LTS版本支持周期到2027年5月。ROS 2是ROS的未来它彻底重构了底层架构采用DDS作为通信中间件在实时性、安全性和跨平台支持上远超ROS 1。对于新项目和学习者直接从ROS 2开始是更明智的选择。当然如果你有维护ROS 1 (Noetic) 项目的需求我们也会涵盖安装方法。注意虽然理论上可以安装带图形界面的UbuntuWSLg支持但对于ROS开发我们强烈建议只安装命令行版本。图形化的ROS工具如Rviz、Gazebo我们可以通过配置在Windows端直接显示这比在WSL内运行一个完整的Linux桌面更高效、更稳定。3. 实操全流程从零搭建Win11WSL2ROS2环境接下来我们进入手把手实操环节。请严格按照顺序操作我会解释每一个步骤的意图。3.1 第一步启用Windows功能与安装WSL2内核这是搭建地基的步骤大部分操作只需一次。以管理员身份打开PowerShell。在Windows搜索栏输入“PowerShell”右键点击“Windows PowerShell”或“终端”选择“以管理员身份运行”。一次性启用所需功能。在PowerShell中执行以下命令dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart第一条命令启用“适用于Linux的Windows子系统”功能。第二条命令启用“虚拟机平台”功能这是WSL2的依赖。执行后强烈建议立即重启电脑以确保功能完全生效。设置WSL2为默认版本。重启后再次以管理员身份打开PowerShell输入wsl --set-default-version 2这个命令将后续新安装的Linux发行版默认设置为WSL2。安装WSL2 Linux内核更新包。这是一个独立的MSI安装包提供了WSL2所需的Linux内核组件。即使系统提示你已经是最新也建议访问微软官方文档下载并安装最新版内核更新包以确保最佳兼容性和性能。3.2 第二步安装Ubuntu 22.04 LTS发行版现在我们来安装Linux系统本身。微软提供了多种方式最推荐的是通过Windows应用商店。打开Microsoft Store。在开始菜单搜索“Microsoft Store”并打开。搜索并安装Ubuntu。在商店内搜索“Ubuntu 22.04 LTS”。注意要认准由“Canonical Group Limited”发布的官方版本。点击“获取”进行安装。安装过程会自动下载一个几百MB的压缩包。首次启动与初始化。安装完成后在开始菜单找到“Ubuntu 22.04 LTS”并点击启动。第一次启动会进行解压和初始化需要几分钟。完成后系统会提示你设置一个UNIX用户名和密码。用户名建议使用小写字母不要包含空格。这个用户将是Linux系统中的管理员sudo用户。密码输入时屏幕上不会有任何显示这是UNIX终端的正常行为输入完毕后按回车即可。请务必记住这个密码后续执行sudo命令时需要用到。验证WSL版本。初始化完成后Ubuntu终端会打开。我们首先验证一下它是否运行在WSL2模式下。在Ubuntu终端里其实不需要做什么。我们回到Windows的PowerShell非管理员也可输入wsl -l -v你会看到类似下面的输出NAME STATE VERSION * Ubuntu-22.04 Running 2确保你的Ubuntu发行版后面的VERSION是2。如果是1可以执行wsl --set-version Ubuntu-22.04 2进行转换。3.3 第三步配置Ubuntu系统基础环境一个干净的系统需要先进行基础配置为安装ROS做准备。更新软件源列表。在Ubuntu终端中首先运行更新命令这能确保后续安装的软件都是最新的。sudo apt update sudo apt upgrade -ysudo表示以管理员权限执行。apt update是刷新软件包索引apt upgrade是升级所有可升级的软件包。-y参数表示自动确认所有提示。安装一些基础开发工具。这些工具在后续编译ROS或其他软件时可能会用到。sudo apt install -y build-essential curl wget git python3-pip配置Shell环境可选但推荐。默认的bash shell已经够用但你可以选择安装更现代的zsh和oh-my-zsh来获得更好的自动补全和主题体验。这不是必须步骤但很多开发者喜欢。sudo apt install -y zsh sh -c $(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh) # 安装过程中会提示是否将zsh设为默认shell输入y确认。3.4 第四步安装ROS 2 Humble Hawksbill这是核心步骤。我们将按照ROS官方推荐的方式通过APT仓库安装。设置软件源。你需要将ROS 2的APT仓库添加到系统的软件源列表中。sudo apt install -y software-properties-common sudo add-apt-repository universe然后添加ROS 2的GPG密钥和仓库。这里使用国内USTC镜像源以加速下载如果你在国外可以使用官方源packages.ros.org。sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.ustc.edu.cn/ros2/ubuntu $(. /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null更新软件源并安装ROS 2。添加新源后必须再次更新软件列表。sudo apt update安装ROS 2基础包。对于桌面用户推荐安装“桌面版”它包含了ROS、RViz、示例和教程。sudo apt install -y ros-humble-desktop这个安装过程会下载约800MB的软件包耗时取决于你的网络速度。请耐心等待。配置环境变量。安装完成后ROS的命令如ros2还无法直接使用因为其可执行文件路径没有被添加到Shell的搜索路径中。我们需要“source”ROS的安装脚本。source /opt/ros/humble/setup.bash但这只对当前终端有效。为了每次打开新终端都能自动配置我们需要将这条命令添加到Shell的启动文件中。如果你用的是bash编辑~/.bashrc文件echo source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc如果你用的是zsh编辑~/.zshrc文件echo source /opt/ros/humble/setup.zsh ~/.zshrc source ~/.zshrc安装ROS编译工具colcon。colcon是ROS 2推荐的构建工具用于编译你的工作空间。sudo apt install -y python3-colcon-common-extensions验证安装。现在ROS 2应该已经安装成功了。让我们运行几个命令来验证。ros2 --version # 应该输出类似ros2 version 2.0.0运行一个经典的“小海龟”演示。首先在一个终端启动模拟器节点ros2 run turtlesim turtlesim_node你会看到Windows桌面上弹出一个蓝色背景、带有一只小海龟的窗口。这就是WSLg在起作用它自动将WSL内的图形应用转发到了Windows桌面。然后在另一个Ubuntu终端新开一个WSL窗口启动控制节点ros2 run turtlesim turtle_teleop_key在这个终端窗口激活的状态下使用键盘上的方向键你应该可以控制小海龟移动。恭喜你ROS 2环境搭建成功3.5 第五步安装ROS 1 Noetic可选供遗留项目使用如果你的项目或学习资料仍基于ROS 1可以按照以下步骤安装ROS Noetic。注意ROS 1和ROS 2可以共存于同一系统但它们的命令和环境是独立的。设置ROS 1软件源。sudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654安装ROS 1桌面完整版。sudo apt update sudo apt install -y ros-noetic-desktop-full配置环境变量。同样需要将其添加到Shell配置中注意与ROS 2区分。echo source /opt/ros/noetic/setup.bash ~/.bashrc # 或 ~/.zshrc source ~/.bashrc为了便于切换你可以创建两个别名alias。编辑~/.bashrc或~/.zshrc在末尾添加alias ros1envsource /opt/ros/noetic/setup.bash alias ros2envsource /opt/ros/humble/setup.bash这样在终端中输入ros1env或ros2env就可以快速切换到对应的ROS环境。4. 高级配置与开发环境优化基础环境搭好了但要让它成为一个高效的生产力工具还需要一些优化配置。4.1 配置图形界面支持WSLg与X11转发WSLg是微软官方提供的WSL图形界面支持在Windows 11上默认启用且效果很好正如我们运行turtlesim时所见。但有时你可能需要更精细的控制或者使用第三方X Server。使用WSLg推荐无需任何配置开箱即用。环境变量DISPLAY会自动设置为:0。使用VcXsrv等第三方X Server如果你遇到WSLg兼容性问题可以安装VcXsrv。在Windows端启动XLaunch配置时务必勾选“Disable access control”。然后在WSL终端中设置export DISPLAY$(cat /etc/resolv.conf | grep nameserver | awk {print $2}):0这条命令会自动获取Windows主机的IP并设置显示。实操心得对于ROS开发99%的图形工具Rviz, Gazebo, rqt在WSLg下都能完美运行。只有遇到极少数特定硬件的OpenGL加速问题时才需要考虑备用方案。优先信任WSLg。4.2 实现Windows与WSL的无缝文件编辑这是WSL开发体验的精华所在。我们使用VSCode。在Windows上安装VSCode。安装“Remote - WSL”扩展。在VSCode的扩展商店搜索并安装。在WSL中连接。在Ubuntu终端中进入你的项目目录然后输入code .。VSCode会自动启动或切换到一个连接到WSL环境的窗口。此时左下角会显示“WSL: Ubuntu-22.04”。享受无缝开发在这个VSCode窗口里所有操作打开终端、运行调试、使用插件都发生在WSL的Linux环境中。你可以直接编辑Linux文件系统的代码而编译命令就在集成的终端里执行。4.3 网络与性能调优内存与CPU限制WSL2默认会动态占用最多50%的物理内存和CPU核心。如果你需要限制它例如在内存较小的机器上可以在用户目录C:\Users\你的用户名\下创建或编辑.wslconfig文件[wsl2] memory4GB # 限制最大内存为4GB processors2 # 限制使用2个CPU核心 localhostForwardingtrue修改后需要在PowerShell中执行wsl --shutdown关闭WSL再重新启动Ubuntu生效。镜像加速如前所述在安装ROS时使用国内镜像源能极大提升速度。对于Ubuntu本身的apt源也可以更换为国内镜像如阿里云、清华源修改/etc/apt/sources.list文件即可。5. 常见问题与故障排查实录即使按照步骤操作你也可能会遇到一些问题。这里记录了一些常见坑点及其解决方案。5.1 安装阶段问题问题wsl --install命令无效或报错。排查Windows版本可能过旧。WSL2需要Windows 10版本 2004内部版本19041或更高Windows 11则完全支持。请通过“设置”-“系统”-“关于”查看你的Windows规格。解决升级Windows到最新版本。对于无法升级的旧系统可以尝试手动启用“适用于Linux的Windows子系统”和“虚拟机平台”这两个Windows功能。问题安装Ubuntu时启动后卡在“Installing...”或报错“WslRegisterDistribution failed”。排查通常是网络问题导致下载的发行版包损坏或与某些安全软件、虚拟化软件冲突。解决重置WSL在PowerShell运行wsl --unregister Ubuntu-22.04会删除所有数据然后重新从商店安装。关闭第三方杀毒软件或防火墙的实时防护再试。确保BIOS中已启用虚拟化技术Intel VT-x / AMD-V。5.2 ROS环境与运行问题问题运行ros2命令提示“command not found”。排查环境变量未正确配置。解决确保已经执行了source /opt/ros/humble/setup.bash并已将其添加到~/.bashrc或~/.zshrc中。添加后务必source一下对应的配置文件或重新打开终端。问题turtlesim窗口无法弹出或提示“Qt: Failed to create XCB context...”。排查图形界面WSLg未正常工作或DISPLAY变量设置错误。解决首先确认Windows 11已更新到较新版本22H2之后对WSLg支持更好。在WSL中运行echo $DISPLAY正常应输出:0。如果不是尝试安装并配置VcXsrv作为备用方案。更新WSL内核在PowerShell运行wsl --update。问题编译ROS包时colcon build报错提示找不到包或依赖。排查工作空间未正确“source”或依赖未安装。解决在编译前确保已经source /opt/ros/humble/setup.bash。在ROS工作空间的src目录下运行rosdep install --from-paths . --ignore-src -r -y来安装所有缺失的依赖。你可能需要先安装rosdepsudo apt install python3-rosdep2并初始化sudo rosdep init rosdep update。5.3 系统与性能问题问题WSL2磁盘占用越来越大。排查WSL2使用虚拟硬盘文件ext4.vhdx不会自动收缩。解决可以手动压缩。首先在PowerShell中关闭WSLwsl --shutdown。然后以管理员身份打开PowerShell运行磁盘优化命令diskpart # 在diskpart提示符下 select vdisk fileC:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited...\LocalState\ext4.vhdx attach vdisk readonly compact vdisk detach vdisk exit注意替换为你的实际vhdx文件路径。问题在/mnt/c下的Windows文件操作速度慢。排查这是WSL2的一个已知特性跨文件系统9P协议的I/O性能不如WSL内部文件系统。解决将项目代码放在WSL的Linux文件系统内例如~/projects/。利用VSCode的Remote-WSL功能进行编辑这样既能享受Linux文件系统的性能又能使用Windows下的强大编辑器。经过以上步骤你应该已经拥有了一个功能强大、配置完善的Win11 WSL2 Ubuntu 22.04 ROS 2开发环境。这个环境将Windows的易用性与Linux/ROS的生态强大性结合了起来足以应对从学习到中等规模项目开发的绝大多数场景。记住关键不在于一次配置成功而在于理解每个步骤背后的原理这样在遇到新问题时你才能有自己的排查思路和解决能力。
返回列表