ROS在Windows与macOS的安装
ROS(Robot Operating System)是一个用于机器人编程和开发的框架,官方只提供x86的Ubuntu和Debian的预编译版本,其他平台需要自己编译。然而,日常笔记本电脑通常是Windows和macOS系统的,那么想安装ROS要么通过虚拟机的方式,要么通过双系统的方式。这里提供另外两种轻量级“原生”的解决方案。其中RobStack项目方案在M1芯片的macOS经过测试,WSL方案在Windows11(x86_64)上经过测试。
RoboStack(macOS首选)
RoboStack提供了Linux,macOS(Intel & Apple Silicon)和Windows的ROS预编译版本,它通过conda
和mamba
管理环境,意味着它可以有效隔离ROS的开发环境并与TensorFlow/PyTorch等框架方便集成。安装后,也支持使用rosdep
安装依赖。
安装的方法很简单,首先确保mamba
已被安装以及conda-forge
已启用:
conda install mamba -c conda-forge
接下来安装ros-noetic-desktop-full
:
mamba create -n ros-noetic ros-noetic-desktop-full python=3.9 -c robostack -c robostack-experimental -c conda-forge --no-channel-priority --override-channels
conda activate ros-noetic
它提供的package在robostack
和robostack-experimental
channel,所以如果需要手动安装相关的包,启用这两个channel,如:
conda install -c robostack -c robostack-experimental -c conda-forge ros-noetic-rqt
局限性:
- 目前只支持
ros-noetic
和python=3.9
; - Windows用户不支持
Powershell
,只支持Command Prompt terminal
; 虽然
GitHub
没有明确说支持Apple Silicon
的macOS
,但经过测试是可以正常使用的,可能会存在一些小问题,如#237(已修复),如果出现这种情况,一种workaround是安装x86_64
版本的二进制包并使用Rosetta
转译:安装并测试:
CONDA_SUBDIR=osx-64 mamba create -n rosetta ros-noetic-desktop-full python=3.9 -c robostack -c robostack-experimental -c conda-forge --no-channel-priority --override-channels conda activate rosetta conda env config vars set CONDA_SUBDIR=osx-6 python -c "import platform;print(platform.machine())"
注意这种方式安装将无法使用
TensorFlow
的GPU加速;
WSL2(仅WIndows)
由于在较新的WSL2中,微软提供了GUI程序的支持,因为我们可以考虑使用WSL2来运行ROS。先安装Ubuntu20.04系统,接下来正常安装ROS noetic即可。可能会遇到的问题主要有两个:
- 部分外部设备(主要是USB摄像头,蓝牙设备等)无法挂在到WSL2上;
- 与不在WSL2上运行的ROS节点通信存在问题。
第一个问题可以通过usbipd
等方案解决(需要折腾,不建议,这种情况下建议改用第一个方案),第二个问题作者提供一个无需配置的脚本解决,问题描述如下:
假设我们希望在Windows笔记本上与在同一局域网下的机器人通信。WSL2的网络和宿主机(Host,指Windows)的网络是隔离的,是通过NAT的方式联网。这意味着WSL2上运行ROS可以无障碍地访问机器人,然而机器人却只能直接与Windows通信,却没办法与WSL2上的ROS通信。这里提供一个workaround:设置防火墙规则和端口映射规则,即允许机器人通过防火墙访问Windows网络适配器的端口,然后再将传入连接转发到WSL上。注意环境变量中ROS_IP
应该填写Windows在局域网中的IP。这里提供一个作者写的小工具自动完成这件事情:
https://github.com/ColorsWind/WSL-Port-Forwarding。
使用方法也很简单,以管理员身份启动命令行,输入wsl
进入Ubuntu系统,然后安装并运行程序
pip3 install wsl_port_forwarding
port_forwarding
会自动完成端口转发与防火墙设置。退出程序按下Ctrl
和C
即可。
总结
RoboStack较原生,在macOS特别是Apple Silicon芯片上推荐使用这种方案。在Windows下如果需要Linux的环境建议使用WSL2的方案。