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.conf3.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/*.deb3.3 环境配置与验证
配置环境变量:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc source ~/.bashrc验证安装:
# 测试核心功能 ros2 run demo_nodes_cpp talker ros2 run demo_nodes_py listener4. 常见问题解决方案
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" >> ~/.bashrc4.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.conf4.3 系统时间同步问题
解决Windows和WSL2时间不同步:
sudo hwclock -s5. 性能优化技巧
- 文件系统性能:
# 将项目文件存储在Windows文件系统 \\wsl$\Ubuntu-22.04\home\<username>\projects- 内存限制: 在
C:\Users\<username>\.wslconfig中添加:
[wsl2] memory=8GB processors=4- 跨平台剪贴板: 安装Windows端剪贴板工具后:
sudo apt-get install wl-clipboard这套方案在我们团队20+开发机上稳定运行超过6个月,特别适合以下场景:
- 企业内网开发环境
- 教学实验室统一配置
- 需要快速重建开发环境的场景
实际使用中我发现,相比虚拟机方案,WSL2的资源占用更低,启动速度更快,特别是与VSCode的Remote-WSL扩展配合使用时,开发体验几乎与原生Linux无异。唯一需要注意的是,当处理大量小文件(如ROS2的msg/srv文件)时,建议将其放在Linux文件系统内以获得更好的IO性能。