WSL2(Windows Linux子系统)+ROS Noetic安装笔记
本文可以作为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
- 打开Windows功能的”适用于Linux的Windows子系统“和”虚拟机平台“,随后重启电脑。
- 重启完毕后进入cmd控制台,输入下列指令,将wsl设置为wsl2,并更新wsl到最新版本。
wsl --set-default-version 2
wsl --update
wsl --shutdown
- 安装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安装失败,可以尝试修改配置,步骤如下:
如果安装能够成功,可跳过。
修复墙内网络问题
-
新建/修改 “/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
-
修改 “/usr/lib/python3/dist-packages/rosdistro/rosdep2/rep3.py"中,“REP3_TARGETS_URL"变量。给这一变量内容前面同样加上"https://mirror.ghproxy.com/”
-
修改 “/usr/lib/python3/dist-packages/rosdistro/init.py” 中,“DEFAULT_INDEX_URL” 变量,操作方式同上。
-
再次运行"sudo rosdep init” 和 “rosdep update”,观察是否成功。
测试
以turtlesim为例,打开三个linux终端,分别输入:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
参考文档: