Windows如何优雅的运行ROS2/linux

前言

在ROS/ROS2开发过程中,大家普遍使用到的分布式开发方法都是基于虚拟机/双系统进行,本质上是希望基于Ubuntu良好的生态环境进行,但是两种方式各有各自的好处,也有各自的弊端,例如虚拟机很大而且并不能运行GPU;又比如双系统会导致个人数据碎片化(如想在ubuntu下使用微信/qq/word);基于一系列的理由了,笔者想在windows下进行ROS/ROS2的开发,是否有比较好的方式呢?WSL,window下的子系统;

安装WSL

首先判断你的电脑是否支持 WSLg ,这里有一个链接:https://github.com/microsoft/wslg#pre-requisites, 一般而言,WSLg 在 Windows 11 和 Windows 10 上都受支持

支持WSLg

如果可以的话,点击 https://aka.ms/wslstorepage 该网址即可安装 WSLg;
安装 WSlg 之后,打开 powershell 并输入 wsl --install 即可;
如果你的电脑不支持 WSLg 请执行以下步骤

不支持WSLg

安装 WSL2 和 Ubuntu

  1. 安装 WSL2Ubuntu

  2. 安装 vcxsrv,它将在您的桌面中创建一个快捷方式。

    • 下载文件到您的用户主目录: C:\Users\USERNAME\config.xlaunch
    • 点击并键入 XLaunch,点击 “在此处添加快捷方式”。
    • 打开 运行,键入 shell:startup,按 Enter。
    • 将快捷方式移至 C:\Program Files\VcXsrv\xlaunch.exe
    • 右键单击该快捷方式上的 “属性”,更改 Target 为: "C:\Program Files\VcXsrv\xlaunch.exe" -run C:\Users\USERNAME\config.xlaunch
  3. 在 WSL 中,将以下内容添加到末尾或等效项:~/.bashrc

     if [ -z $DISPLAY ]; then
       export DISPLAY="$(tail -1 /etc/resolv.conf | cut -d' ' -f2):0"
     fi
    
  4. 若要测试所有内容,请打开新的 WSL shell

     sudo apt install x11-apps && xcalc
    
    • 您可能会看到以下错误:Error: Can't open display: 172.20.192.1:0
    • 打开具有高级安全性的 Windows Defender 防火墙,检查入站规则并确保 VcXsrv Windows Server 不会阻止专用连接。

依赖下载

完成以上操作之后边已经能够在WSL中进行一些Linux操作了,接下来还需要下载一些依赖

sudo apt-get install build-essential g++ libx11-dev libxkbfile-dev libsecret-1-dev libkrb5-dev python-is-python3

再安装编译依赖项

sudo apt install python3 python-is-python3 libsecret-1-dev libxss1 libx11-dev libxkbfile-dev libasound2 libgtk-3-0 libgdk-pixbuf2.0-0 libnss3 libxtst6 libxi6 libxdamage1 libxcursor1 libxcomposite1 libx11-xcb1 libgbm1

基于Vsocde进行开发

如果只是基于终端进行一系列操作虽然也已经能够满足我们的需求了,但是依旧不够丝滑,接下来介绍如何基于Vsocde和WSL进行联动;

安装Vscode

此处推荐使用:https://code.visualstudio.com/docs/?dv=win64user&build=insiders
点击该链接即可下载安装;

配置远程登录

点击该链接即可自动给 Vscode 配置 WSL :https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl

配置结果展示

安装ROS2

安装 ROS2 的方式很多,正巧现在各种一键安装ROS2的内容很火热,此处就摘选古月老师的教程了
https://www.guyuehome.com/38278

ROS2系统安装

安装步骤如下:

  1. 设置编码
    $ sudo apt update && sudo apt install locales
    $ sudo locale-gen en_US en_US.UTF-8
    $ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 
    $ export LANG=en_US.UTF-8
    
  2. 添加源

    $ sudo apt update && sudo apt install curl gnupg lsb-release 
    $ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg 
    $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
    

    如遇报错“Failed to connect to raw.githubusercontent.com”,可参考https://www.guyuehome.com/37844

  3. 安装ROS2

    $ sudo apt update
    $ sudo apt upgrade
    $ sudo apt install ros-humble-desktop
    
  4. 设置环境变量
    $ source /opt/ros/humble/setup.bash
    $ echo " source /opt/ros/humble/setup.bash" >> ~/.bashrc
    
    至此,ROS2就已经在系统中安装好了。

效果展示

开发案例

下载一些图形化展示界面

安装 Gnome 文本编辑器

Gnome 文本编辑器是 GNOME 桌面环境的默认文本编辑器。

sudo apt install gnome-text-editor -y

若要在编辑器中启动 bashrc 文件,请输入:gnome-text-editor ~/.bashrc

安装 GIMP

GIMP 是一种免费的开源光栅图形编辑器,用于图像操作和图像编辑、自由形态绘图、不同图像文件格式之间的转码,以及更专业的任务;

sudo apt install gimp -y

若要启动,请输入:gimp

安装 Nautilus

Nautilus 也称为 GNOME Files,是 GNOME 桌面的文件管理器。 (类似于 Windows 文件资源管理器)。

sudo apt install nautilus -y

若要启动,请输入:nautilus

安装 X11 应用

X11 是 Linux 窗口管理系统,这是随它一起提供的各种应用和工具的集合,例如 xclock、xcalc 计算器、用于剪切和粘贴的 xclipboard、用于事件测试的 xev 等。有关详细信息,请参阅 x.org 文档。

sudo apt install x11-apps -y

安装适用于 Linux 的 Google Chrome

将目录更改为 temp 文件夹:cd /tmp
使用 wget 下载它:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

安装:

sudo apt install --fix-missing ./google-chrome-stable_current_amd64.deb

*--fix-missing 选项用于修复安装过程中可能出现的缺少依赖项。 命令中的 ./ 指定 .deb 文件所在的当前目录。 如果 .deb 文件位于其他目录中,则需要在命令中指定该文件的路径。

若要启动,请输入:google-chrome

案例演示

此处我以 originbot_desktop: https://gitee.com/guyuehome/originbot_desktop.git 为例
正常的编译正常 colcon build 即可,遇到没有的功能包直接 sudo apt install ros-humble-xx即可;

以下以gazebo巡线案例为例作为展示:

小结

通过以上方式可以让大家便捷的在Windows端进行Linux开发,目前笔者的使用上来看大部分的情况都是足够应对的;

参考链接:

https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/gui-apps

https://www.guyuehome.com/38278

https://gitee.com/guyuehome/originbot_desktop