1. 环境准备与基础配置
在Windows系统下使用WSL2运行Ubuntu 20.04并配置ROS Noetic环境,是当前机器人开发领域的热门选择方案。这种组合既能利用Windows的易用性,又能获得Linux环境下完整的ROS开发体验。我最近在为一台配备NVIDIA显卡的笔记本配置VINS-Fusion环境时,发现网上教程大多存在步骤缺失或版本不匹配问题,这里将完整记录经过验证的配置流程。
1.1 WSL2安装与Ubuntu 20.04部署
首先需要确保Windows版本为1903及以上,建议使用Windows 10 2004或Windows 11以获得最佳兼容性。通过管理员权限的PowerShell执行:
bash复制wsl --install
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重启后设置WSL2为默认版本:
bash复制wsl --set-default-version 2
从Microsoft Store安装Ubuntu 20.04 LTS版本,安装完成后首次启动会要求设置用户名和密码。建议密码不要过于简单,因为后续sudo操作会频繁使用。
重要提示:如果遇到WSL2无法启动的问题,需进入BIOS确保已开启虚拟化技术(Intel VT-x或AMD-V)。部分品牌机默认关闭此功能。
1.2 系统基础环境配置
更新软件源并升级现有包:
bash复制sudo apt update && sudo apt upgrade -y
安装编译VINS-Fusion所需的工具链:
bash复制sudo apt install -y build-essential cmake git wget curl liblapack-dev libblas-dev libeigen3-dev
配置中科大镜像源加速下载:
bash复制sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list
为方便开发,建议安装以下工具:
bash复制sudo apt install -y terminator tmux htop vim net-tools
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. ROS Noetic完整安装
2.1 ROS仓库配置
设置ROS软件源:
bash复制sudo sh -c 'echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
导入密钥:
bash复制sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
2.2 核心组件安装
安装完整版ROS(包含rqt、rviz等GUI工具):
bash复制sudo apt update
sudo apt install -y ros-noetic-desktop-full
初始化rosdep时常见403错误解决方案:
bash复制sudo rosdep init
rosdep update --include-eol-distros
2.3 环境变量配置
将以下内容添加到~/.bashrc文件末尾:
bash复制source /opt/ros/noetic/setup.bash
source ~/catkin_ws/devel/setup.bash
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
创建catkin工作空间:
bash复制mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
3. VINS-Fusion环境构建
3.1 依赖项安装
安装OpenCV和Pangolin:
bash复制sudo apt install -y libopencv-dev python3-opencv libglew-dev libboost-all-dev
安装Ceres Solver(建议从源码编译):
bash复制sudo apt install -y libgoogle-glog-dev libgflags-dev libatlas-base-dev
git clone https://ceres-solver.googlesource.com/ceres-solver
cd ceres-solver
mkdir build && cd build
cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
make -j$(nproc)
sudo make install
3.2 VINS-Fusion源码编译
克隆仓库并初始化子模块:
bash复制cd ~/catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git
cd VINS-Fusion
git submodule update --init --recursive
编译时常见问题处理:
- 遇到Eigen版本冲突时:
bash复制sudo apt remove libeigen3-dev
然后手动安装Eigen 3.3.7
- 编译错误提示缺少yaml-cpp:
bash复制sudo apt install -y libyaml-cpp-dev
正式编译:
bash复制cd ~/catkin_ws
catkin_make -j$(nproc)
4. 传感器驱动与可视化配置
4.1 IMU驱动安装
对于常见的Xsens MTi系列IMU:
bash复制sudo apt install -y ros-noetic-xsens-driver
配置udev规则:
bash复制echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="2639", MODE="0666"' | sudo tee /etc/udev/rules.d/99-xsens.rules
sudo udevadm control --reload-rules
4.2 可视化工具优化
修改RViz配置避免WSL2下的显示问题:
bash复制export LIBGL_ALWAYS_INDIRECT=1
export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0
安装PlotJuggler用于数据可视化:
bash复制sudo apt install -y ros-noetic-plotjuggler-ros
5. 测试与验证
5.1 数据集测试
下载EuRoC数据集:
bash复制wget http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room1/V1_01_easy/V1_01_easy.zip
unzip V1_01_easy.zip -d ~/Datasets
运行VINS-Fusion:
bash复制roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_config.yaml
rosbag play ~/Datasets/V1_01_easy.bag
5.2 实时摄像头测试
配置USB摄像头(需要Windows端安装USBIPD):
bash复制sudo apt install -y linux-tools-virtual hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20
在Windows PowerShell中:
powershell复制usbipd wsl list
usbipd wsl attach --busid <摄像头总线ID>
在WSL2中验证设备:
bash复制ls /dev/video*
rosrun usb_cam usb_cam_node _video_device:=/dev/video0 _pixel_format:=yuyv
6. 性能优化与问题排查
6.1 WSL2专用优化
- 内存限制调整:在%UserProfile%/.wslconfig中添加:
code复制[wsl2]
memory=8GB
swap=0
localhostForwarding=true
- 磁盘性能优化:
bash复制sudo apt install -y preload
sudo echo "vm.dirty_background_ratio = 5" >> /etc/sysctl.conf
sudo echo "vm.dirty_ratio = 10" >> /etc/sysctl.conf
6.2 常见错误解决方案
- ROS节点通信延迟:
bash复制export ROS_IP=`hostname -I | awk '{print $1}'`
- Gazebo无法启动:
bash复制export SVGA_VGPU10=0
export GAZEBO_IP=127.0.0.1
- 点云显示异常:
在RViz中修改Fixed Frame为"world",并检查TF树是否完整
经过完整测试,这套环境在i7-11800H + RTX 3060笔记本上运行VINS-Fusion的MH_05_difficult数据集时,能达到实时性要求(平均处理频率18.7Hz)。对于需要更高性能的场景,可以考虑在WSL2中直接调用Windows端的CUDA驱动,但这需要额外的NVIDIA容器工具包配置。
