news 2026/9/16 10:44:02

WSL2离线安装ROS2 Humble完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WSL2离线安装ROS2 Humble完整指南

1. 项目背景与需求解析

在Windows环境下进行机器人开发时,原生系统对ROS2的支持一直是个痛点。WSL2的出现彻底改变了这一局面——它允许我们在Windows系统中运行原生的Linux二进制文件,而Ubuntu22.04 LTS作为长期支持版本,与ROS2 Humble的完美适配更是开发者的首选组合。

我最近在给团队配置开发环境时,遇到了一个典型场景:实验室的Windows开发机需要批量部署ROS2开发环境,但部分机器无法连接外网。经过多次实践,我总结出一套完整的离线安装方案,相比官方文档的在线安装方式,这套方案具有以下优势:

  • 完全离线操作,适合内网环境
  • 安装包可一次下载多次复用
  • 避免网络波动导致的安装失败
  • 便于团队统一环境配置

2. 准备工作与离线资源获取

2.1 WSL2环境配置

首先确保Windows系统版本为1903及以上,并启用WSL功能:

# 以管理员身份运行PowerShell dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

重启后设置WSL2为默认版本:

wsl --set-default-version 2

注意:如果系统未安装WSL2内核,需提前下载并安装适用于x64计算机的WSL2内核更新包(约50MB),这个步骤需要在有网络的机器上预先完成。

2.2 Ubuntu22.04离线包获取

在有网络的机器上获取离线安装包:

# 导出Ubuntu22.04镜像 wsl --export Ubuntu-22.04 ubuntu2204.tar

这个tar文件(约1.5GB)包含了完整的系统镜像,可以复制到离线机器上使用。同时建议下载以下依赖包备用:

  • libpython3-dev
  • python3-pip
  • build-essential
  • cmake
  • git

3. 离线安装完整流程

3.1 导入Ubuntu系统

将准备好的ubuntu2204.tar复制到目标机器后:

# 导入并指定安装路径 wsl --import Ubuntu-22.04 C:\wsl\ubuntu2204 ubuntu2204.tar --version 2

设置默认用户(需提前在有网络环境时配置好):

# 在ubuntu2204.tar对应的系统中执行 echo "[user]" > /etc/wsl.conf echo "default=yourusername" >> /etc/wsl.conf

3.2 ROS2 Humble离线安装

在有网络环境时预先下载所有deb包:

# 创建缓存目录 mkdir -p ~/ros2_offline/amd64 cd ~/ros2_offline # 下载密钥和主仓库 wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O ros.key apt-key add ros.key echo "deb [arch=amd64] http://packages.ros.org/ros2/ubuntu jammy main" > /etc/apt/sources.list.d/ros2.list # 下载所有依赖 apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances ros-humble-desktop | grep "^\w" | sort -u)

将整个ros2_offline目录打包复制到离线机器后:

# 安装所有deb包 sudo dpkg -i ~/ros2_offline/amd64/*.deb

3.3 环境配置与验证

配置环境变量:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc source ~/.bashrc

验证安装:

# 测试核心功能 ros2 run demo_nodes_cpp talker ros2 run demo_nodes_py listener

4. 常见问题解决方案

4.1 图形界面支持

WSL2默认不支持GUI,如需使用RViz等工具:

# Windows端安装VcXsrv或MobaXterm wsl --set-version Ubuntu-22.04 2

在WSL中配置DISPLAY:

echo "export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0" >> ~/.bashrc

4.2 网络代理配置

如果内网需要代理访问:

# 在/etc/apt/apt.conf.d/目录下创建proxy.conf echo 'Acquire::http::Proxy "http://your.proxy.address:port";' | sudo tee /etc/apt/apt.conf.d/proxy.conf

4.3 系统时间同步问题

解决Windows和WSL2时间不同步:

sudo hwclock -s

5. 性能优化技巧

  1. 文件系统性能
# 将项目文件存储在Windows文件系统 \\wsl$\Ubuntu-22.04\home\<username>\projects
  1. 内存限制: 在C:\Users\<username>\.wslconfig中添加:
[wsl2] memory=8GB processors=4
  1. 跨平台剪贴板: 安装Windows端剪贴板工具后:
sudo apt-get install wl-clipboard

这套方案在我们团队20+开发机上稳定运行超过6个月,特别适合以下场景:

  • 企业内网开发环境
  • 教学实验室统一配置
  • 需要快速重建开发环境的场景

实际使用中我发现,相比虚拟机方案,WSL2的资源占用更低,启动速度更快,特别是与VSCode的Remote-WSL扩展配合使用时,开发体验几乎与原生Linux无异。唯一需要注意的是,当处理大量小文件(如ROS2的msg/srv文件)时,建议将其放在Linux文件系统内以获得更好的IO性能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 10:42:24

H3C S-MLAG与服务器bond4双活接入配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 10:42:09

深入解析 reflect2:面向底层库的零额外开销 Go 反射 API

深入解析 reflect2&#xff1a;面向底层库的零额外开销 Go 反射 API 【免费下载链接】cilium eBPF-based Networking, Security, and Observability 项目地址: https://gitcode.com/GitHub_Trending/ci/cilium 导读 reflect2 是一个专门为 Go 底层库设计的反射封装库&a…

作者头像 李华
网站建设 2026/9/16 10:40:48

TrafficExam移动互联考试系统源码解析:基于Android的题库与组卷实现

简介&#xff1a;这套基于Android平台的TrafficExam移动互联软件开发设计源码&#xff0c;为交通考试场景提供了一套可运行的移动互联解决方案&#xff0c;面向Android开发学习者和移动应用开发人员&#xff0c;覆盖从界面搭建、业务逻辑到构建配置的完整开发流程。压缩包共41个…

作者头像 李华
网站建设 2026/9/16 10:39:30

PTP硬件时间戳全链路解析:从网卡驱动到Linux内核实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华