安装(macOS)

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

教程级别: 高级

时间: 10分钟

背景

webots_ros2``软件包提供了ROS 2和Webots之间的接口。它包括多个子软件包,其中包括``webots_ros2_driver,它允许您启动Webots并与其通信。其他子软件包主要是示例,展示了使用该接口的多种可能实现。在本教程中,您将安装该软件包并学习如何运行其中的一个示例。

先决条件

建议您先了解入门级ROS原理,详情请参阅初学者 教程。特别是 创建一个工作空间创建软件包 是有用的先决条件。

为了在虚拟机中使用``webots_ros2``软件包,您需要在Mac上原生安装Webots,具体步骤如下所述。您可以按照`安装过程 <https://cyberbotics.com/doc/guide/installation-procedure>`_ 进行操作,或者从源代码构建Webots <https://github.com/cyberbotics/webots/wiki/macOS-installation/>。

任务

在macOS上,基于UTM虚拟机的解决方案可以提供比原生macOS安装更好的ROS 2用户体验,因为它在Linux环境中运行ROS。但是,Webots应该在macOS上进行原生安装,并且能够与运行在虚拟机中的ROS节点进行通信。该解决方案允许Webots进行本机的3D硬件加速。虚拟机运行所有ROS部分(包括RViz),通过TCP连接到主机以启动Webots。共享文件夹允许脚本将世界文件和其他资源文件从虚拟机传输到运行Webots的macOS上。

下面的步骤说明了如何使用安装了 webots_ros2 发布软件包的方式创建虚拟机镜像。您也可以从源代码进行安装。在 预配置的图像 部分,您可以找到已经配置好的Webots每个版本(从R2023a开始)的镜像下载。

1 创建虚拟机镜像

在您的 macOS 机器上安装 UTM。链接可以在 official UTM website 上找到。

下载 Ubuntu 22.04 的 .iso 镜像文件,用于 Humble 和 Rolling 版本,或者下载 Ubuntu 20.04 的镜像文件,用于 Foxy 版本。请确保下载与您的 CPU 架构相对应的镜像文件。

在UTM软件中:

  • 创建一个新的镜像,并选择“虚拟化”选项。

  • 在“启动ISO镜像”字段中选择你已下载的ISO镜像。

  • 将所有硬件设置保持默认(包括禁用硬件加速)。

  • 在``Shared Directory``窗口中,选择一个文件夹,用于``webots_ros2``将所有Webots资源传输到主机。在此示例中,选择的文件夹为``/Users/username/shared``。

  • 将所有其余参数保持默认。

  • 启动虚拟机。请注意,每次启动虚拟机时,都可以选择另一个共享文件夹。

  • 在首次启动虚拟机时,安装Ubuntu并选择一个帐户的用户名。在此示例中,用户名为``ubuntu``。

  • 安装完Ubuntu后,关闭虚拟机,将iso镜像从CD/DVD字段中移除,并重新启动虚拟机。

2 配置虚拟机

在本节中,将在虚拟机中安装ROS 2,并配置共享文件夹。以下指令和命令都在虚拟机内运行。

  • 在启动的虚拟机中打开终端,并按照 Ubuntu (Debian 包) 中的说明安装所需的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``必须始终设置,以便使该包在虚拟机中正常工作。此变量指定用于在主机和虚拟机(VM)之间交换数据的共享文件夹的位置,以供``webots_ros2``包使用。此变量的值应采用``<主机共享文件夹>:<VM共享文件夹>``的格式,其中``<主机共享文件夹>``是主机上共享文件夹的路径,``<VM共享文件夹>``是虚拟机上相同共享文件夹的路径。

    在这个例子中:

    export WEBOTS_SHARED_FOLDER=/Users/username/shared:/home/ubuntu/shared
    

    你可以将这个命令行添加到``~/.bashrc``文件中,这样在启动新终端时会自动设置这个环境变量。

3 安装``webots_ros2``

你可以选择从官方发布的包中安装``webots_ros2``,或者从最新的`Github <https://github.com/cyberbotics/webots_ros2>`_源代码中安装。

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

sudo apt-get install ros-humble-webots-ros2

4 启动``webots_ros2_universal_robot``示例。

如前面的部分所述,该软件包使用共享文件夹从虚拟机与主机之间进行Webots通信。为了能够从虚拟机的ROS软件包启动主机上的Webots,必须运行本地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/humble/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启动命令来启动演示包(例如``webots_ros2_universal_robot``)。

ros2 launch webots_ros2_universal_robot multirobot_launch.py

如果Webots关闭或ROS 2进程中断,本地服务器将自动等待新的包启动,并清理共享文件夹以供下一次运行使用。

预配置的图像

如果您不想从头开始设置虚拟机,以下链接提供了预配置的UTM镜像,适用于每个版本的Webots。``webots_ros2``版本是从官方仓库安装的(而不是从源代码),通常是与相应的Webots版本兼容的第一个版本。您可以下载镜像并升级软件包,或者根据需要从源代码安装。

在将下载的镜像添加到UTM软件时,在启动虚拟机之前,您还应该在下拉菜单中选择主机共享文件夹的路径(例如``/Users/username/shared``)。一旦虚拟机启动,必须始终设置``WEBOTS_SHARED_FOLDER``环境变量,以使软件包在虚拟机中正常工作。此变量指定给``webots_ros2``软件包用于在主机机器和虚拟机之间交换数据的共享文件夹的位置。此变量的值应为``<主机共享文件夹>:<虚拟机共享文件夹>``的格式,其中``<主机共享文件夹>``是主机机器上共享文件夹的路径,而``<虚拟机共享文件夹>``是虚拟机上相同共享文件夹的路径。

在预配置的镜像中,``WEBOTS_SHARED_FOLDER``已在``~/.bashrc``中设置。您需要更新它以使用正确的主机文件夹路径:

export WEBOTS_SHARED_FOLDER=/Users/username/shared:/home/ubuntu/shared