Windows 11 WSL2 安装并运行 ROS
博文编辑中…
适用版本:WSL2
Ubuntu-20.04
ros-noetic
ros-galactic
1. WSL
1.1. 安装 WSL2 与 Ubuntu-20.04
在windows
设置(设置->应用->可选功能->更多 Windows 功能)中启用Virtual Machine Platform(虚拟机平台)
与适用于 Linux 的 Windows 子系统
:
等待安装完成后,升级wsl
:
1 | 升级 |
在Minecroft Store
中下载Ubuntu-20.04 LTS
:
安装完成后,在开始菜单或者Windows 终端
(Windows 11)中启动Ubuntu
。
2. ROS
2.1. 安装 ROS
1 | # 添加 ros 源 |
在rosdep update
处报错的,参考3.9
节,使用rosdepc
代替rosdep
。
另外,建议参照3.12
节,将环境变量配置添加到~/.bashrc
中去。
运行例程,验证安装:
1 | rosrun turtlesim turtlesim_node |
如果成功启动turtlesim
,即安装完成。
若安装及使用过程中报错,在本文第三节附录节看看是否有对应的解决方案。
2.2. 安装 ROS 2
这里我们安装ROS2
的galactic
版本。
1 | sudo apt install software-properties-common |
和2.1
小节同理,若在rosdep update
处报错的,参考3.9
节,使用rosdepc
代替rosdep
。
另外,同样建议参照3.12
节,将环境变量配置添加到~/.bashrc
中去,但是ros2
的环境变量配置文件应为/opt/ros/galactic/setup.bash
。
需要注意的是,ros
与ros2
的环境变量不可同时配置,同时,通过这样加载环境变量的方式,可以做到同时安装ros
与ros2
且相互不冲突。
3. 附录
3.1. WSL 制作快照
1 | 备份 |
上述命令意为:
- 备份
Ubuntu-20.04
到D:\WSL2_BACKUP\wsl-ubuntu-20.04-os-init.tar
处,如果WSL2_BACKUP
目录不存在,则要手动新建; - 从
D:\WSL2_BACKUP\wsl-ubuntu-20.04-os-init.tar
出导入Ubuntu-20.04
,将该子系统的磁盘映像放到D:\WSL2
目录下,并指定为wsl2
版本; - 设置默认用户为
<user name>
,否则默认为root
用户,如果是Ubuntu-18.04
,则将ubuntu2004
改为ubuntu1804
即可,如果是其他的版本也是一样的道理。
3.2 安装 NVIDIA WSL CUDA
需要注意的是,WSL2
的Ubuntu
系统中无需再安装任何驱动,唯一需要安装的驱动仅是在windows
本机中安装的NVIDIA
驱动,而这个驱动我相信使用了NVIDIA
显卡的个人电脑应该都有所安装。
下面是要在Ubuntu
系统中进行的操作:
在NVIDIA CUDA
官方下载页选择对应的版本,注意要选择WSL-Ubuntu
版,Installer Type
可以根据自己的实际情况选择,我这里选择的是deb(network)
:
选择完成后,按照官方给出的安装步骤安装:
1 | wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin |
每个版本皆有区别,此处不宜照搬。
配置环境变量,打开~/.bashrc
:
1 | sudo vim ~/.bashrc |
在~/.bashrc
的末尾加入:
1 | export PATH=/usr/local/cuda-11.7/bin/${PATH:+:${PATH}} |
最后,运行nvcc --version
验证CUDA
是否安装成功,若正确打印版本信息等内容,则安装成功。
3.3 安装 cuDNN
在windows shell
中检查Ubuntu
版本,并记录下来:
1 | wsl -l |
我的Ubuntu
版本是20.04
。
在ubuntu shell
中检查CUDA
版本,并记录下来:
1 | nvcc --version |
我的cuda
版本是11.7
。
在官方网站注册后,下载对应的cuDNN
版本:
https://developer.nvidia.com/cudnn-download-survey
这里,根据自己的ubuntu
系统版本选择相应的deb
资源包。
3.4 安装 TensorRT
首先,与安装CUDA
相同,获取、更新资源库,但并不执行最后一步的install cuda
命令:
1 | wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin |
接着,在下列三者选一进行安装:
- 仅用于运行TensorRT C++ 应用程序:
1 | sudo apt-get install libnvinfer8 libnvonnxparsers8 libnvparsers8 libnvinfer-plugin8 |
- 也用于构建TensorRT C++ 应用程序:
1 | sudo apt-get install libnvinfer-dev libnvonnxparsers-dev |
- 对于运行 TensorRT Python 应用程序:
1 | python3 -m pip install numpy |
3.5 安装 NVIDIA DeepStream SDK
3.6 安装 USBIP
3.7 在 WSL 2 中使用 USB 摄像头
3.8 下载 gazebo 模型
1 | # 进入 gazebo 用户目录,没有此目录则新建 |
3.9. rosdep update timeout
用@鱼香ROS开发的rosdepc
工具代替rosdep
:
1 | # 没有 pip 命令则安装 pip |
以后遇到rosdep
的地方都使用rosdepc
即可。
3.10. Resource not found:xxx
缺少包,安装对应的包:
1 | sudo apt install ros-noetic-PACKAGE |
上述命令是ros noetic
版本的包的安装命令,对于其他版本的ros
,需稍作更改。
若安装完成后仍然报错,则是因为环境变量没有更新,运行:
1 | source /opt/ros/noetic/setup.bash |
具体路径以自机为准。
关于环境变量的配置,参见4.7
小节。
3.11. /usr/bin/env ‘python’: No such file or directory
因为ros noetic
版本使用的是python3
,这里使用符号链接,将python
链接到python3
:
1 | whereis python3 |
3.12. ImportError: No module named rospy
1 | source /opt/ros/noetic/setup.bash |
但是只是这么做的话,每一次打开会话都需要配置环境变量,为了使得环境变量自动生效,首先打开~/.bashrc
:
1 | sudo vim ~/.bashrc |
在~/.bashrc
的末尾加入:
1 | if [ -f /opt/ros/noetic/setup.bash ]; then |
更新:
1 | source ~/.bashrc |
这样,无论是重启还是重新打开会话,都不需要再更新环境变量了。
3.13. rosrun tf view_frames
运行失败
报错:
Listening to /tf for 5.0 seconds
Done Listening
b'dot - graphviz version 2.43.0 (0)\n'
Traceback (most recent call last):
File "/opt/ros/noetic/lib/tf/view_frames", line 119, in <module>
generate(dot_graph)
File "/opt/ros/noetic/lib/tf/view_frames", line 89, in generate
m = r.search(vstr)
TypeError: cannot use a string pattern on a bytes-like object
打开对应的文件:
1 | sudo vim /opt/ros/noetic/lib/tf/view_frames |
修改第 89 行:
1 | m = r.search(vstr.decode('utf-8')) |
3.14. assert verb_extensions, 'No verb extensions'
colcon build 报错
这是个 python 3.10 的通用问题,解决方法是:
1 | pip install pytest-rerunfailures |
接着重新编译:
1 | colcon build |
4. 参考
- 【古月居】古月·ROS入门21讲
- WSL1升级为WSL2
- ROS2学习笔记(1)安装ROS2 Galactic
- Run Linux GUI apps on the Windows Subsystem for Linux
- Running ROS on Windows 10
- 解决rosdep update失败问题
- ROS 中的错误Done checking log file disk usage. Usage is <1GB.
- ROS入门——解决:Resource not found:xxx
- ImportError: No module named rospy
- ubuntu 20.04 “rosrun tf view_frames“运行失败
- NVIDIA CUDNN DOCUMENTATION
- NVIDIA TENSORRT DOCUMENTATION
- NVIDIA DeepStream SDK 开发人员指南
- Github Issues: colcon build fails