如何指挥模拟艾萨克机器人

本教程需要一台安装了“Isaac Sim 2023.1.x”(推荐)或“Isaac Sim 2022.2.x”的机器。 有关 Isaac Sim 的要求和安装,请参阅“Omniverse 文档 <https://docs.omniverse.nvidia.com/isaacsim/latest/index.html>”。 要配置 Isaac Sim 以与 ROS 2 配合使用,请参阅“本指南 <https://docs.omniverse.nvidia.com/isaacsim/latest/installation/install_ros.html#running-native-ros>”。

本教程对系统配置有以下假设:

  1. NVIDIA Isaac Sim 安装在默认位置。还支持基于 Docker 的 Isaac sim 安装,但由用户自行配置系统。

2. 已安装 Docker。 如果您计划将 GPU 与 MoveIt 一起使用,则需要安装 nvidia-docker。 3. 克隆此 repo,以便可以构建基于 Ubuntu 22.04 Humble 的 Docker 映像,该映像可以与 Isaac 通信并运行本教程。

ros2_control 简介

执行 MoveIt 计算的轨迹的推荐方法之一是使用 ros2_control 框架来管理和与您的机器人(真实或模拟)通信。它受到高度推荐,因为它为开发人员提供了一个通用 API, 允许您的软件通过简单地更改一些启动参数在许多不同类型的机器人及其内置的传感器之间切换。 例如,如果我们检查 Panda Robot 的“ros2_control.xacro”,我们可以看到它使用标志“use_fake_hardware”在模拟或连接物理机器人之间切换。

<hardware>
  <xacro:if value="${use_fake_hardware}">
    <plugin>mock_components/GenericSystem</plugin>
  </xacro:if>
  <xacro:unless value="${use_fake_hardware}">
    <plugin>franka_hardware/FrankaHardwareInterface</plugin>
    <param name="robot_ip">${robot_ip}</param>
  </xacro:unless>
</hardware>

硬件组件 可以是不同类型的,但插件 <plugin>mock_components/GenericSystem</plugin> 是一个非常简单的 系统 ,它将传入的 command_interface 值转发到关节的跟踪 ``state_interface``(即完美控制模拟关节)。

为了将我们的 Panda 机器人扩展到 Isaac Sim,我们首先必须引入 topic_based_ros2_control <https://github.com/PickNikRobotics/topic_based_ros2_control>`_。 此硬件接口是一个订阅和发布配置主题的 ``系统。 对于本教程,主题“/isaac_joint_states”将包含机器人的当前状态,而“/isaac_joint_commands”将用于启动它。

我们在本教程中使用的“moveit_resources_panda_moveit_config <https://github.com/moveit/moveit_resources/blob/humble/panda_moveit_config/config/panda.ros2_control.xacro#L7>`_

不支持连接到硬件,因此我们的“ros2_control.xacro”现在已更新,当标志“ros2_control_hardware_type”设置为“isaac”时,会加载“TopicBasedSystem”插件。

<xacro:if value="${ros2_control_hardware_type == 'mock_components'}">
    <plugin>mock_components/GenericSystem</plugin>
</xacro:if>
<xacro:if value="${ros2_control_hardware_type == 'isaac'}">
    <plugin>topic_based_ros2_control/TopicBasedSystem</plugin>
    <param name="joint_commands_topic">/isaac_joint_commands</param>
    <param name="joint_states_topic">/isaac_joint_states</param>
</xacro:if>

在本教程中,我们包含了一个 Python 脚本,该脚本加载 Panda 机器人 并构建一个 OmniGraph 以发布和订阅用于控制机器人的 ROS 主题。 OmniGraph 还包含节点,用于发布安装在 Panda 手上的摄像头的 RGB 和深度图像。 RGB 图像发布到主题 /rgb,摄像头信息发布到 /camera_info,深度图像发布到 /depth。 摄像头帧的帧 ID 为 /sim_camera。 要了解如何配置 Isaac Sim 机器人与 ROS 2 进行通信,请参阅 Omniverse 上的 联合控制教程

计算机设置

  1. 安装 Isaac Sim

  2. 对 MoveIt 2 Tutorials repo 进行浅克隆。

git clone https://github.com/moveit/moveit2_tutorials.git -b main
  1. 转到您克隆教程的文件夹,然后切换到以下目录。

cd moveit2_tutorials/doc/how_to_guides/isaac_panda
  1. 构建Docker 镜像。此docker镜像还包含“pytorch”。

docker compose build base

使用模拟组件运行 MoveIt 交互式标记演示

本节测试“mock_components/GenericSystem”硬件接口,而不是使用 Isaac Sim。

  1. 要测试“mock_components/GenericSystem”硬件接口,请运行:

docker compose up demo_mock_components

这将使用“mock_components”打开带有 Panda 机器人的 RViz,以模拟机器人并执行轨迹。

如果这是您第一次使用 MoveIt 和 RViz,请参阅:doc:RViz 中的快速入门 教程。

完成测试后,在终端中按“Ctrl+C”停止容器。

使用 Isaac Sim 运行 MoveIt 交互式标记演示

  1. 在主机上,转到教程启动目录。

cd moveit2_tutorials/doc/how_to_guides/isaac_panda/launch
  1. 然后运行以下命令来加载预先配置好的 Panda Robot,以便与本教程配合使用。

Note

此步骤假定主机上的“$HOME/.local/share/ov/pkg/”目录下安装了兼容版本的 Isaac Sim。

此步骤还需要几分钟来下载资产并设置 Isaac Sim,因此请耐心等待,不要单击模拟器启动时弹出的“强制退出”对话框。

./python.sh isaac_moveit.py

3.从“moveit2_tutorials/doc/how_to_guides/isaac_panda”目录启动一个使用“topic_based_ros2_control/TopicBasedSystem”硬件接口连接到 Isaac Sim 的容器。

docker compose up demo_isaac

这将打开 RViz,使用“TopicBasedSystem”接口与 Panda 机器人进行通信并执行轨迹。