noetic-background.png

ROS在Windows与macOS的安装

ROS(Robot Operating System)是一个用于机器人编程和开发的框架,官方只提供x86的Ubuntu和Debian的预编译版本,其他平台需要自己编译。然而,日常笔记本电脑通常是Windows和macOS系统的,那么想安装ROS要么通过虚拟机的方式,要么通过双系统的方式。这里提供另外两种轻量级“原生”的解决方案。其中RobStack项目方案在M1芯片的macOS经过测试,WSL方案在Windows11(x86_64)上经过测试。

ros_noetic_logo.webp

RoboStack(macOS首选)

RoboStack提供了Linux,macOS(Intel & Apple Silicon)和Windows的ROS预编译版本,它通过condamamba管理环境,意味着它可以有效隔离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在robostackrobostack-experimentalchannel,所以如果需要手动安装相关的包,启用这两个channel,如:

conda install -c robostack -c robostack-experimental -c conda-forge ros-noetic-rqt

局限性:

  1. 目前只支持ros-noeticpython=3.9
  2. Windows用户不支持Powershell,只支持Command Prompt terminal
  3. 虽然GitHub没有明确说支持Apple SiliconmacOS,但经过测试是可以正常使用的,可能会存在一些小问题,如#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即可。可能会遇到的问题主要有两个:

  1. 部分外部设备(主要是USB摄像头,蓝牙设备等)无法挂在到WSL2上;
  2. 与不在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

会自动完成端口转发与防火墙设置。退出程序按下CtrlC即可。

总结

RoboStack较原生,在macOS特别是Apple Silicon芯片上推荐使用这种方案。在Windows下如果需要Linux的环境建议使用WSL2的方案。

最后修改:2024 年 11 月 13 日
如果觉得我的文章对你有用,请随意赞赏