本文可以作为WSL2+ROS的安装教程,也可作为Ubuntu20.04+Noetic的安装教程(忽略WSL安装部分即可)

1. 安装WSL2+Ubuntu

特别说明:WSL2目前和Vmware 15.5+版本是支持共存的。故安装WSL2后是也是可以用Vmware虚拟机的

WSL是Windows Sub Linux的简写,即Windows的一个Linux子系统。方便之处在于这个Linux子系统可以和Windows共用文件系统,也方便使用Windows的IDE对代码进行编辑。整体使用体验会比纯粹用Linux虚拟机效果稍微好一点。

因为安装Vmware虚拟机比较重,为了方便ROS安装和折腾起见,于是选用WSL2作为ROS的开发系统。

启用WSL

  1. 打开Windows功能的”适用于Linux的Windows子系统“和”虚拟机平台“,随后重启电脑。
  1. 重启完毕后进入cmd控制台,输入下列指令,将wsl设置为wsl2,并更新wsl到最新版本。
wsl --set-default-version 2
wsl --update 
wsl --shutdown
  1. 安装Ubuntu20.04

因为用的是Ros Noetic,所以安装的是Ubuntu20.04,如果要安装其他版本,可以执行“wsl –list –online”查看。

这里使用Ubuntu20.04,输入以下指令在线安装:

> wsl --list --online
·······(略)
Ubuntu-20.04                           Ubuntu 20.04 LTS
·······(略)
> wsl --install -d Ubuntu-20.04

等待安装完成后,会自动弹出Ubuntu终端。如果出现如下报错,可以下载新的内核程序解决:

WslRegisterDistribution failed with error: 0x800701bc

内核下载地址:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

安装完这个程序后问题就解决了,重新打一遍安装指令就行。

配置Ubuntu,并安装OpenGL最新版

Ros需要新版本的OpenGL方可运行,这边也一同安装开启。

【可选】换源

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo rm /etc/apt/sources.list
sudo nano /etc/apt/sources.list

然后复制内容进去:

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

保存,最后"apt update" + “apt upgrade” 完成软件包的升级。

安装/更新OpenGL

ROS的GUI(如:RVIZ)需要新版本的OpenGL,然而部分系统不带OpenGL,或者存在旧版本的OpenGL。所以我们需要安装/升级它

首先尝试运行“glxinfo -B”,如果找不到命令执,则可以尝试安装。

sudo add-apt-repository ppa:kisak/kisak-mesa
sudo apt-get install mesa-utils

如果有执行成功,但是“OpenGL version string:”为1.4,则需要升级。

sudo add-apt-repository ppa:kisak/kisak-mesa
sudo apt update && sudo apt upgrade

至此,Ubuntu20.04安装成功。

2. 安装Ros-Neotic

添加ROS源

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

如果第二条命令因为网络原因执行失败,可以考虑使用类似于ghproxy的加速服务。

修改后的命令如下

curl -s https://mirror.ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

添加Ros源并下载

sudo apt update
sudo apt install ros-noetic-desktop-full

慢慢等待,安装完成之后继续安装

sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

随后设置环境变量

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

并初始化rosdep

sudo rosdep init
rosdep update

如果rosdep安装失败,可以尝试修改配置,步骤如下:

如果安装能够成功,可跳过。

修复墙内网络问题

  1. 新建/修改 “/etc/ros/rosdep/sources.list.d/20-default.list”,把"https://raw.githubusercontent"开头的链接前面加上https://mirror.ghproxy.com/"

    # os-specific listings first
    yaml https://mirror.ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx
    
    # generic
    yaml https://mirror.ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
    yaml https://mirror.ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
    yaml https://mirror.ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
    gbpdistro https://mirror.ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte
    
    # newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead
    
  2. 修改 “/usr/lib/python3/dist-packages/rosdistro/rosdep2/rep3.py"中,“REP3_TARGETS_URL"变量。给这一变量内容前面同样加上"https://mirror.ghproxy.com/”

  3. 修改 “/usr/lib/python3/dist-packages/rosdistro/init.py” 中,“DEFAULT_INDEX_URL” 变量,操作方式同上。

  4. 再次运行"sudo rosdep init” 和 “rosdep update”,观察是否成功。

测试

以turtlesim为例,打开三个linux终端,分别输入:

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

参考文档:

  1. https://blog.csdn.net/LaineGates/article/details/120910628
  2. https://blog.csdn.net/lemonxiaoxiao/article/details/119454855