Loading... ![noetic-background.png](https://www.colors-wind.net/usr/uploads/2022/04/322411333.png) # ROS在Windows与macOS的安装 [ROS](https://www.ros.org/)(Robot Operating System)是一个用于机器人编程和开发的框架,官方只提供x86的Ubuntu和Debian的[预编译](http://wiki.ros.org/noetic/Installation)版本,其他平台需要自己编译。然而,日常笔记本电脑通常是Windows和macOS系统的,那么想安装ROS要么通过虚拟机的方式,要么通过双系统的方式。这里提供另外两种轻量级“原生”的解决方案。其中RobStack项目方案在M1芯片的macOS经过测试,WSL方案在Windows11(x86_64)上经过测试。 ## RoboStack(macOS首选) [RoboStack](https://github.com/RoboStack/ros-noetic/)提供了Linux,macOS(Intel & Apple Silicon)和Windows的ROS预编译版本,它通过`conda`和`mamba`管理环境,意味着它可以有效隔离ROS的开发环境并与TensorFlow/PyTorch等框架方便集成。安装后,也支持使用`rosdep`安装依赖。 安装的方法很简单,首先确保`mamba`已被安装以及`conda-forge`已启用: ```bash conda install mamba -c conda-forge ``` 接下来安装`ros-noetic-desktop-full`: ```bash 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,如: ```bash conda install -c robostack -c robostack-experimental -c conda-forge ros-noetic-rqt ``` 局限性: 1. 目前只支持`ros-noetic`和`python=3.9`; 2. Windows用户不支持`Powershell`,只支持`Command Prompt terminal`; 3. 虽然`GitHub`没有明确说支持`Apple Silicon`的`macOS`,但经过测试是可以正常使用的,可能会存在一些小问题,如[#237](https://github.com/RoboStack/ros-noetic/issues/237)(已修复),如果出现这种情况,一种workaround是安装`x86_64`版本的二进制包并使用`Rosetta`转译: 安装并测试: ```bash 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系统,然后安装并运行程序 ```bash pip3 install wsl_port_forwarding port_forwarding ``` 会自动完成端口转发与防火墙设置。退出程序按下`Ctrl`和`C`即可。 ## 总结 RoboStack较原生,在macOS特别是Apple Silicon芯片上推荐使用这种方案。在Windows下如果需要Linux的环境建议使用WSL2的方案。 最后修改:2022 年 04 月 18 日 © 允许规范转载 赞 0 如果觉得我的文章对你有用,请随意赞赏