专栏/Win10下使用WSL2安装ROS1并使用独显的方法

Win10下使用WSL2安装ROS1并使用独显的方法

2022年03月09日 21:11--浏览 · --点赞 · --评论
粉丝:546文章:1

By: KDHF

⚠️ 关于本教程

注意,本教程已不符合目前环境,win11下已经有了自带的wslgui,ROS2也已经被大规模使用,大致安装流程也许尚且相似,有时间我会重新再写一篇教程

这个文章总结了大量安装教程,再通过个人经验解决了一些个人遇到的小bug

本教程针对ROS1而非ROS2

本教程写于2022年2月份,所使用的软件版本也为该时间点所能获取的最新版本(除win10系统版本外)

以下是本教程所用的各类软件版本,仅供参考,较为建议安装所有能获得的最近LTS版本(稳定版)

  • Ubuntu 20.04 — 操作系统

  • ROS Noetic — 所需软件本体

  • CUDA 11.6 — GPU加速(使用独显必备,N卡限定)

(后来笔者发现其实ROS中的gazebo使用GPU不需要CUDA只需要把驱动安装好就行,不过这个时候教程已经写完了。ROS中有些东西还是会用到CUDA的到时候再装也来得及)

本教程将分为三个部分来安装上述软件和系统,ROS和CUDA都是需要在Ubuntu里进行安装的,其中ROS的版本与Ubuntu的版本相关,请确保两者版本的正确来避免不必要的麻烦。

此三项教程相对独立,可以单独使用,不过在单独使用时一定要确保版本的正确性。

💡 温馨提示:如果想向Terminal或者powershell里复制粘贴文本,在外面复制好之后,在相应Terminal中点击右键即可。


WSL2的安装

  • 首先,你要保证你的win10系统版本是能够使用WSL2的(Win11也是OK的)

按下 Win + R    输入 winver 点击 确定

确认win10版本

如图中红框内数字,请升级至19041以后的版本。

控制面板\所有控制面板项\程序和功能 页面点击 启用或关闭Windows功能

勾选如下图红框内的两个选项 并点击确定

开启WSL功能

如果是第一次勾选这两项,电脑应该会要求重新启动计算机。请按指示重启后再继续操作。

💡 可选项:通过Microsoft Store安装Windows Terminal 这是个集成了powershell、 windows command prompt(命令提示符)、linux的Terminal等为一体的很方便的集合体Terminal。

Windows Terminal 界面

以管理员模式运行Powershell或者命令提示符(cmd)或者上述Windows Terminal (打开powershell或者cmd的页面) 输入如下指令

默认来说,这将自动给你安装一个Ubuntu的LTS版本,,如果并非第一次安装WSL,这可能会在屏幕上显示出WSL的默认指令(help text)

安装成功后可以先运行后面转换默认到WSL version 2的指令,这样可以省去单独改变分发版本的步骤,具体指令在后面。

这时我们可以输入

来查看可以下载的分发版本以及其版本分发名

下图红框内就是我们需要的分发名

分发版列表及名称

本教程安装的是Ubuntu 20.04 LTS 版本,所以我们输入

如果在安装过程中遇到如下问题,这是由于Win10系统版本不够高导致的(至少我的老笔记本是这个原因)这时候就需要手动进行一下Linux Kernel的升级。(其实就是后面这个aka.ms...这个网址)

win10版本不够则需要一定程度的手动安装

我们直接从这个网址下载: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

之后再打开Ubuntu 20.04 LTS的界面就可以正常安装了,会需要设置一个该系统的用户名和密码(用户名尽可能简洁点,因为后面Linux路径里桌面是在 ~/home/用户名/ 下的,太长会导致Terminal 看起来很不美观。

在安装结束后,我们需要吧WSL版本改成WSL2 (这一步其实可以提前与分发版的安装,这样后面就不需要再次设置分发版的WSL版本了)。

如果你安装了多个分发版本,你也许需要以下指令

查看已安装的分发

查看已安装的分发及其WSL版本

-s 设置默认启动的分发

-d 启动此分发

最后一步,将相应分发版升级成WSL2版本。

也许刚才你已经通过指令发现我们的分发版还处于version 1(WSL 1)

所以,我们需要升级其至WSL2(如果已经是version 2了就可以忽略本条指令)

至此 Ubuntu 20.04 LTS版本已经再WSL2中安装成功。

可以直接从开始菜单打开该系统,或者再上述的Windows Terminal中启动

有关换源

如果你在国内,这一步可能是有必要的,切换下载原到更快的国内节点,比如这里我们切换到阿里源。

有关于图形界面(子系统桌面)

💡 如果你使用的是win11的系统,那么恭喜你,你可以使用微软自带的Linux GUI来运行Linux桌面,不过目前这仍处于预览测试中,这里还是建议不要盲目升级至Win11而导致别的兼容性问题。具体安装方法请查阅:https://docs.microsoft.com/zh-cn/windows/wsl/tutorials/gui-apps


本教程用到的方法是使用Xserver进行画面监听,直接从子系统发送到本机IP地址来实现界面数据传输。

首先安装VcXsrv: https://sourceforge.net/projects/vcxsrv/

然后,我们需要知道本机地址,在powershell或者cmd中输入

ipconfig

此时有两种选择,讲图像传输回WSL的虚拟地址或是直接的本机地址。如下是虚拟地址的版本,本机地址也是取相应的IPv4地址即可。

查看IP地址

我们需要在.bashrc文件中添加一行输出地址. (在Ubuntu下输入)

echo "export DISPLAY=172.19.16.1:0.0" >> ~/.bashrc

其中 “172.19.16.1” 就是你刚刚得到的ipv4地址,不要忘记写后面的  :0.0

如果要修改这个IP参数的话,需要修改 ~/.bashrc 文件,有很多种可以在Terminal中编辑文件的方法,比如笔者使用的vim。

如果没有vim可以先安装vim。

sudo apt-get install vim

安装结束后就就可以打开了,输入

vim ~/.bashrc

i 进入编辑模式。

修改之后按下 Esc 在输入 :wq 就可以保存回到Terminal里。

其他vim的指令可以查阅: Linux vi/vim | 菜鸟教程 (runoob.com)

之后重新载入一下这个文件 (这个指令后面会用到很多次,因为这样就不需要重新打开个新的Terminal了)

source ~/.bashrc

还需要安装一个图形桌面环境,比如Xfce4

在Linux的Terminal中输入如下几行:

sudo apt-get update sudo apt-get upgrade -y sudo apt-get install xfce4

中间会跳出一个页面问你选择什么管理器,随便选哪个都行。(反正我随便选了个)

安装好后,启动桌面:

startxfce4

如果无法正确输出并显示类似如下提示,可以添加 -ac 参数到 Xlaunch中

添加-ac参数

 💡 如果在开启防火墙的状态下,打开Xlaunch时没有跳出提醒而导致无法正确连接桌面,可以先将防火墙关闭即可正常连接。(笔者的老旧笔记本亲测)


ROS的安装

💡 其实官方自带的教程已经足够详细:http://wiki.ros.org/noetic/Installation/Ubuntu#Ubuntu_install_of_ROS_Noetic                         本教程会针对某些部分进行说明和修正。

以下操作全在linux的terminal中进行。

第一步:添加软件源

第二步:设置密钥

官方版是需要使用curl从论坛获取一个新的密钥,这里我们直接输入现成的

第三步:正式安装

首先确保linux的各种包都是最新的

然后安装完全版的ros noetic

这将花费一段时间,请保证网络连接状态。

第四步:环境设置(工作区)workspace

这一步有两种选择,一种是按照官方wiki的直接在安装目录来建立环境。

还有一种是笔者推荐的,在自定义目录下建立环境。

首先读取一下安装目录下的setup.bash文件

然后创建自定义目录。

这里**-p代表同时建立两层路径,自定义名称可以任取,但是src这个目录名称是固定的,这里笔者写为。(~**就是代表home目录)这个src目录也是以后存放ROS源文件的地方。

我们来到ros_ws目录下。

在该目录下,输入

将会自动开始工作区剩余文件的补充。(build文件夹和devel文件夹)

在结束后(没有致命性error的情况下),我们载入这个workspace的环境变量。

如果想要以后每次打开Terminal都会自动载入这个环境变量,请输入:

当然也可以直接输入这一条指令然后重载 .bashrc这个文件。

💡 注意:以上ros_ws是笔者自定义的工作区名称,安装时可根据需要自行更改。


第五步:依赖库

我们需要安装ros的依赖库文件,这一步基本和官网wiki操作一致。

最后初始化rosdep

此时,你可能会遇到神秘问题导致无法正确初始化,比如:

我只能说,懂得都懂这是什么原因,你需要跨过山和大海或者使用一些魔法,如果搞不定的话可以私聊问笔者。(其实无非是8888和8844)

成功后:

成功之后可以尝试以下指令来确认安装成功。(Beginner Tutorials 小海龟)

新开一个Terminal 打开小海龟页面

再新开一个Terminal输入方向控制指令

然后就可以输入方向键控制小海龟移动了。(在最后一个terminal按方向键)

还可以输入

查看ROS图


有关如何让gazebo使用独立显卡使画面变得丝滑

首先,在terminal运行 (未确定是否必须)

DRI_PRIME=1 gazebo

运行gazebo 同时查看显卡和cpu的占用率,如果独显一点都没用上,那你需要更新你的显卡驱动

由于WSL的特殊性,你只需要更新你Windows的显卡驱动即可,Windows会自动给WSL配置显卡驱动。(笔者没意识到这件事是因为在主机上使用时直接先安装了CUDA,忘记了这步的操作,后面在测试用的笔记本安装时意识到CUDA应该和gazebo无关)

By KevinD

CUDA的安装(只用ROS的话非必须)

💡 英伟达出了个详细的安装教程:https://docs.nvidia.com/cuda/wsl-user-guide/index.html 

 本文将会尽可能简化的同时成功安装CUDA


第一步:检查显卡驱动

首先,你必须要有独显才能启用这个功能,而且还必须是英伟达的独显(AMD no)

这一步就是确保你正确安装过独显驱动,现在的驱动去官网就可以找到,本文将不再赘述。

第二步:前置及依赖库

首先还是先更新

sudo apt update

安装gcc g++ make

sudo apt install gcc g++ make

安装依赖库

sudo apt install libglu1-mesa libxi-dev libxmu-dev libglu1-mesa-dev freeglut3-dev

第三步:下载CUDA Toolkit

首先去官网: https://developer.nvidia.com/zh-cn/cuda-toolkit

点击立即下载,之后会进入选择页面

按照如图中方法选择之后,我们会发现下面已经为我们准备好了需要的指令,依次输入linux的terminal中就好。

比如本文安装的11.6.1版本:

wget <https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin> sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget <https://developer.download.nvidia.com/compute/cuda/11.6.1/local_installers/cuda-repo-wsl-ubuntu-11-6-local_11.6.1-1_amd64.deb> sudo dpkg -i cuda-repo-wsl-ubuntu-11-6-local_11.6.1-1_amd64.deb sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-6-local/7fa2af80.pub sudo apt-get update sudo apt-get -y install cuda

第四步:写入环境变量

CUDA工具箱安装成功后,在~/.bashrc中添加环境变量(使用vim打开或者gedit打开都行)

export PATH=$PATH:/usr/local/cuda-11.6/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.6/lib64:/usr/lib/x86_64-linux-gnu

相关链接

Install WSL | Microsoft Docs: https://docs.microsoft.com/en-us/windows/wsl/install

旧版 WSL 的手动安装步骤 | Microsoft Docs: https://docs.microsoft.com/zh-cn/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package

QA Section

Q1: 为什么不是ROS2

A1: ROS2 确实会更加适合未来的工作和开发,但是由于兼容性、导师的习惯、公司的习惯等等问题ROS1本身仍然有必要学习,并且ROS2是会对ROS1进行兼容的。ROS1最后的LTS版本仍有将近4年的支持时间。说到底,只是因为笔者最近在用ROS1,并且还没开始学习ROS2,也许你在不远的将来就会看见ROS2的安装教程。

Q2: 为什么不使用虚拟机

A2: ROS中涉及大量图形计算和实时显示,虚拟机无法使用计算机的全部性能,WSL2作为微软自家推出的Windows下的子系统,可以更好的发挥计算机性能,是除了虚拟机、双系统之外的单计算机目前最优解(当然更好的解决方式永远是你有两台物理计算机,但是需要$$$)。



投诉或建议