Win11 WSL2 + Ubuntu 18.04:手把手教你配置ROS开发环境并跑通第一个rviz
Win11 WSL2 + Ubuntu 18.04:从零搭建ROS开发环境的完整实践指南
在Windows系统上进行机器人操作系统(ROS)开发一直是个令人头疼的问题。传统方案要么依赖性能损耗严重的虚拟机,要么需要复杂的双系统切换。而Windows Subsystem for Linux 2(WSL2)的出现彻底改变了这一局面——它让我们能在Windows 11上获得接近原生性能的Linux环境,完美支持ROS开发。本文将带你从零开始,在WSL2中配置Ubuntu 18.04和ROS Melodic,最终实现rviz可视化工具的顺利运行。
1. 环境准备与WSL2基础配置
在开始ROS之旅前,我们需要确保Windows 11系统已做好充分准备。WSL2作为微软推出的第二代Linux子系统,相比第一代采用了真正的Linux内核,提供了完整的系统调用兼容性,这正是运行ROS所必需的。
首先检查系统版本:通过Win+R运行winver命令,确认系统版本为Windows 11 21H2或更高。然后以管理员身份打开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常见问题排查:
- 如果遇到"WSL 2 requires an update to its kernel component"错误,需要下载并安装 WSL2 Linux内核更新包
- 对于BIOS中未启用虚拟化的情况,需进入BIOS设置开启Intel VT-x或AMD-V选项
2. Ubuntu 18.04 LTS安装与优化
ROS Melodic官方推荐在Ubuntu 18.04上运行,这也是我们选择该版本的原因。安装Ubuntu 18.04到WSL2有两种主要方式:
2.1 通过Microsoft Store安装
- 打开Microsoft Store,搜索"Ubuntu 18.04"
- 点击获取并等待下载完成
- 启动应用,等待初始化并设置用户名和密码
2.2 通过命令行安装
wsl --install -d Ubuntu-18.04安装完成后,建议执行以下优化步骤:
sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential cmake gitWSL2磁盘性能优化: 由于WSL2使用虚拟硬盘,频繁的IO操作可能影响性能。可以将项目文件存放在Windows文件系统中,通过/mnt/c访问,或考虑以下优化:
# 在/etc/wsl.conf中添加以下内容 [automount] options = "metadata,umask=22,fmask=11"3. ROS Melodic完整安装指南
现在进入核心环节——ROS安装。我们将采用最稳定的Melodic版本,这是长期支持(LTS)版本,维护至2023年5月。
3.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 sudo apt update3.2 完整安装ROS
推荐安装桌面完整版,包含ROS、rqt、rviz等常用工具:
sudo apt install -y ros-melodic-desktop-full安装完成后,初始化rosdep是关键步骤。由于网络问题,这里提供两种可靠方案:
方案一:使用国内镜像源
sudo rosdep init rosdep update --include-eol-distros方案二:离线方式(当方案一不可用时)
git clone https://gitee.com/ros/rosdistro.git ~/rosdistro sudo cp -r ~/rosdistro/rosdep/sources.list.d /etc/ros/rosdep/ sudo sed -i "s|https://raw.githubusercontent.com|file://$HOME/rosdistro|g" /etc/ros/rosdep/sources.list.d/20-default.list rosdep update3.3 环境变量配置
将以下内容添加到~/.bashrc文件末尾:
source /opt/ros/melodic/setup.bash echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc然后执行:
source ~/.bashrc4. 验证ROS环境与rviz初体验
安装完成后,让我们通过实际运行来验证环境是否配置成功。
4.1 启动ROS核心服务
在新终端中运行:
roscore正常启动后,你应该看到类似以下输出:
... logging to /home/username/.ros/log/xxxxx started core service [/rosout]4.2 运行rviz可视化工具
另开一个终端,执行:
rosrun rviz rviz首次启动rviz可能需要一些时间加载。成功启动后,你将看到灰色的3D视图窗口,这表示ROS环境已正确配置。
rviz界面速览:
- 左侧面板:显示选项(Displays)和全局选项(Global Options)
- 中间区域:3D可视化视图
- 底部状态栏:显示坐标信息和帧率
- 工具栏:提供各种交互工具
4.3 常见问题解决
问题1:启动rviz时报错"Could not load the Qt platform plugin xcb"
解决方案:
sudo apt install -y libxcb-xinerama0 export QT_DEBUG_PLUGINS=1问题2:WSL2中rviz窗口显示异常
尝试以下命令:
export LIBGL_ALWAYS_INDIRECT=1 export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):05. 开发环境进阶配置
为了让ROS开发更加高效,我们还需要配置一些常用工具和开发环境。
5.1 创建工作空间
标准的ROS开发通常从创建工作空间开始:
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make source devel/setup.bash5.2 安装常用工具
sudo apt install -y python-rosinstall python-rosinstall-generator python-wstool sudo apt install -y python-catkin-tools5.3 配置VS Code开发环境
- 在Windows端安装VS Code
- 安装"Remote - WSL"扩展
- 在Ubuntu终端中输入
code .即可在WSL环境中启动VS Code
推荐扩展:
- ROS (Microsoft)
- C/C++
- CMake Tools
- Python
5.4 网络配置优化
WSL2与Windows主机的网络通信需要通过特殊IP进行。获取WSL2 IP地址:
ip addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'在Windows端使用此IP与WSL2中的ROS节点通信。
6. ROS基础概念与实践
为了帮助初学者更好地理解ROS,让我们通过一个简单示例来演示ROS的核心概念。
6.1 创建第一个ROS包
cd ~/catkin_ws/src catkin_create_pkg beginner_tutorials std_msgs rospy roscpp cd ~/catkin_ws && catkin_make6.2 编写简单发布者
创建src/talker.cpp文件:
#include "ros/ros.h" #include "std_msgs/String.h" int main(int argc, char **argv) { ros::init(argc, argv, "talker"); ros::NodeHandle n; ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000); ros::Rate loop_rate(10); while (ros::ok()) { std_msgs::String msg; msg.data = "hello world"; chatter_pub.publish(msg); ros::spinOnce(); loop_rate.sleep(); } return 0; }6.3 编写简单订阅者
创建src/listener.cpp文件:
#include "ros/ros.h" #include "std_msgs/String.h" void chatterCallback(const std_msgs::String::ConstPtr& msg) { ROS_INFO("I heard: [%s]", msg->data.c_str()); } int main(int argc, char **argv) { ros::init(argc, argv, "listener"); ros::NodeHandle n; ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback); ros::spin(); return 0; }6.4 编译并运行示例
修改CMakeLists.txt文件后执行:
cd ~/catkin_ws && catkin_make在三个不同终端中分别运行:
roscore rosrun beginner_tutorials talker rosrun beginner_tutorials listener你应该能在listener终端中看到"hello world"消息不断输出。
7. 可视化工具深度探索
rviz作为ROS的核心可视化工具,功能远比初次启动时看到的丰富。让我们深入了解其强大功能。
7.1 rviz基本配置
- 添加显示类型:点击左下角"Add"按钮,尝试添加"Grid"、"TF"等显示类型
- 保存配置:通过"File"→"Save Config"保存当前布局
- 视角控制:
- 左键拖动:旋转视角
- 滚轮拖动:平移视角
- 滚轮滚动:缩放视角
7.2 常用插件介绍
| 插件名称 | 功能描述 | 典型用途 |
|---|---|---|
| LaserScan | 显示激光雷达数据 | SLAM、导航 |
| PointCloud2 | 显示点云数据 | 3D感知 |
| Path | 显示路径规划结果 | 自主导航 |
| Marker | 显示各种标记 | 调试可视化 |
7.3 实战:可视化虚拟数据
创建一个简单的发布者,发布可视化标记:
#!/usr/bin/env python import rospy from visualization_msgs.msg import Marker def main(): rospy.init_node('visualization_node') pub = rospy.Publisher('visualization_marker', Marker, queue_size=10) marker = Marker() marker.header.frame_id = "base_link" marker.type = Marker.SPHERE marker.action = Marker.ADD marker.scale.x = 0.2 marker.scale.y = 0.2 marker.scale.z = 0.2 marker.color.a = 1.0 marker.color.r = 1.0 marker.color.g = 0.0 marker.color.b = 0.0 marker.pose.orientation.w = 1.0 marker.pose.position.x = 0 marker.pose.position.y = 0 marker.pose.position.z = 0 rate = rospy.Rate(10) while not rospy.is_shutdown(): marker.header.stamp = rospy.Time.now() pub.publish(marker) rate.sleep() if __name__ == '__main__': try: main() except rospy.ROSInterruptException: pass在rviz中添加"Marker"显示类型,订阅/visualization_marker话题,即可看到红色球体。
8. 性能优化与实用技巧
经过实际使用,我发现以下几个技巧能显著提升WSL2中ROS的开发体验:
- 内存管理:WSL2默认会占用大量内存。在
%UserProfile%\.wslconfig中添加:
[wsl2] memory=4GB swap=2GB- 图形性能:对于3D应用,设置以下环境变量:
export LIBGL_ALWAYS_SOFTWARE=1 export WSL2_GUI_APPS_ENABLED=1文件系统:避免在Linux文件系统中进行大量IO操作,将项目文件放在Windows文件系统中通过
/mnt/c访问启动速度:使用
wsl --shutdown完全关闭WSL2实例,可以解决一些性能下降问题备份配置:定期导出WSL2实例:
wsl --export Ubuntu-18.04 ubuntu_backup.tar