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 发布包的虚拟机镜像。
也可以选择从源码安装。
1 创建虚拟机镜像
Section titled “1 创建虚拟机镜像”在你的 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 镜像,然后重新启动虚拟机。
2 配置虚拟机
Section titled “2 配置虚拟机”本节将在虚拟机中安装 ROS 2 并配置共享文件夹。
以下说明和命令均在虚拟机内执行。
- 在已启动的虚拟机中打开终端,按照 Ubuntu 安装(apt) 的说明安装所需的 ROS 2 发行版。
- 在虚拟机中创建一个文件夹作为共享文件夹。本例中路径为
/home/ubuntu/shared。
$ mkdir /home/ubuntu/shared- 要将此文件夹挂载到主机,执行以下命令。如果你的共享文件夹路径不同,请相应修改。
$ sudo mount -t 9p -o trans=virtio share /home/ubuntu/shared -oversion=9p2000.L- 要在虚拟机启动时自动挂载此文件夹,将以下行添加到
/etc/fstab。如果你的共享文件夹路径不同,请相应修改。
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>是虚拟机中同一共享文件夹的路径。
在本例中:
$ export WEBOTS_SHARED_FOLDER=/Users/username/shared:/home/ubuntu/shared你可以将此命令添加到 ~/.bashrc 中,以便在新终端中自动设置该环境变量。
3 安装 webots_ros2
Section titled “3 安装 webots_ros2”你可以安装官方发布的包,也可以从 Github 上的最新源码安装。
安装 webots_ros2 发布包
Section titled “安装 webots_ros2 发布包”在虚拟机终端中运行以下命令。
$ sudo apt-get install ros-{DISTRO}-webots-ros2从源码安装 webots_ros2
Section titled “从源码安装 webots_ros2”安装 git。
$ sudo apt-get install git创建一个带有 src 目录的 ROS 2 工作空间。
$ mkdir -p ~/ros2_ws/src加载 ROS 2 环境。
$ source /opt/ros/{DISTRO}/setup.bash从 Github 获取源码。
$ cd ~/ros2_ws$ git clone --recurse-submodules https://github.com/cyberbotics/webots_ros2.git src/webots_ros2安装包依赖。
$ 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 构建包。
$ colcon build加载该工作空间。
$ source install/local_setup.bash4 启动 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),然后在主机上的终端(不是虚拟机)中运行服务器:
$ export WEBOTS_HOME=/Applications/Webots.app$ python3 local_simulation_server.py在虚拟机中,打开终端并执行以下命令来启动一个包。
首先加载 ROS 2 环境(如果尚未加载)。
$ source /opt/ros/{DISTRO}/setup.bash如果是从源码安装的,请加载 ROS 2 工作空间(如果尚未加载)。
$ cd ~/ros2_ws$ source install/local_setup.bash如果尚未在 ~/.bashrc 中设置 WEBOTS_SHARED_FOLDER(详见前面章节),请设置它。务必根据你实际的目录路径进行修改。
$ export WEBOTS_SHARED_FOLDER=/Users/username/shared:/home/ubuntu/shared使用 ROS 2 launch 命令启动演示包(例如 webots_ros2_universal_robot)。
$ ros2 launch webots_ros2_universal_robot multirobot_launch.py如果 Webots 被关闭或 ROS 2 进程被中断,本地服务器会自动等待新的包启动,共享文件夹也会被清理以备下次运行。