Skip to content

Webots 安装(macOS)

目标: 安装 webots_ros2 包并在 macOS 上运行仿真示例。

教程级别: 进阶

预计时间: 10 分钟

webots_ros2 包提供了 ROS 2 与 Webots 之间的接口。

它包含多个子包,其中 webots_ros2_driver 用于启动 Webots 并与之通信。

其余子包主要是示例,展示该接口的各种用法。

本教程将指导你安装该包并运行其中一个示例。

建议先了解初级教程中涵盖的 ROS 基础知识。

建议先阅读 创建工作空间 和 创建你的第一个 ROS 2 包 这两篇教程。

此外,如后文所述,若要在虚拟机中使用 webots_ros2,还需在 Mac 上原生安装 Webots。

你可以按照安装指南或从源码编译进行安装。

在 macOS 上,通过 UTM 虚拟机运行 ROS 2 比直接在 macOS 上安装体验更好,因为 ROS 在 Linux 环境中运行。

不过,Webots 需要在 macOS 上原生安装,它会与虚拟机中运行的 ROS 节点通信。

这样 Webots 就能使用原生的 3D 硬件加速。

虚拟机负责运行所有 ROS 组件(包括 RViz),并通过 TCP 连接到主机来启动 Webots。

借助共享文件夹,脚本可以将世界文件和其他资源从虚拟机传递到运行 Webots 的 macOS 主机。

以下步骤将说明如何创建一个预装 webots_ros2 发布包的虚拟机镜像。

也可以选择从源码安装。

在你的 macOS 上安装 UTM,

可以在 UTM 官网 上找到下载链接。

下载适用于 Humble 和 Rolling 的 Ubuntu 22.04 ISO 镜像 或适用于 Foxy 的 Ubuntu 20.04 ISO 镜像。

请确保下载与你的 CPU 架构相对应的镜像。

在 UTM 软件中:

  • 创建新镜像并选择 Virtualize 选项。
  • 在 Boot ISO Image 字段中选择你下载的 ISO 镜像。
  • 保留所有硬件设置的默认值(包括硬件加速保持关闭)。
  • 在 Shared Directory 窗口中,选择一个文件夹,webots_ros2 会通过它将所有 Webots 资源传输到主机。本例中选择的文件夹为 /Users/username/shared。
  • 其余参数保持默认即可。
  • 启动虚拟机。注意,每次启动虚拟机时都可以重新选择共享文件夹。
  • 虚拟机首次启动时,安装 Ubuntu 并设置账户用户名。本例中用户名为 ubuntu。
  • Ubuntu 安装完成后,关闭虚拟机,从 CD/DVD 字段中移除 ISO 镜像,然后重新启动虚拟机。

本节将在虚拟机中安装 ROS 2 并配置共享文件夹。

以下说明和命令均在虚拟机内执行。

  • 在已启动的虚拟机中打开终端,按照 Ubuntu 安装(apt) 的说明安装所需的 ROS 2 发行版。
  • 在虚拟机中创建一个文件夹作为共享文件夹。本例中路径为 /home/ubuntu/shared。
Terminal window
$ mkdir /home/ubuntu/shared
  • 要将此文件夹挂载到主机,执行以下命令。如果你的共享文件夹路径不同,请相应修改。
Terminal window
$ sudo mount -t 9p -o trans=virtio share /home/ubuntu/shared -oversion=9p2000.L
  • 要在虚拟机启动时自动挂载此文件夹,将以下行添加到 /etc/fstab。如果你的共享文件夹路径不同,请相应修改。
Terminal window
share /home/ubuntu/shared 9p trans=virtio,version=9p2000.L,rw,_netdev,nofail 0 0
  • 必须设置环境变量 WEBOTS_SHARED_FOLDER,才能让包在虚拟机中正常工作。该变量告诉 webots_ros2 包用于在主机和虚拟机之间交换数据的共享文件夹位置。其值格式为 <host shared folder>:<VM shared folder>,其中 <host shared folder> 是主机上的共享文件夹路径,<VM shared folder> 是虚拟机中同一共享文件夹的路径。

在本例中:

Terminal window
$ export WEBOTS_SHARED_FOLDER=/Users/username/shared:/home/ubuntu/shared

你可以将此命令添加到 ~/.bashrc 中,以便在新终端中自动设置该环境变量。

你可以安装官方发布的包,也可以从 Github 上的最新源码安装。

在虚拟机终端中运行以下命令。

Terminal window
$ sudo apt-get install ros-{DISTRO}-webots-ros2

安装 git。

Terminal window
$ sudo apt-get install git

创建一个带有 src 目录的 ROS 2 工作空间。

Terminal window
$ mkdir -p ~/ros2_ws/src

加载 ROS 2 环境。

Terminal window
$ source /opt/ros/{DISTRO}/setup.bash

从 Github 获取源码。

Terminal window
$ cd ~/ros2_ws
$ git clone --recurse-submodules https://github.com/cyberbotics/webots_ros2.git src/webots_ros2

安装包依赖。

Terminal window
$ sudo apt install python3-pip python3-rosdep python3-colcon-common-extensions
$ sudo rosdep init && rosdep update
$ rosdep install --from-paths src --ignore-src --rosdistro {DISTRO}

使用 colcon 构建包。

Terminal window
$ colcon build

加载该工作空间。

Terminal window
$ source install/local_setup.bash

4 启动 webots_ros2_universal_robot 示例

Section titled “4 启动 webots_ros2_universal_robot 示例”

如前所述,该包通过共享文件夹与主机上的 Webots 通信。

为了让 Webots 能够从虚拟机的 ROS 包在主机上启动,必须运行一个本地 TCP 仿真服务器。

该服务器可以在此处下载:local_simulation_server.py。

在 WEBOTS_HOME 环境变量中指定 Webots 安装文件夹(例如 /Applications/Webots.app),然后在主机上的终端(不是虚拟机)中运行服务器:

Terminal window
$ export WEBOTS_HOME=/Applications/Webots.app
$ python3 local_simulation_server.py

在虚拟机中,打开终端并执行以下命令来启动一个包。

首先加载 ROS 2 环境(如果尚未加载)。

Terminal window
$ source /opt/ros/{DISTRO}/setup.bash

如果是从源码安装的,请加载 ROS 2 工作空间(如果尚未加载)。

Terminal window
$ cd ~/ros2_ws
$ source install/local_setup.bash

如果尚未在 ~/.bashrc 中设置 WEBOTS_SHARED_FOLDER(详见前面章节),请设置它。务必根据你实际的目录路径进行修改。

Terminal window
$ export WEBOTS_SHARED_FOLDER=/Users/username/shared:/home/ubuntu/shared

使用 ROS 2 launch 命令启动演示包(例如 webots_ros2_universal_robot)。

Terminal window
$ ros2 launch webots_ros2_universal_robot multirobot_launch.py

如果 Webots 被关闭或 ROS 2 进程被中断,本地服务器会自动等待新的包启动,共享文件夹也会被清理以备下次运行。