ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows 下用 WSL2 安装 ROS2 Humble 完整教程:从零到小乌龟跑通

Windows 下用 WSL2 安装 ROS2 Humble 完整教程:从零到小乌龟跑通 1. 为什么我建议在 Windows 下装 ROS2先想清楚再动手很多刚接触 ROS2 的朋友第一反应是“ROS2 不是 Linux 的东西吗Windows 能装”——能装而且现在生态比前几年成熟太多了。我最早是在 Ubuntu 16.04 上折腾 ROS1 的 Kinetic那会儿为了装个系统就得腾出一块硬盘双系统来回切换简直折磨。后来换到 Windows 11 WSL2 的方案体验完全不一样既能用 Windows 的日常办公和 IDE又能随时敲 ROS2 命令两边文件互通调试起来非常顺手。这篇教程面向的是想在 Windows 上把 ROS2 跑起来但又不想花太多时间在系统安装和环境配置上的朋友。不管你是准备做机器人比赛、搞课题研究还是单纯想入门机器人开发这套流程都能让你少踩很多坑。我测试过的组合是 Windows 11 WSL2Ubuntu 22.04 ROS2 Humble这也是目前最稳、资料最多、社区支持最完善的搭配。先说结论Windows 下装 ROS2主流方案有两个一个是原生安装Windows 直接装 ROS2 的 Windows 版本另一个是 WSL2 方案在 Windows 子系统里跑 Ubuntu再装 Ubuntu 版 ROS2。我强烈推荐 WSL2原因后面细说。接下来我直接把完整流程、命令、踩坑点全部摆出来你照着复制粘贴基本就能跑通。2. 方案选型原生安装 vs WSL2为什么我力推后者2.1 原生安装的问题在哪里ROS2 官方确实提供了 Windows 原生安装包Humble、Foxy 这些版本都有 Windows 版。但实际用下来问题不少首先依赖库的兼容性很头疼很多第三方工具包比如激光雷达驱动、相机驱动、导航栈里的部分组件要么没有 Windows 版要么编译时各种报错其次Windows 原生版的工具链如 colcon、vcstool配置起来相当麻烦需要手动装 Visual Studio、Python、Chocolatey 等一系列东西环境变量一不小心就乱了最后社区里大多数教程、示例、问题解答都是针对 Linux 环境的你遇到一个问题去搜索搜到的解决方案大概率是 Linux 命令在 Windows 原生环境下根本对不上号。我身边真有同事在 Windows 原生版上折腾了三天最后装一个点云处理库死活过不去换到 WSL2 之后一个小时搞定。所以如果你不是有特殊原因必须用 Windows 原生版我建议直接跳过。2.2 WSL2 方案为什么最舒服WSL2 本质上是一个轻量级虚拟机但用起来跟原生终端差不多。它的核心优势有三个第一兼容性拉满。你在 WSL2 里跑的是完整的 Ubuntu 内核所以所有针对 Linux 的 ROS2 教程、依赖库、驱动包它都能直接用。社区里 99% 的资料对你都是有效的。第二与 Windows 文件互通。Windows 的 C 盘、D 盘会以 /mnt/c、/mnt/d 的路径挂在 WSL2 里反过来 WSL2 里的文件也能通过 \wsl$\ 路径在 Windows 资源管理器里直接访问。这意味着你可以用 Windows 的 VSCode 编写代码然后在 WSL2 里编译运行两边无缝衔接。第三资源占用可控。WSL2 默认可以动态使用内存不用像双系统那样分配固定分区也不用像传统虚拟机那样预先分配一堆磁盘空间。而且它启动只要一两秒开个终端就能用关掉就释放资源非常轻量。2.3 版本选择Humble 是最好的起点ROS2 的发行版跟 Ubuntu 版本是有对应关系的Humble 对应 Ubuntu 22.04Foxy 对应 Ubuntu 20.04Jazzy 对应 Ubuntu 24.04。对新手来说我的建议是无脑选 Humble。原因有三点一是 Humble 是长期支持版LTS维护周期长到你学完基础、开始做项目的时候它仍然在更新二是它的资料最多你搜“Humble 安装”“Humble 教程”能找到的内容比 Foxy 和 Jazzy 加起来都多三是很多配套工具比如 Nav2、MoveIt、micro-ROS对 Humble 的适配最成熟。Jazzy 确实是新版本但太新了不少第三方库还在适配中遇到问题你搜到的解决方案可能还不够全。Foxy 则已经过了巅峰期虽然还能用但新项目没必要选它。小结一下Windows 11 WSL2 Ubuntu 22.04 ROS2 Humble这是目前最均衡的组合。接下来我按这个组合给你完整的安装步骤。3. Windows 环境准备这一步做不对后面全白搭3.1 启用 WSL2 的完整操作在开始之前先确认你的 Windows 版本。Windows 10 版本号在 2004 以上或者 Windows 11 都可以。在“设置 - 系统 - 关于”里能看到版本信息。然后以管理员身份打开 PowerShell 或命令提示符右键开始菜单选择“终端(管理员)”执行下面这条命令wsl --install这条命令会自动启用 WSL 功能并安装默认的 Ubuntu 发行版。安装完成后系统会提示你重启电脑。重启后 Ubuntu 会自动启动初始化让你设置一个用户名和密码。这个用户名和密码就是你在 Linux 环境下的账户记好了后面 sudo 操作会经常用到。如果你执行wsl --install报错或者提示找不到命令说明你的系统版本太老或者 WSL 功能没有正确启用。这时候需要手动启用两个功能在“控制面板 - 程序 - 启用或关闭 Windows 功能”里勾选“适用于 Linux 的 Windows 子系统”和“虚拟机平台”然后重启电脑。重启后再执行wsl --set-default-version 2把默认版本设置为 WSL2然后手动安装 Ubuntu在 Microsoft Store 里搜索“Ubuntu 22.04”点击安装即可。提示装完 Ubuntu 后可以在 PowerShell 里执行wsl -l -v来确认当前运行的是不是 VERSION 2。如果显示 VERSION 1需要执行wsl --set-version Ubuntu-22.04 2手动转换。3.2 搞定国内访问速度Ubuntu 换源装好 Ubuntu 之后第一件事是更换软件源。这一步不做你后面执行apt update的时候会慢到怀疑人生。在 Ubuntu 终端里执行sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i s/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /etc/apt/sources.list sudo sed -i s/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /etc/apt/sources.list sudo apt update我用的是清华源实测速度非常可观。如果你在别的地区也可以换成阿里源mirrors.aliyun.com或中科大源mirrors.ustc.edu.cn替换命令里的域名就行。换完源之后顺手把基础工具链装上sudo apt update sudo apt upgrade -y sudo apt install -y curl wget git vim build-essential到这里Windows 侧的环境准备工作就算完成了。接下来进入 ROS2 安装的核心环节。4. ROS2 Humble 安装全流程一步一步照着做就行4.1 设置编码与添加 ROS2 软件源ROS2 依赖 UTF-8 编码Ubuntu 22.04 默认就是 UTF-8正常情况下不用额外设置。但如果你之前在 Ubuntu 里改过 locale可能会出问题。保险起见可以执行一下sudo apt install -y locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8 export LANGen_US.UTF-8然后添加 ROS2 的软件源。这里有个关键点ROS2 的官方源在国内访问不稳定需要先添加 ROS2 的 GPG 密钥然后把 ROS2 的 apt 源添加进去。命令如下sudo apt install -y software-properties-common sudo add-apt-repository universe sudo apt update sudo apt install -y curl sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg如果你在执行最后一条命令时报错raw.githubusercontent.com 在国内经常被卡可以选择一条备选方案——把 ros.key 文件通过 Windows 下载后传到 WSL2 里。具体做法在 Windows 浏览器打开 https://raw.githubusercontent.com/ros/rosdistro/master/ros.key把内容复制到一个文件里然后放到 WSL2 的 /tmp 目录下再执行sudo mv /tmp/ros.key /usr/share/keyrings/ros-archive-keyring.gpg注意ros.key 文件必须被保存为无 BOM 的纯文本格式换行符最好是 LF。用 Windows 记事本保存的文件经常默认带 BOM 或 CRLF可能导致后续校验失败。推荐用 VSCode 或 Notepad 保存为 UTF-8 无 BOM 格式。接着把 ROS2 源写入 apt 源列表echo deb [archamd64 signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu jammy main | sudo tee /etc/apt/sources.list.d/ros2.list sudo apt update如果执行sudo apt update时提示无法连接 packages.ros.org说明国外源被卡了。这时候可以换成国内的 ROS2 镜像源比如清华的 ros2 镜像或中科大的 ros2 镜像把上面那一行 echo 里的地址换掉即可。我这里以清华源为例echo deb [archamd64 signed-by/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy main | sudo tee /etc/apt/sources.list.d/ros2.list4.2 正式安装 ROS2 Humble完成源配置后执行安装命令sudo apt update sudo apt upgrade -y sudo apt install -y ros-humble-desktopros-humble-desktop是桌面版完整安装包包含 ROS2 核心、可视化工具 RViz2、仿真工具 Gazebo、常用示例包等。对新手来说这个包是最省心的选择——一步到位不用再纠结缺什么补什么。这个安装包比较大下载量在 3GB 左右视网速可能需要 10 到 30 分钟不等。如果你只想要命令行工具、不打算跑仿真和可视化可以装精简版ros-humble-ros-base但我不建议因为后面学习时你迟早要用到 RViz2。安装完成后还需要装两个常用的开发工具 —— colconROS2 的编译工具和 vcstool多仓库管理工具sudo apt install -y python3-colcon-common-extensions python3-vcstool python3-rosdep4.3 配置环境变量让 ros2 命令开箱即用装完 ROS2 后每次打开终端都要执行source /opt/ros/humble/setup.bash才能使用 ROS2 命令。为了方便我建议把它写到 shell 配置里让它自动加载echo source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc这样每次打开 WSL2 终端ROS2 环境就自动配好了。这时候你执行一下ros2 --help如果能看到一长串 ros2 命令说明就说明安装成功了。如果提示command not found大概率是环境变量没有正确生效检查一下 ~/.bashrc 里是否写了正确的 source 路径。补充一句如果你用的是 zsh 而不是 bash对应的配置文件名是 ~/.zshrc原理一样把 source 那行追加进去再 source 一下。5. 基础验证与第一个 ROS2 程序小乌龟跑起来就算入门5.1 启动 talker 和 listener时刻记住“发布者/订阅者”模型ROS2 最基础的概念是节点Node、话题Topic、消息Message和服务Service。节点之间通过话题收发消息这个模型几乎是所有机器人通信的基础。为了验证安装是否真的正确我们先跑官方自带的两个示例节点。开两个终端怎么快速开两个 WSL2 终端直接按 AltF2 再输入 wsl 即可或者直接在 Windows Terminal 里新建标签页。第一个终端执行ros2 run demo_nodes_cpp talker第二个终端执行ros2 run demo_nodes_cpp listener如果一切正常第一个终端会不断打印“Publishing: Hello World: N”第二个终端会同步打印“Receiving: Hello World: N”。这说明两个节点之间已经成功建立通信了。这时候你还可以再开一个终端执行ros2 topic list能看到/chatter这个话题再用ros2 topic echo /chatter就能实时看到消息内容。趁着这个机会你可以把 ROS2 的常用命令行工具挨个试一遍ros2 node list # 查看当前运行的节点 ros2 node info /talker # 查看节点详细信息 ros2 topic info /chatter # 查看话题信息 ros2 topic hz /chatter # 查看话题发布频率5.2 小乌龟一个能让你真正“看到” ROS2 在做什么的 Demo对于刚入门的朋友我最推荐的是跑小乌龟Turtlesim。它不仅能验证安装还能让你直观感受到 ROS2 的消息通信机制。启动小乌龟需要三个终端终端一启动 turtlesim 节点ros2 run turtlesim turtlesim_node终端二启动小乌龟的键盘控制节点ros2 run turtlesim turtle_teleop_key终端三用于查看话题和调用服务ros2 topic list ros2 topic echo /turtle1/pose ros2 service list操作流程终端二保持焦点按键盘上的方向键终端一里的小乌龟就会移动终端三里会实时刷新乌龟的坐标位置。你能清楚地看到“按键 - 话题消息 - 乌龟运动”这条链路这就是 ROS2 最基础的通信机制在实打实地工作。小乌龟还能演示服务Service通信在终端三里执行ros2 service call /spawn turtlesim/srv/Spawn {x: 5, y: 5, theta: 1.57}终端一会新生成一只小乌龟。这是 ROS2 的请求-响应通信模型你就可以对比感受一下它和话题的“发布-订阅”模型有什么不同话题是单向的、持续的、一对多服务是一次性的、双向的、一对一。6. 日常工作流用 VSCode 连接 WSL2 写代码、编译、运行6.1 安装 VSCode 的 WSL 扩展开发 ROS2 项目时我最常用的编辑器是 VSCode。你在 Windows 上装好 VSCode 后在扩展市场搜索“WSL”安装微软官方那个“WSL”扩展。安装完成后在 VSCode 左下角会出现一个绿色的“”按钮点击它会提示你连接到 WSL。连接上之后VSCode 左侧的资源管理器窗口里显示的就是 WSL2 里的文件系统了。这时候你新建一个工作目录比如 ~/dev_ws在里面写代码然后打开终端VSCode 自带的终端会自动进入 WSL2 环境就可以直接编译运行 ROS2 项目了。这里有个小技巧WSL2 里打开 Windows 的 VSCode 时路径是自动切换过的。比如你在 Ubuntu 终端的某个目录下执行code .VSCode 会以 WSL 模式打开这个目录不用手动去连接。6.2 创建你的第一个 ROS2 工作空间并编译假设你想新建一个名为 test_pkg 的功能包完整流程如下创建并进入工作空间mkdir -p ~/dev_ws/src cd ~/dev_ws colcon build此时 src 目录是空的colcon build 会成功但没有任何输出。然后进入 src 目录用 ros2 pkg create 创建一个 Python 功能包cd ~/dev_ws/src ros2 pkg create test_pkg --build-type ament_python --dependencies rclpy这条命令会生成一个标准的 ROS2 Python 包结构。编辑 test_pkg/test_pkg/node_test.py写入最简单的节点代码import rclpy from rclpy.node import Node class TestNode(Node): def __init__(self): super().__init__(test_node) self.get_logger().info(Hello ROS2!) def main(argsNone): rclpy.init(argsargs) node TestNode() rclpy.spin(node) node.destroy_node() rclpy.shutdown() if __name__ __main__: main()同时修改 setup.py 里的 entry_points把 console_scripts 配置上entry_points{ console_scripts: [ test_node test_pkg.node_test:main, ], },然后回到工作空间根目录编译cd ~/dev_ws colcon build source install/setup.bash ros2 run test_pkg test_node如果终端打印出Hello ROS2!恭喜你第一个自己的节点就跑通了。提示在写 Python 节点时别用print要用self.get_logger().info()。ROS2 的日志系统不仅支持不同级别的日志输出DEBUG、INFO、WARN、ERROR还跟 ROS2 的日志框架完全融合调试时能看到更规范的信息。6.3 一个实用的目录管理习惯随着项目变多工作空间里会积累大量编译产物。我建议你把工作空间按“src源码 / build编译中间文件 / install安装产物 / log日志”这样四大目录来管理。src 目录是源码做好 Git 版本控制build、install、log 目录都是 colcon 自动生成的可以随时删除重新构建也不用提交到 Git。在 .gitignore 里写上这三行build/ install/ log/这样你的项目仓库就干净很多。7. 高频疑难杂症排查安装和运行中最常见的几个坑7.1 问题一ros2: command not found这是最常见的报错。如果你执行ros2 --help提示找不到命令原因基本上就两个环境变量没 source或者 ROS2 根本没装上。排查思路分三步先确认安装是否真的成功执行ls /opt/ros/humble/setup.bash如果文件不存在说明安装过程有问题检查安装日志如果文件存在再执行source /opt/ros/humble/setup.bash然后重新执行ros2 --help能用了说明只是环境变量没配好最后检查 ~/.bashrc 里是不是真的写了 source 那行写完要重新打开终端或者手动执行source ~/.bashrc才生效。7.2 问题二WSL2 里打不开 GUI 窗口如果你运行rviz2或小乌龟时报错提示无法连接 display大概率是图形界面GUI没有配置好。WSL2 默认支持 WSLg但某些 Windows 版本或自定义配置下可能没启用。先确认 WSLg 是否正常wsl --version wsl --status如果确认 WSLg 已经启用还报错的话手动加上 DISPLAY 环境变量试试export DISPLAY:0然后在 Ubuntu 终端安装一个测试工具验证图形转发sudo apt install -y x11-apps xclock如果 xclock 能弹出时钟窗口说明图形界面正常RViz2 也能用了。这里有个容易忽略的细节WSL2 的 GUI 支持跟 Windows 版本强相关Windows 11 基本开箱即用Windows 10 需要确保 21H2 以上版本。如果你的 Windows 10 比较老建议直接升级到 Windows 11省很多事。7.3 问题三colcon build 过程中报错编译时报错是最磨人的但大部分错误类型就那么几种。一是缺少依赖比如报ModuleNotFoundError这时候用rosdep install --from-paths src --ignore-src -r -y获取依赖二是路径问题报Package xxx not found确认你source过/opt/ros/humble/setup.bash且当前工作空间的 install/setup.bash 也 source 了三是权限问题sudo 编译文件导致的缓存冲突这种情况最隐蔽——如果你之前用 sudo 执行过 colcon build后面再不用 sudo 编译就会报权限错误直接在 build 目录执行sudo rm -rf build install log清理后重新编译即可。7.4 问题四rosdep update 失败rosdep 是 ROS2 的依赖管理工具但它在国内经常初始化失败因为需要访问 GitHub。如果你不需要 rosdep 来管理依赖大部分情况下手动apt install就够用可以先跳过它等真正需要时再解决。如果必须用可以考虑在 hosts 文件里添加 raw.githubusercontent.com 的解析记录或者把 rosdep 的源指向国内镜像这个操作稍微繁琐一些新手可以暂时不碰。7.5 小知识ROS1 和 ROS2 能共存吗很多人问这个问题。答案是可以我目前就在 WSL2 里同时装着 ROS1 Noetic 和 ROS2 Humble切换使用时只要注意 source 顺序就行——先 source ROS1 的环境再 source ROS2 的环境这样 ROS2 命令会优先生效。两个版本共存时的核心原则是环境变量的加载顺序要稳定。如果想省心也可以写个 switch_ros.sh 脚本按需 source 不同版本的环境变量这个我在后续的文章里再详细展开。8. 再往前一步ROS2 生态里的热门扩展方向8.1 RViz2 和 Gazebo从通信入门到仿真实践ROS2 装完之后很多人关心的下一步是“除了小乌龟我还能跑什么”。建议你从两个工具入手RViz2 是可视化工具能显示机器人的 TF 树、激光雷达数据、点云、地图Gazebo 是物理仿真环境能在没有真实机器人的情况下测试导航、SLAM 等算法。启动 RViz2 的方式很简单rviz2它不像 turtlesim 自带一个世界场景RViz2 更像一个“画布”你需要加载话题数据它才会显示内容。通常配合 Gazebo 里的机器人模型使用。例如在 Gazebo 里加载一个带激光雷达的机器人模型RViz2 里就能看到实时点云数据。安装 GazeboROS2 Humble 默认是 Gazebo Classic 11sudo apt install -y ros-humble-gazebo-ros-pkgs启动一个空世界gazebo --verbose如果你有现成的模型文件可以加载进去做导航仿真。8.2 与硬件联动micro-ROS 与 ESP32如果你打算把 ROS2 接到嵌入式设备上micro-ROS 是你绕不开的方案。我经常用 ESP32 PlatformIO 搭建 micro-ROS 环境把传感器数据直接通过 WiFi 或串口发到 ROS2 里。具体做法在 PlatformIO 里引入 micro_ros_platformio 库配置好 ROS2 主机的 IP 地址然后烧录到 ESP32 上。这样 ESP32 就变成了一个 ROS2 节点里面定义的 Publisher 可以实时发布传感器数据订阅者可以接收控制指令。这套架构特别适合做仿生机器人、智能车这类需要小型控制器的项目。我这里不展开太多后面会单独写一篇 ESP32 micro-ROS 的接线和配置教程。8.3 容器化部署Docker 跑 ROS2 的注意事项现在越来越多团队用 Docker 来跑 ROS2好处是环境隔离、部署方便、不污染宿主机。比如你想要一个带 GUI 的 ROS2 Humble 容器官方镜像osrf/ros:humble-desktop就很好用。不过要注意的是容器里跑 GUI 需要配置 X11 转发挂载宿主的 socket 才能访问硬件设备这里有两行关键参数docker run -it \ -e DISPLAY$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix \ osrf/ros:humble-desktop这些操作在 WSL2 里同样适用如果你准备在 Docker 里跑 ROS2可以把环境变量和挂载参数先配置好省得每次开容器都要重复设置。Docker 方案适合团队协作或者复现别人的实验环境但学习阶段我更推荐直接用本地安装出了问题排查更直观。9. 写在最后的几点体会从零开始在 Windows 下把 ROS2 跑通整个过程我踩了不少坑。总结几个最实用的经验送给你。第一版本选型别纠结。网上教程五花八门有的讲 Foxy、有的讲 Galactic、有的讲 Jazzy如果你不知道选哪个就认准 Humble Ubuntu 22.04。遇到问题了搜出来的解决方案九成以上都是针对这个组合的能帮你省下大量时间。第二环境变量是一切的基础。ROS2 大部分“莫名其妙的问题”先检查你 source 了没有、路径对不对、有没有被别的环境覆盖。我见过太多人折腾了半天最后发现是 source 的顺序错了。第三遇到报错先读日志。colcon build 报错时错误信息会明确告诉你在哪个包、哪个文件、哪一行出的问题。不要一看到一大段红色报错就慌了先找error关键字从最后一条往前看。很多时候问题出在你最新改的那几行代码上。第四Windows 上装 ROS2 的姿势已经比几年前好太多WSL2 基本是无痛的。如果你被某些教程里复杂的双系统安装步骤劝退过现在完全可以再试一次——照着这篇流程走大概率一两小时就能把环境搭好。希望这篇教程能让你少走弯路早点把精力投入到真正有意思的机器人开发中去。有问题欢迎在评论区交流我看到了会尽量回复。
返回列表